|
|
1.1 root 1: /* conn.h
2: Header file for routines which manipulate connections.
3:
4: Copyright (C) 1991, 1992 Ian Lance Taylor
5:
6: This file is part of the Taylor UUCP package.
7:
8: This program is free software; you can redistribute it and/or
9: modify it under the terms of the GNU General Public License as
10: published by the Free Software Foundation; either version 2 of the
11: License, or (at your option) any later version.
12:
13: This program is distributed in the hope that it will be useful, but
14: WITHOUT ANY WARRANTY; without even the implied warranty of
15: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16: General Public License for more details.
17:
18: You should have received a copy of the GNU General Public License
19: along with this program; if not, write to the Free Software
20: Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21:
22: The author of the program may be contacted at [email protected] or
23: c/o Infinity Development Systems, P.O. Box 520, Waltham, MA 02254.
24: */
25:
26: #ifndef CONN_H
27:
28: #define CONN_H
29:
30: #if ANSI_C
31: /* These structures are used in prototypes but are not defined in this
32: header file. */
33: struct uuconf_system;
34: struct uuconf_dialer;
35: struct uuconf_chat;
36: #endif
37:
38: /* This structure represents a connection. */
39:
40: struct sconnection
41: {
42: /* Pointer to command table for this type of connection. */
43: const struct sconncmds *qcmds;
44: /* Pointer to system dependent information. */
45: pointer psysdep;
46: /* Pointer to system independent information. */
47: struct uuconf_port *qport;
48: };
49:
50: /* Whether fconn_dial got a dialer. */
51:
52: enum tdialerfound
53: {
54: /* Did not find a dialer. */
55: DIALERFOUND_FALSE,
56: /* Found a dialer which does not need to be freed. */
57: DIALERFOUND_TRUE,
58: /* Found a dialer which does need to be freed. */
59: DIALERFOUND_FREE
60: };
61:
62: /* Parity settings to pass to fconn_set. */
63:
64: enum tparitysetting
65: {
66: /* Do not change output parity generation. */
67: PARITYSETTING_DEFAULT,
68: /* No parity (all eight output bits used). */
69: PARITYSETTING_NONE,
70: /* Even parity. */
71: PARITYSETTING_EVEN,
72: /* Odd parity. */
73: PARITYSETTING_ODD,
74: /* Mark parity. */
75: PARITYSETTING_MARK,
76: /* Space parity. */
77: PARITYSETTING_SPACE
78: };
79:
80: /* Type of strip control argument to fconn_set. */
81:
82: enum tstripsetting
83: {
84: /* Do not change the stripping of input characters. */
85: STRIPSETTING_DEFAULT,
86: /* Do not strip input characters to seven bits. */
87: STRIPSETTING_EIGHTBITS,
88: /* Strip input characters to seven bits. */
89: STRIPSETTING_SEVENBITS
90: };
91:
92: /* Type of XON/XOFF control argument to fconn_set. */
93:
94: enum txonxoffsetting
95: {
96: /* Do not change XON/XOFF handshake setting. */
97: XONXOFF_DEFAULT,
98: /* Do not do XON/XOFF handshaking. */
99: XONXOFF_OFF,
100: /* Do XON/XOFF handshaking. */
101: XONXOFF_ON
102: };
103:
104: /* A command table holds the functions which implement actions for
105: each different kind of connection. */
106:
107: struct sconncmds
108: {
109: /* Free up a connection. */
110: void (*pufree) P((struct sconnection *qconn));
111: /* Lock the connection. The fin argument is TRUE if the connection
112: is to be used for an incoming call. May be NULL. */
113: boolean (*pflock) P((struct sconnection *qconn, boolean fin));
114: /* Unlock the connection. May be NULL. */
115: boolean (*pfunlock) P((struct sconnection *qconn));
116: /* Open the connection. */
117: boolean (*pfopen) P((struct sconnection *qconn, long ibaud,
118: boolean fwait));
119: /* Close the connection. */
120: boolean (*pfclose) P((struct sconnection *qconn,
121: pointer puuconf,
122: struct uuconf_dialer *qdialer,
123: boolean fsuccess));
124: /* Reset the connection so that another call may be accepted. */
125: boolean (*pfreset) P((struct sconnection *qconn));
126: /* Dial a number on a connection. This set *qdialer to the dialer
127: used, if any, and sets *ptdialerfound appropriately. The qsys
128: and zphone arguments are for the chat script. This field may be
129: NULL. */
130: boolean (*pfdial) P((struct sconnection *qconn, pointer puuconf,
131: const struct uuconf_system *qsys,
132: const char *zphone,
133: struct uuconf_dialer *qdialer,
134: enum tdialerfound *ptdialerfound));
135: /* Read data from a connection, with a timeout in seconds. When
136: called *pclen is the length of the buffer; on successful return
137: *pclen is the number of bytes read into the buffer. The cmin
138: argument is the minimum number of bytes to read before returning
139: ahead of a timeout. */
140: boolean (*pfread) P((struct sconnection *qconn, char *zbuf, size_t *pclen,
141: size_t cmin, int ctimeout, boolean freport));
142: /* Write data to the connection. */
143: boolean (*pfwrite) P((struct sconnection *qconn, const char *zbuf,
144: size_t clen));
145: /* Read and write data to the connection. This reads and writes
146: data until either all passed in data has been written or the read
147: buffer has been filled. When called *pcread is the size of the
148: read buffer and *pcwrite is the number of bytes to write; on
149: successful return *pcread is the number of bytes read and
150: *pcwrite is the number of bytes written. */
151: boolean (*pfio) P((struct sconnection *qconn, const char *zwrite,
152: size_t *pcwrite, char *zread, size_t *pcread));
153: /* Send a break character. This field may be NULL. */
154: boolean (*pfbreak) P((struct sconnection *qconn));
155: /* Change the connection setting. This field may be NULL. */
156: boolean (*pfset) P((struct sconnection *qconn,
157: enum tparitysetting tparity,
158: enum tstripsetting tstrip,
159: enum txonxoffsetting txonxoff));
160: /* Require or ignore carrer. This field may be NULL. */
161: boolean (*pfcarrier) P((struct sconnection *qconn,
162: boolean fcarrier));
163: /* Run a chat program on a connection. */
164: boolean (*pfchat) P((struct sconnection *qconn, char **pzprog));
165: /* Get the baud rate of a connection. This field may be NULL. */
166: long (*pibaud) P((struct sconnection *qconn));
167: };
168:
169: /* Connection functions. */
170:
171: /* Initialize a connection. This must be called before any of the
172: other connection functions are called. It initializes the fields
173: of qconn. It returns FALSE on error. */
174: extern boolean fconn_init P((struct uuconf_port *qport,
175: struct sconnection *qconn));
176:
177: /* Free up connection data. */
178: extern void uconn_free P((struct sconnection *qconn));
179:
180: /* Lock a connection. The fin argument is TRUE if the port is to be
181: used for an incoming call; certains type of Unix locking need this
182: information because they need to open the port. */
183: extern boolean fconn_lock P((struct sconnection *qconn, boolean fin));
184:
185: /* Unlock a connection. */
186: extern boolean fconn_unlock P((struct sconnection *qconn));
187:
188: /* Open a connection. If ibaud is 0, the natural baud rate of the
189: port is used. If ihighbaud is not 0, fconn_open chooses the
190: highest supported baud rate between ibaud and ihighbaud. If fwait
191: is TRUE, this should wait for an incoming call. */
192: extern boolean fconn_open P((struct sconnection *qconn, long ibaud,
193: long ihighbaud, boolean fwait));
194:
195: /* Close a connection. The fsuccess argument is TRUE if the
196: conversation completed normally, FALSE if it is being aborted. */
197: extern boolean fconn_close P((struct sconnection *qconn,
198: pointer puuconf,
199: struct uuconf_dialer *qdialer,
200: boolean fsuccess));
201:
202: /* Reset a connection such that another call may be accepted. */
203: extern boolean fconn_reset P((struct sconnection *q));
204:
205: /* Dial out on a connection. The qsys and zphone arguments are for
206: the chat scripts; zphone is the phone number to dial. If qdialer
207: is not NULL, *qdialer will be set to the dialer information used if
208: any; *ptdialerfound will be set appropriately. */
209: extern boolean fconn_dial P((struct sconnection *q, pointer puuconf,
210: const struct uuconf_system *qsys,
211: const char *zphone,
212: struct uuconf_dialer *qdialer,
213: enum tdialerfound *ptdialerfound));
214:
215: /* Read from a connection.
216: zbuf -- buffer to read bytes into
217: *pclen on call -- length of zbuf
218: *pclen on successful return -- number of bytes read
219: cmin -- minimum number of bytes to read before returning ahead of timeout
220: ctimeout -- timeout in seconds, 0 if none
221: freport -- whether to report errors. */
222: extern boolean fconn_read P((struct sconnection *qconn, char *zbuf,
223: size_t *pclen, size_t cmin,
224: int ctimeout, boolean freport));
225:
226: /* Write to a connection. */
227: extern boolean fconn_write P((struct sconnection *qconn, const char *zbuf,
228: size_t cbytes));
229:
230: /* Read and write to a connection. This reads and writes data until
231: either all passed-in data has been written or the read buffer is
232: full.
233: zwrite -- buffer to write bytes from
234: *pcwrite on call -- number of bytes to write
235: *pcwrite on successful return -- number of bytes written
236: zread -- buffer to read bytes into
237: *pcread on call -- size of read buffer
238: *pcread on successful return -- number of bytes read. */
239: extern boolean fconn_io P((struct sconnection *qconn, const char *zwrite,
240: size_t *pcwrite, char *zread, size_t *pcread));
241:
242: /* Send a break character to a connection. */
243: extern boolean fconn_break P((struct sconnection *qconn));
244:
245: /* Change the settings of a connection. This allows independent
246: control over the parity of output characters, whether to strip
247: input characters, and whether to do XON/XOFF handshaking. There is
248: no explicit control over parity checking of input characters. This
249: function returns FALSE on error. Attempts to set values not
250: supported by the hardware are silently ignored. */
251: extern boolean fconn_set P((struct sconnection *qconn,
252: enum tparitysetting tparity,
253: enum tstripsetting tstrip,
254: enum txonxoffsetting txonxoff));
255:
256: /* Get the baud rate of a connection. */
257: extern long iconn_baud P((struct sconnection *qconn));
258:
259: /* Do a chat script with a system. */
260: extern boolean fchat P((struct sconnection *qconn, pointer puuconf,
261: const struct uuconf_chat *qchat,
262: const struct uuconf_system *qsys,
263: const struct uuconf_dialer *qdialer,
264: const char *zphone, boolean ftranslate,
265: const char *zport, long ibaud));
266:
267: /* Tell the connection to either require or ignore carrier as fcarrier
268: is TRUE or FALSE respectively. This is called with fcarrier TRUE
269: when \m is encountered in a chat script, and with fcarrier FALSE
270: when \M is encountered. */
271: extern boolean fconn_carrier P((struct sconnection *qconn,
272: boolean fcarrier));
273:
274: /* Run a chat program on a connection. */
275: extern boolean fconn_run_chat P((struct sconnection *qconn,
276: char **pzprog));
277:
278: /* Dialing out on a modem is partially system independent. This is
279: the modem dialing routine. */
280: extern boolean fmodem_dial P((struct sconnection *qconn, pointer puuconf,
281: const struct uuconf_system *qsys,
282: const char *zphone,
283: struct uuconf_dialer *qdialer,
284: enum tdialerfound *ptdialerfound));
285:
286: /* Begin dialing out. This should open the dialer device if there is
287: one, toggle DTR if requested and possible, and tell the port to
288: ignore carrier. It should return FALSE on error. */
289: extern boolean fsysdep_modem_begin_dial P((struct sconnection *qconn,
290: struct uuconf_dialer *qdial));
291:
292: /* Finish dialing out on a modem. This should close the dialer device
293: if there is one. If the dialer and the port both support carrier,
294: the connection should be told to pay attention to carrier. If it
295: is possible to wait for carrier to come on, and the dialer and the
296: port both the port support carrier, it should wait until carrier
297: comes on. */
298: extern boolean fsysdep_modem_end_dial P((struct sconnection *qconn,
299: struct uuconf_dialer *qdial));
300:
301: /* System dependent initialization routines. */
302: extern boolean fsysdep_stdin_init P((struct sconnection *qconn));
303: extern boolean fsysdep_modem_init P((struct sconnection *qconn));
304: extern boolean fsysdep_direct_init P((struct sconnection *qconn));
305: #if HAVE_TCP
306: extern boolean fsysdep_tcp_init P((struct sconnection *qconn));
307: #endif
308: #if HAVE_TLI
309: extern boolean fsysdep_tli_init P((struct sconnection *qconn));
310: #endif
311:
312: #endif /* ! defined (CONN_H) */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.