70 |
#include "modem/modem.h" |
#include "modem/modem.h" |
71 |
#include "modem/devlock.h" |
#include "modem/devlock.h" |
72 |
#include "modem/script.h" |
#include "modem/script.h" |
73 |
|
#include "modem/phonetab.h" |
74 |
#include "options.h" |
#include "options.h" |
75 |
#include "utils.h" |
#include "utils.h" |
76 |
#include "access.h" |
#include "access.h" |
196 |
log (LOG_NOTICE, gettext ("Using %s device...\n"), PARAM_MODEM_DEVICE); |
log (LOG_NOTICE, gettext ("Using %s device...\n"), PARAM_MODEM_DEVICE); |
197 |
debug (1, "Device %s opened\n", PARAM_MODEM_DEVICE); |
debug (1, "Device %s opened\n", PARAM_MODEM_DEVICE); |
198 |
|
|
|
if (!modem_init ()) |
|
|
return 0; |
|
|
|
|
199 |
if (!modem_dial ()) |
if (!modem_dial ()) |
200 |
return 0; |
return 0; |
201 |
|
|
202 |
log (LOG_NOTICE, gettext ("Executing chat script (%s)...\n"), |
return 1; |
|
PARAM_MODEM_CHAT_SCRIPT); |
|
|
switch (chat_connect ()) |
|
|
{ |
|
|
case 1: |
|
|
log (LOG_NOTICE, gettext ("Chat success, connected...\n")); |
|
|
tcflush (fd, TCIOFLUSH); |
|
|
return 1; |
|
|
case 0: |
|
|
log (LOG_WARNING, gettext ("Chat failure, you're not connected...\n")); |
|
|
tcflush (fd, TCIOFLUSH); |
|
|
break; |
|
|
default: |
|
|
log (LOG_ERR, gettext ("Chat return a non boolean value.\n")); |
|
|
log (LOG_ERR, gettext ("Please verify your chat script.\n")); |
|
|
tcflush (fd, TCIOFLUSH); |
|
|
return 0; |
|
|
} |
|
|
return 0; |
|
203 |
} |
} |
204 |
|
|
205 |
int |
int |
251 |
int |
int |
252 |
modem_dial () |
modem_dial () |
253 |
{ |
{ |
254 |
int i; |
int i, j; |
255 |
|
int connected = 0; |
256 |
|
char script_file[1024]; |
257 |
|
|
258 |
log (LOG_NOTICE, gettext ("Dialing provider...\n")); |
log (LOG_NOTICE, gettext ("Dialing provider...\n")); |
259 |
for (i = 0; i < PARAM_MODEM_DIAL_RETRY; i++) |
if(!get_phonetab()) |
260 |
if (modem_dial_to (PARAM_MODEM_PHONE (0)) || |
return 0; |
261 |
modem_dial_to (PARAM_MODEM_PHONE (1)) || |
for (i = 0; !connected && i < PARAM_MODEM_DIAL_RETRY; i++) |
262 |
modem_dial_to (PARAM_MODEM_PHONE (2)) || |
{ |
263 |
modem_dial_to (PARAM_MODEM_PHONE (3)) || |
for(j=0; phonetab[j].phone; j++) |
264 |
modem_dial_to (PARAM_MODEM_PHONE (4)) || |
if(modem_dial_to (phonetab[j].phone)) |
265 |
modem_dial_to (PARAM_MODEM_PHONE (5))) |
{ |
266 |
break; |
snprintf(script_file, sizeof(script_file),"%s/%s.scm", |
267 |
if (i >= PARAM_MODEM_DIAL_RETRY) |
PARAM_MODEM_CHAT_PATH, |
268 |
|
phonetab[j].script? phonetab[j].script : DEFAULT_CHAT_FILE); |
269 |
|
if(modem_exec_script(script_file)) |
270 |
|
connected = 1; |
271 |
|
} |
272 |
|
} |
273 |
|
if(connected) |
274 |
|
free_phonetab (); |
275 |
|
if(!connected) |
276 |
{ |
{ |
277 |
if(status!=sexit) |
if(status!=sexit) |
278 |
log (LOG_ERR, gettext ("Too many failures, dialing process aborted.\n")); |
log (LOG_ERR, gettext ("Too many failures, dialing process aborted.\n")); |
292 |
if (!phone || status == sexit) |
if (!phone || status == sexit) |
293 |
return 0; |
return 0; |
294 |
|
|
295 |
|
if (!modem_init ()) |
296 |
|
return 0; |
297 |
|
|
298 |
log (LOG_INFO, gettext ("Dialing %s\n"), phone); |
log (LOG_INFO, gettext ("Dialing %s\n"), phone); |
299 |
if (!PARAM_MODEM_DIAL_PREFIX) |
if (!PARAM_MODEM_DIAL_PREFIX) |
300 |
snprintf (dialcmd, sizeof (dialcmd), "%s%s", PARAM_MODEM_DIALSTR, phone); |
snprintf (dialcmd, sizeof (dialcmd), "%s%s", PARAM_MODEM_DIALSTR, phone); |
308 |
{ |
{ |
309 |
case RESPONSE_ERROR: /* ERROR */ |
case RESPONSE_ERROR: /* ERROR */ |
310 |
log (LOG_ERR, gettext ("Bad string\n" |
log (LOG_ERR, gettext ("Bad string\n" |
311 |
"Please verify the phone number, dial string and prefix\n")); |
"Please verify the phone number, dial string and prefix\n")); |
312 |
return 0; |
return 0; |
313 |
break; |
break; |
314 |
|
|
352 |
|
|
353 |
case RESPONSE_FAX: /* FCLASS */ |
case RESPONSE_FAX: /* FCLASS */ |
354 |
log (LOG_WARNING, gettext ("You have been connected to a fax\n" |
log (LOG_WARNING, gettext ("You have been connected to a fax\n" |
355 |
"Please verify the phone number\n")); |
"Please verify the phone number\n")); |
356 |
return 0; |
return 0; |
357 |
break; |
break; |
358 |
|
|
372 |
} |
} |
373 |
|
|
374 |
int |
int |
375 |
|
modem_exec_script (filename) |
376 |
|
char *filename; |
377 |
|
{ |
378 |
|
log (LOG_NOTICE, gettext ("Executing chat script (%s)...\n"),filename); |
379 |
|
switch (chat_connect (filename)) |
380 |
|
{ |
381 |
|
case 1: |
382 |
|
log (LOG_NOTICE, gettext ("Chat success, connected...\n")); |
383 |
|
tcflush (fd, TCIOFLUSH); |
384 |
|
return 1; |
385 |
|
case 0: |
386 |
|
log (LOG_WARNING, gettext ("Chat failure, you're not connected...\n")); |
387 |
|
tcflush (fd, TCIOFLUSH); |
388 |
|
break; |
389 |
|
default: |
390 |
|
log (LOG_ERR, gettext ("Chat returned a non boolean value.\n" |
391 |
|
"Please verify your chat script.\n")); |
392 |
|
tcflush (fd, TCIOFLUSH); |
393 |
|
return 0; |
394 |
|
} |
395 |
|
return 0; |
396 |
|
} |
397 |
|
|
398 |
|
int |
399 |
modem_open (filename, _baud, rtscts) |
modem_open (filename, _baud, rtscts) |
400 |
char *filename; |
char *filename; |
401 |
int _baud; |
int _baud; |
483 |
{ |
{ |
484 |
/* set up the terminal characteristics. |
/* set up the terminal characteristics. |
485 |
see "man tcsetattr" for more information about these options. */ |
see "man tcsetattr" for more information about these options. */ |
486 |
t.c_iflag &= ~(BRKINT | ISTRIP | IUCLC | IXON | IXANY | IXOFF | IMAXBEL); |
|
487 |
|
/* input flags */ |
488 |
|
t.c_iflag &= ~(BRKINT | ISTRIP | IXON | IXOFF); |
489 |
|
#ifdef IUCLC |
490 |
|
t.c_iflag &= ~IUCLC; |
491 |
|
#endif |
492 |
|
#ifdef IXANY |
493 |
|
t.c_iflag &= ~IXANY; |
494 |
|
#endif |
495 |
|
#ifdef IMAXBEL |
496 |
|
t.c_iflag &= ~IMAXBEL; |
497 |
|
#endif |
498 |
t.c_iflag |= (IGNBRK | IGNPAR); |
t.c_iflag |= (IGNBRK | IGNPAR); |
499 |
|
|
500 |
|
/* output flags */ |
501 |
|
#ifdef OLCUC |
502 |
t.c_oflag &= ~(OLCUC); |
t.c_oflag &= ~(OLCUC); |
503 |
|
#else |
504 |
|
t.c_oflag = 0; |
505 |
|
#endif |
506 |
|
|
507 |
|
/* control flags */ |
508 |
t.c_cflag &= ~(CSIZE | CSTOPB | PARENB | PARODD); |
t.c_cflag &= ~(CSIZE | CSTOPB | PARENB | PARODD); |
509 |
t.c_cflag |= (CS8 | CREAD | HUPCL | CLOCAL); |
t.c_cflag |= (CS8 | CREAD | HUPCL | CLOCAL); |
510 |
if (rtscts) |
if (rtscts) |
511 |
t.c_cflag |= CRTSCTS; |
{ |
512 |
t.c_lflag &= ~(ISIG | XCASE | ECHO); |
#ifdef CRTSCTS |
513 |
|
# ifdef CCTS_OFLOW |
514 |
|
t.c_cflag |= CCTS_OFLOW; |
515 |
|
# else |
516 |
|
t.c_cflag |= CRTSCTS; |
517 |
|
# endif |
518 |
|
#endif |
519 |
|
#ifdef CRTS_IFLOW |
520 |
|
t.c_cflag |= CRTS_IFLOW; |
521 |
|
#endif |
522 |
|
} |
523 |
|
|
524 |
|
/* local flags */ |
525 |
|
t.c_lflag &= ~(ISIG | ECHO); |
526 |
|
#ifdef XCASE |
527 |
|
t.c_lflag &= ~XCASE; |
528 |
|
#endif |
529 |
|
|
530 |
tcsetattr (fd, TCSANOW, &t); |
tcsetattr (fd, TCSANOW, &t); |
531 |
|
|