|
|
1.1 ! root 1: #ifndef lint ! 2: static char sccsid[] = "@(#)cds224.c 1.1 (Berkeley) 1/13/86"; ! 3: #endif !lint ! 4: ! 5: #include "../condevs.h" ! 6: #ifdef CDS224 ! 7: ! 8: /* ! 9: * conopn: establish dial-out connection through a Concord CDS 224. ! 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: #define TRYS 5 /* number of trys */ ! 15: ! 16: cdsopn224(telno, flds, dev) ! 17: char *telno; ! 18: char *flds[]; ! 19: struct Devices *dev; ! 20: { ! 21: int dh = -1; ! 22: int i, ok, er = 0, delay; ! 23: extern errno; ! 24: char dcname[20]; ! 25: char *tempbuf[20]; ! 26: ! 27: sprintf(dcname, "/dev/%s", dev->D_line); ! 28: if (setjmp(Sjbuf)) { ! 29: DEBUG(1, "timeout concord open\n", ""); ! 30: logent("concord open", "TIMEOUT"); ! 31: if (dh >= 0) ! 32: cdscls224(dh); ! 33: delock(dev->D_line); ! 34: return CF_NODEV; ! 35: } ! 36: signal(SIGALRM, alarmtr); ! 37: getnextfd(); ! 38: alarm(10); ! 39: dh = open(dcname, 2); ! 40: alarm(0); ! 41: ! 42: /* modem is open */ ! 43: next_fd = -1; ! 44: if (dh < 0) { ! 45: delock(dev->D_line); ! 46: return CF_NODEV; ! 47: } ! 48: fixline(dh, dev->D_speed); ! 49: ! 50: DEBUG(4, "calling %s -> ", telno); ! 51: if (dochat(dev, flds, dh)) { ! 52: logent(dcname, "CHAT FAILED"); ! 53: cdscls224(dh); ! 54: return CF_DIAL; ! 55: } ! 56: for(i = 0; i < TRYS; ++i) { ! 57: /* wake up Concord */ ! 58: write(dh, "\r\r", 2); ! 59: DEBUG(4, "wanted CDS >", CNULL); ! 60: ok = expect("CDS >", dh); ! 61: DEBUG(4, "got %s\n", ok ? "?" : "that"); ! 62: if (ok != 0) ! 63: continue; ! 64: ! 65: write(dh, "\r", 2); ! 66: DEBUG(4, "wanted CDS >", CNULL); ! 67: ok = expect("CDS >", dh); ! 68: DEBUG(4, "got %s\n", ok ? "?" : "that"); ! 69: if (ok != 0) ! 70: continue; ! 71: ! 72: /* send telno \r */ ! 73: sprintf(tempbuf,"D%s\r",telno); ! 74: write(dh, tempbuf, strlen(tempbuf)); ! 75: ! 76: DEBUG(4, "wanted DIALING ", CNULL); ! 77: ok = expect("DIALING ", dh); ! 78: DEBUG(4, "got %s\n", ok ? "?" : "that"); ! 79: if (ok == 0) ! 80: break; ! 81: } ! 82: ! 83: if (ok == 0) { ! 84: sleep(10); /* give concord some time */ ! 85: DEBUG(4, "wanted INITIATING " , CNULL); ! 86: ok = expect("INITIATING", dh); ! 87: DEBUG(4, "got %s\n", ok ? "?" : "that"); ! 88: } ! 89: ! 90: if (ok != 0) { ! 91: if (dh > 2) ! 92: close(dh); ! 93: DEBUG(4, "conDial failed\n", CNULL); ! 94: delock(dev->D_line); ! 95: return CF_DIAL; ! 96: } ! 97: DEBUG(4, "concord ok\n", CNULL); ! 98: return dh; ! 99: } ! 100: ! 101: cdscls224(fd) ! 102: { ! 103: ! 104: if (fd > 0) { ! 105: close(fd); ! 106: sleep(5); ! 107: delock(devSel); ! 108: } ! 109: } ! 110: #endif CDS224
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.