--- src/modem/modem.c.orig 2006-01-16 19:05:49.000000000 +0100 +++ src/modem/modem.c 2006-01-16 19:11:05.000000000 +0100 @@ -268,27 +268,43 @@ log (LOG_NOTICE, _("Dialing provider...\n")); if(!get_phonetab()) return 0; - for (i = 0; !connected && i < PARAM_MODEM_DIAL_RETRY; i++) - { - for(j=0; phonetab[j].phone; j++) - if(modem_dial_to (phonetab[j].phone)) - { - snprintf(script_file, sizeof(script_file),"%s/%s.scm", - PARAM_MODEM_CHAT_PATH, - phonetab[j].script? phonetab[j].script : DEFAULT_CHAT_FILE); - if(modem_exec_script(script_file)) - connected = 1; - } + for (i = 0; !connected && i < PARAM_MODEM_DIAL_RETRY; i++) + { + /* Re-dial the same telephone number more than once before trying a different one. */ + for (j = 0; j < PARAM_MODEM_DIAL_RETRY; j++) + { + if(modem_dial_to (phonetab[i].phone)) + { + /* Modem connection was successful. */ + snprintf(script_file, sizeof(script_file),"%s/%s.scm", + PARAM_MODEM_CHAT_PATH, + phonetab[i].script? phonetab[i].script : DEFAULT_CHAT_FILE); + if(modem_exec_script(script_file)) + { + /* Script execution was successful. */ + connected = 1; + break; + } + } + + /* The connection was not made, attempt a re-dial or try a different number. */ + modem_hangup (); + sleep (PARAM_MODEM_RETRY_DELAY); + } + } + if(connected) - free_phonetab (); - if(!connected) - { + { + free_phonetab (); + return 1; + } + else + { if(status!=sexit) log (LOG_ERR, _("Too many failures, dialing process aborted.\n")); return 0; } - return 1; } int