|
|
1.1 ! root 1: #ifndef lint ! 2: static char sccsid[] = "@(#)vad.c 4.2 (Berkeley) 10/10/85"; ! 3: #endif ! 4: ! 5: #include "../condevs.h" ! 6: #ifdef VADIC ! 7: ! 8: /* ! 9: * vadopn: establish dial-out connection through a Racal-Vadic 3450. ! 10: * Returns descriptor open to tty for reading and writing. ! 11: * Negative values (-1...-7) denote errors in connmsg. ! 12: * Be sure to disconnect tty when done, via HUPCL or stty 0. ! 13: */ ! 14: ! 15: vadopn(telno, flds, dev) ! 16: char *telno; ! 17: char *flds[]; ! 18: struct Devices *dev; ! 19: { ! 20: int dh = -1; ! 21: int i, ok, er = 0, delay; ! 22: extern errno; ! 23: char dcname[20]; ! 24: ! 25: sprintf(dcname, "/dev/%s", dev->D_line); ! 26: if (setjmp(Sjbuf)) { ! 27: DEBUG(1, "timeout vadic open\n", ""); ! 28: logent("vadic open", "TIMEOUT"); ! 29: if (dh >= 0) ! 30: close(dh); ! 31: delock(dev->D_line); ! 32: return CF_NODEV; ! 33: } ! 34: signal(SIGALRM, alarmtr); ! 35: getnextfd(); ! 36: alarm(10); ! 37: dh = open(dcname, 2); ! 38: alarm(0); ! 39: ! 40: /* modem is open */ ! 41: next_fd = -1; ! 42: if (dh < 0) { ! 43: delock(dev->D_line); ! 44: return CF_NODEV; ! 45: } ! 46: fixline(dh, dev->D_speed); ! 47: ! 48: DEBUG(4, "calling %s -> ", telno); ! 49: if (dochat(dev, flds, dh)) { ! 50: logent(dcname, "CHAT FAILED"); ! 51: close(dh); ! 52: return CF_DIAL; ! 53: } ! 54: delay = 0; ! 55: for (i = 0; i < strlen(telno); ++i) { ! 56: switch(telno[i]) { ! 57: case '=': /* await dial tone */ ! 58: case '-': ! 59: case ',': ! 60: case '<': ! 61: case 'K': ! 62: telno[i] = 'K'; ! 63: delay += 5; ! 64: break; ! 65: } ! 66: } ! 67: DEBUG(4, "%s\n", telno); ! 68: for(i = 0; i < 5; ++i) { /* make 5 tries */ ! 69: /* wake up Vadic */ ! 70: write(dh, "\005", 1); ! 71: sleep(1); ! 72: write(dh, "\r", 1); ! 73: DEBUG(4, "wanted * ", CNULL); ! 74: ok = expect("*~5", dh); ! 75: DEBUG(4, "got %s\n", ok ? "?" : "that"); ! 76: if (ok != 0) ! 77: continue; ! 78: ! 79: write(dh, "D\r", 2); /* "D" (enter number) command */ ! 80: DEBUG(4, "wanted NUMBER?\\r\\n ", CNULL); ! 81: ok = expect("NUMBER?\r\n~5", dh); ! 82: DEBUG(4, "got %s\n", ok ? "?" : "that"); ! 83: if (ok != 0) ! 84: continue; ! 85: ! 86: /* send telno, send \r */ ! 87: write(dh, telno, strlen(telno)); ! 88: sleep(1); ! 89: write(dh, "\r", 1); ! 90: DEBUG(4, "wanted %s ", telno); ! 91: ok = expect(telno, dh); ! 92: if (ok == 0) ! 93: ok = expect("\r\n", dh); ! 94: DEBUG(4, "got %s\n", ok ? "?" : "that"); ! 95: if (ok != 0) ! 96: continue; ! 97: ! 98: write(dh, "\r", 1); /* confirm number */ ! 99: DEBUG(4, "wanted DIALING: ", CNULL); ! 100: ok = expect("DIALING: ", dh); ! 101: DEBUG(4, "got %s\n", ok ? "?" : "that"); ! 102: if (ok == 0) ! 103: break; ! 104: } ! 105: ! 106: if (ok == 0) { ! 107: sleep(10 + delay); /* give vadic some time */ ! 108: DEBUG(4, "wanted ON LINE\\r\\n ", CNULL); ! 109: ok = expect("ON LINE\r\n", dh); ! 110: DEBUG(4, "got %s\n", ok ? "?" : "that"); ! 111: } ! 112: ! 113: if (ok != 0) { ! 114: if (dh > 2) ! 115: close(dh); ! 116: DEBUG(4, "vadDial failed\n", CNULL); ! 117: delock(dev->D_line); ! 118: return CF_DIAL; ! 119: } ! 120: DEBUG(4, "vadic ok\n", CNULL); ! 121: return dh; ! 122: } ! 123: ! 124: vadcls(fd) ! 125: { ! 126: if (fd > 0) { ! 127: close(fd); ! 128: sleep(5); ! 129: delock(devSel); ! 130: } ! 131: } ! 132: #endif VADIC
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.