1 #ifndef lint 2 static char sccsid[] = "@(#)vent.c 4.4 (Berkeley) 03/02/91"; 3 #endif 4 5 #include "condevs.h" 6 7 ventopn(telno, flds, dev) 8 char *flds[], *telno; 9 struct Devices *dev; 10 { 11 int dh; 12 int i, ok = -1; 13 char dcname[20]; 14 15 sprintf(dcname, "/dev/%s", dev->D_line); 16 if (setjmp(Sjbuf)) { 17 DEBUG(1, "timeout ventel open\n", ""); 18 logent("ventel open", "TIMEOUT"); 19 if (dh >= 0) 20 close(dh); 21 delock(dev->D_line); 22 return CF_NODEV; 23 } 24 signal(SIGALRM, alarmtr); 25 getnextfd(); 26 alarm(10); 27 dh = open(dcname, 2); 28 next_fd = -1; 29 alarm(0); 30 if (dh < 0) { 31 DEBUG(4,"%s\n", errno == 4 ? "no carrier" : "can't open modem"); 32 delock(dev->D_line); 33 return errno == 4 ? CF_DIAL : CF_NODEV; 34 } 35 36 /* modem is open */ 37 fixline(dh, dev->D_speed); 38 39 /* translate - to % and = to & for VenTel */ 40 DEBUG(4, "calling %s -> ", telno); 41 for (i = 0; i < strlen(telno); ++i) { 42 switch(telno[i]) { 43 case '-': /* delay */ 44 telno[i] = '%'; 45 break; 46 case '=': /* await dial tone */ 47 telno[i] = '&'; 48 break; 49 case '<': 50 telno[i] = '%'; 51 break; 52 } 53 } 54 DEBUG(4, "%s\n", telno); 55 sleep(1); 56 for(i = 0; i < 5; ++i) { /* make up to 5 tries */ 57 slowrite(dh, "\r\r");/* awake, thou lowly VenTel! */ 58 59 DEBUG(4, "wanted %s ", "$"); 60 ok = expect("$", dh); 61 DEBUG(4, "got %s\n", ok ? "?" : "that"); 62 if (ok != 0) 63 continue; 64 slowrite(dh, "K"); /* "K" (enter number) command */ 65 DEBUG(4, "wanted %s ", "DIAL: "); 66 ok = expect("DIAL: ", dh); 67 DEBUG(4, "got %s\n", ok ? "?" : "that"); 68 if (ok == 0) 69 break; 70 } 71 72 if (ok == 0) { 73 slowrite(dh, telno); /* send telno, send \r */ 74 slowrite(dh, "\r"); 75 DEBUG(4, "wanted %s ", "ONLINE"); 76 ok = expect("ONLINE!", dh); 77 DEBUG(4, "got %s\n", ok ? "?" : "that"); 78 } 79 if (ok != 0) { 80 if (dh > 2) 81 close(dh); 82 DEBUG(4, "venDial failed\n", ""); 83 return CF_DIAL; 84 } 85 else 86 DEBUG(4, "venDial ok\n", ""); 87 return dh; 88 } 89 90 ventcls(fd) 91 int fd; 92 { 93 if (fd > 0) { 94 close(fd); 95 sleep(5); 96 delock(devSel); 97 } 98 } 99