|
|
1.1 ! root 1: #ifndef lint ! 2: static char sccsid[] = "@(#)att2224.c 1.2 (Berkeley) 2/24/88"; ! 3: #endif ! 4: ! 5: #include "../condevs.h" ! 6: ! 7: attopn(telno, flds, dev) ! 8: char *telno, *flds[]; ! 9: struct Devices *dev; ! 10: { ! 11: char dcname[20], phone[MAXPH+10], c = 0; ! 12: int dnf, failret = 0, timelim; ! 13: ! 14: sprintf(dcname, "/dev/%s", dev->D_line); ! 15: ! 16: if (setjmp(Sjbuf)) { ! 17: delock(dev->D_line); ! 18: logent("DEVICE", "NO"); ! 19: DEBUG(4, "Open timed out %s", dcname); ! 20: alarm (0); ! 21: return CF_NODEV; ! 22: } ! 23: ! 24: signal(SIGALRM, alarmtr); ! 25: getnextfd(); ! 26: alarm(10); ! 27: ! 28: if ((dnf = open(dcname, 2)) <= 0) { ! 29: delock(dev->D_line); ! 30: logent("DEVICE", "NO"); ! 31: DEBUG(4, "Can't open %s", dcname); ! 32: alarm (0); ! 33: return CF_NODEV; ! 34: } ! 35: ! 36: alarm(0); ! 37: next_fd = -1; ! 38: fixline(dnf, dev->D_speed); ! 39: DEBUG(4, "modem port - %s\n", dcname); ! 40: ! 41: if (setjmp(Sjbuf)) { ! 42: delock(dev->D_line); ! 43: logent("ACU WRITE", "FAILED"); ! 44: return CF_DIAL; ! 45: } ! 46: signal(SIGALRM, alarmtr); ! 47: alarm(10); ! 48: do { ! 49: slowrite(dnf, "\r"); /* wake up modem */ ! 50: } while (expect(":~3", dnf)); ! 51: alarm(0); ! 52: ! 53: sprintf (phone, "atzt%s\r", telno); ! 54: slowrite (dnf, phone); /* type telno string to modem */ ! 55: ! 56: if ((expect(phone, dnf)) != SUCCESS) { ! 57: delock(dev->D_line); ! 58: logent("ACU READ", "FAILED"); ! 59: return CF_DIAL; ! 60: } ! 61: ! 62: if (setjmp(Sjbuf)) { ! 63: delock(dev->D_line); ! 64: logent("NO ANSWER", "FAILED"); ! 65: alarm (0); ! 66: return CF_DIAL; ! 67: } ! 68: timelim = strlen(telno) * 4; ! 69: signal(SIGALRM, alarmtr); ! 70: alarm(timelim > 30 ? timelim : 30); ! 71: ! 72: readchar: ! 73: if ((read(dnf, &c, 1)) != 1) { ! 74: delock(dev->D_line); ! 75: logent("ACU READ", "FAILED"); ! 76: return CF_DIAL; ! 77: } ! 78: ! 79: switch (c) { ! 80: case 'D': /* no dial tone */ ! 81: logent("NO DIAL TONE", "FAILED"); ! 82: failret++; ! 83: break; ! 84: case 'B': /* line busy */ ! 85: logent("LINE BUSY", "FAILED"); ! 86: failret++; ! 87: break; ! 88: case 'N': /* no answer */ ! 89: logent("NO ANSWER", "FAILED"); ! 90: failret++; ! 91: break; ! 92: case 'H': /* handshake failed */ ! 93: logent("MODEM HANDSHAKE", "FAILED"); ! 94: failret++; ! 95: break; ! 96: case '3': /* 2400 baud */ ! 97: DEBUG(4, "Baudrate set to 2400 baud", CNULL); ! 98: fixline(dnf, 2400); ! 99: break; ! 100: case '2': /* 1200 baud */ ! 101: DEBUG(4, "Baudrate set to 1200 baud", CNULL); ! 102: fixline(dnf, 1200); ! 103: break; ! 104: case '1': /* 300 baud */ ! 105: DEBUG(4, "Baudrate set to 300 baud", CNULL); ! 106: fixline(dnf, 300); ! 107: break; ! 108: default: /* Not one of the above, so must be garbage */ ! 109: goto readchar; ! 110: } ! 111: if (failret) { ! 112: alarm (0); ! 113: delock(dev->D_line); ! 114: return CF_DIAL; ! 115: } ! 116: alarm (0); ! 117: return dnf; ! 118: } ! 119: ! 120: attcls(fd) ! 121: int fd; ! 122: { ! 123: char dcname[20]; ! 124: #ifdef USG ! 125: struct termio hup, sav; ! 126: #else !USG ! 127: struct sgttyb hup, sav; ! 128: #endif !USG ! 129: ! 130: if (fd > 0) { ! 131: sprintf(dcname, "/dev/%s", devSel); ! 132: DEBUG(4, "Hanging up fd = %d\n", fd); ! 133: /* ! 134: * code to drop DTR -- change to 0 baud then back to default. ! 135: */ ! 136: gtty(fd, &hup); ! 137: gtty(fd, &sav); ! 138: #ifdef USG ! 139: hup.c_cflag = B0; ! 140: #else !USG ! 141: hup.sg_ispeed = B0; ! 142: hup.sg_ospeed = B0; ! 143: #endif !USG ! 144: stty(fd, &hup); ! 145: sleep(2); ! 146: stty(fd, &sav); ! 147: /* ! 148: * now raise DTR -- close the device ! 149: */ ! 150: sleep(2); ! 151: close(fd); ! 152: delock(devSel); ! 153: } ! 154: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.