[Asterisk-cvs] asterisk asterisk.c,1.97,1.98

markster at lists.digium.com markster at lists.digium.com
Fri Jun 25 10:53:44 CDT 2004


Update of /usr/cvsroot/asterisk
In directory mongoose.digium.com:/tmp/cvs-serv10341

Modified Files:
	asterisk.c 
Log Message:
Add Tilghman's -R option to allow reconnecting when disconnected (bug #1916)


Index: asterisk.c
===================================================================
RCS file: /usr/cvsroot/asterisk/asterisk.c,v
retrieving revision 1.97
retrieving revision 1.98
diff -u -d -r1.97 -r1.98
--- asterisk.c	25 Jun 2004 04:07:52 -0000	1.97
+++ asterisk.c	25 Jun 2004 14:39:38 -0000	1.98
@@ -70,6 +70,7 @@
 int option_nocolor;
 int option_dumpcore = 0;
 int option_overrideconfig = 0;
+int option_reconnect = 0;
 int fully_booted = 0;
 
 static int ast_socket = -1;		/* UNIX Socket for allowing remote control */
@@ -871,7 +872,29 @@
 			/* if the remote side disappears exit */
 			if (res < 1) {
 				fprintf(stderr, "\nDisconnected from Asterisk server\n");
-				quit_handler(0, 0, 0, 0);
+				if (!option_reconnect) {
+					quit_handler(0, 0, 0, 0);
+				} else {
+					int tries;
+					int reconnects_per_second = 10;
+					fprintf(stderr, "\nAttempting to reconnect for 30 seconds\n");
+					for (tries=0;tries<30 * reconnects_per_second;tries++) {
+						if (ast_tryconnect()) {
+							printf(term_quit());
+							ast_register_verbose(console_verboser);
+							ast_verbose( "Asterisk " ASTERISK_VERSION ", Copyright (C) 1999-2004 Digium.\n");
+							ast_verbose( "Written by Mark Spencer <markster at digium.com>\n");
+							ast_verbose( "=========================================================================\n");
+							break;
+						} else {
+							usleep(1000000 / reconnects_per_second);
+						}
+					}
+					if (tries >= 30) {
+						fprintf(stderr, "Failed to reconnect for 30 seconds.  Quitting.\n");
+						quit_handler(0, 0, 0, 0);
+					}
+				}
 			}
 
 			buf[res] = '\0';
@@ -1394,6 +1417,7 @@
 	printf("   -p              Run as pseudo-realtime thread\n");
 	printf("   -q              Quiet mode (supress output)\n");
 	printf("   -r              Connect to Asterisk on this machine\n");
+	printf("   -R              Connect to Asterisk, and attempt to reconnect if disconnected\n");
 	printf("   -v              Increase verbosity (multiple v's = more verbose)\n");
 	printf("   -x <cmd>        Execute command <cmd> (only valid with -r)\n");
 	printf("\n");
@@ -1498,7 +1522,7 @@
 	}
 	*/
 	/* Check for options */
-	while((c=getopt(argc, argv, "hfdvqprgcinx:C:")) != -1) {
+	while((c=getopt(argc, argv, "hfdvqprRgcinx:C:")) != -1) {
 		switch(c) {
 		case 'd':
 			option_debug++;
@@ -1518,6 +1542,11 @@
 			option_remote++;
 			option_nofork++;
 			break;
+		case 'R':
+			option_remote++;
+			option_nofork++;
+			option_reconnect++;
+			break;
 		case 'p':
 			option_highpriority++;
 			break;




More information about the svn-commits mailing list