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