aboutsummaryrefslogtreecommitdiffstats
path: root/asterisk.c
diff options
context:
space:
mode:
authormarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2004-06-25 14:39:38 +0000
committermarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2004-06-25 14:39:38 +0000
commitffc897aa1caf2e9da067041b0da11b43a8726c20 (patch)
tree51fd29704b8034b0526738d296bb81ebbaf97fa3 /asterisk.c
parent7f3e9220f072cb1d87b428a0016253239c84ea95 (diff)
Add Tilghman's -R option to allow reconnecting when disconnected (bug #1916)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@3302 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'asterisk.c')
-rwxr-xr-xasterisk.c33
1 files changed, 31 insertions, 2 deletions
diff --git a/asterisk.c b/asterisk.c
index e4ca793cc..91680eee2 100755
--- a/asterisk.c
+++ b/asterisk.c
@@ -70,6 +70,7 @@ int option_initcrypto=0;
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 @@ static int ast_el_read_char(EditLine *el, char *cp)
/* 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@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 @@ static int show_cli_help(void) {
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 @@ int main(int argc, char *argv[])
}
*/
/* 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 @@ int main(int argc, char *argv[])
option_remote++;
option_nofork++;
break;
+ case 'R':
+ option_remote++;
+ option_nofork++;
+ option_reconnect++;
+ break;
case 'p':
option_highpriority++;
break;