|
|
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.