|
|
1.1 ! root 1: #ifndef lint ! 2: static char sccsid[] = "@(#)nov.c 4.2 (Berkeley) 2/24/88"; ! 3: #endif ! 4: ! 5: #include "../condevs.h" ! 6: ! 7: /*** ! 8: * novopn(telno, flds, dev) connect to novation Smart-Cat ! 9: * (similar to hayes smartmodem) ! 10: * char *flds[], *dev[]; ! 11: * ! 12: * return codes: ! 13: * >0 - file number - ok ! 14: * CF_DIAL,CF_DEVICE - failed ! 15: */ ! 16: ! 17: novopn(telno, flds, dev) ! 18: char *telno; ! 19: char *flds[]; ! 20: struct Devices *dev; ! 21: { ! 22: int dh = -1; ! 23: extern errno; ! 24: char dcname[20]; ! 25: int pulse = 0; ! 26: ! 27: sprintf(dcname, "/dev/%s", dev->D_line); ! 28: DEBUG(4, "dc - %s\n", dcname); ! 29: if (strcmp(dev->D_calldev, "pulse") == 0) ! 30: pulse = 1; ! 31: if (setjmp(Sjbuf)) { ! 32: DEBUG(1, "timeout novation open %s\n", dcname); ! 33: logent("novation open", "TIMEOUT"); ! 34: if (dh >= 0) ! 35: close(dh); ! 36: delock(dev->D_line); ! 37: return CF_DIAL; ! 38: } ! 39: signal(SIGALRM, alarmtr); ! 40: getnextfd(); ! 41: alarm(10); ! 42: dh = open(dcname, 2); /* read/write */ ! 43: alarm(0); ! 44: ! 45: /* modem is open */ ! 46: next_fd = -1; ! 47: if (dh >= 0) { ! 48: fixline(dh, dev->D_speed); ! 49: /* set guard time small so line is in transparant mode */ ! 50: slowrite(dh, "\rATS12=1\r"); ! 51: if (expect("OK", dh) != 0) { ! 52: logent("NOV no line", _FAILED); ! 53: strcpy(devSel, dev->D_line); ! 54: novcls(dh); ! 55: return CF_DIAL; ! 56: } ! 57: ! 58: if (pulse) ! 59: slowrite(dh, "ATDP"); ! 60: else ! 61: slowrite(dh, "ATDT"); ! 62: slowrite(dh, telno); ! 63: slowrite(dh, "\r"); ! 64: ! 65: if (expect("CONNECT", dh) != 0) { ! 66: logent("NOV no carrier", _FAILED); ! 67: strcpy(devSel, dev->D_line); ! 68: novcls(dh); ! 69: return CF_DIAL; ! 70: } ! 71: ! 72: } ! 73: if (dh < 0) { ! 74: DEBUG(4, "novation failed\n", CNULL); ! 75: delock(dev->D_line); ! 76: } ! 77: DEBUG(4, "novation ok\n", CNULL); ! 78: return dh; ! 79: } ! 80: ! 81: novcls(fd) ! 82: int fd; ! 83: { ! 84: char dcname[20]; ! 85: struct sgttyb hup, sav; ! 86: ! 87: if (fd > 0) { ! 88: sprintf(dcname, "/dev/%s", devSel); ! 89: DEBUG(4, "Hanging up fd = %d\n", fd); ! 90: /* ! 91: * code to drop DTR -- change to 0 baud then back to default. ! 92: */ ! 93: gtty(fd, &hup); ! 94: gtty(fd, &sav); ! 95: hup.sg_ispeed = B0; ! 96: hup.sg_ospeed = B0; ! 97: stty(fd, &hup); ! 98: sleep(2); ! 99: stty(fd, &sav); ! 100: /* ! 101: * now raise DTR -- close the device & open it again. ! 102: */ ! 103: sleep(2); ! 104: close(fd); ! 105: sleep(2); ! 106: fd = open(dcname, 2); ! 107: /* ! 108: * Since we have a getty sleeping on this line, when it wakes up it sends ! 109: * all kinds of garbage to the modem. Unfortunatly, the modem likes to ! 110: * execute the previous command when it sees the garbage. The previous ! 111: * command was to dial the phone, so let's make the last command reset ! 112: * the modem. ! 113: */ ! 114: sleep(2); ! 115: slowrite(fd, "\rATZ\r"); ! 116: close(fd); ! 117: delock(devSel); ! 118: } ! 119: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.