aboutsummaryrefslogtreecommitdiff
path: root/gnu/libexec/uucp/common_sources/conn.h
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/libexec/uucp/common_sources/conn.h')
-rw-r--r--gnu/libexec/uucp/common_sources/conn.h312
1 files changed, 312 insertions, 0 deletions
diff --git a/gnu/libexec/uucp/common_sources/conn.h b/gnu/libexec/uucp/common_sources/conn.h
new file mode 100644
index 000000000000..59d4881b07ff
--- /dev/null
+++ b/gnu/libexec/uucp/common_sources/conn.h
@@ -0,0 +1,312 @@
+/* conn.h
+ Header file for routines which manipulate connections.
+
+ Copyright (C) 1991, 1992 Ian Lance Taylor
+
+ This file is part of the Taylor UUCP package.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+ The author of the program may be contacted at ian@airs.com or
+ c/o Infinity Development Systems, P.O. Box 520, Waltham, MA 02254.
+ */
+
+#ifndef CONN_H
+
+#define CONN_H
+
+#if ANSI_C
+/* These structures are used in prototypes but are not defined in this
+ header file. */
+struct uuconf_system;
+struct uuconf_dialer;
+struct uuconf_chat;
+#endif
+
+/* This structure represents a connection. */
+
+struct sconnection
+{
+ /* Pointer to command table for this type of connection. */
+ const struct sconncmds *qcmds;
+ /* Pointer to system dependent information. */
+ pointer psysdep;
+ /* Pointer to system independent information. */
+ struct uuconf_port *qport;
+};
+
+/* Whether fconn_dial got a dialer. */
+
+enum tdialerfound
+{
+ /* Did not find a dialer. */
+ DIALERFOUND_FALSE,
+ /* Found a dialer which does not need to be freed. */
+ DIALERFOUND_TRUE,
+ /* Found a dialer which does need to be freed. */
+ DIALERFOUND_FREE
+};
+
+/* Parity settings to pass to fconn_set. */
+
+enum tparitysetting
+{
+ /* Do not change output parity generation. */
+ PARITYSETTING_DEFAULT,
+ /* No parity (all eight output bits used). */
+ PARITYSETTING_NONE,
+ /* Even parity. */
+ PARITYSETTING_EVEN,
+ /* Odd parity. */
+ PARITYSETTING_ODD,
+ /* Mark parity. */
+ PARITYSETTING_MARK,
+ /* Space parity. */
+ PARITYSETTING_SPACE
+};
+
+/* Type of strip control argument to fconn_set. */
+
+enum tstripsetting
+{
+ /* Do not change the stripping of input characters. */
+ STRIPSETTING_DEFAULT,
+ /* Do not strip input characters to seven bits. */
+ STRIPSETTING_EIGHTBITS,
+ /* Strip input characters to seven bits. */
+ STRIPSETTING_SEVENBITS
+};
+
+/* Type of XON/XOFF control argument to fconn_set. */
+
+enum txonxoffsetting
+{
+ /* Do not change XON/XOFF handshake setting. */
+ XONXOFF_DEFAULT,
+ /* Do not do XON/XOFF handshaking. */
+ XONXOFF_OFF,
+ /* Do XON/XOFF handshaking. */
+ XONXOFF_ON
+};
+
+/* A command table holds the functions which implement actions for
+ each different kind of connection. */
+
+struct sconncmds
+{
+ /* Free up a connection. */
+ void (*pufree) P((struct sconnection *qconn));
+ /* Lock the connection. The fin argument is TRUE if the connection
+ is to be used for an incoming call. May be NULL. */
+ boolean (*pflock) P((struct sconnection *qconn, boolean fin));
+ /* Unlock the connection. May be NULL. */
+ boolean (*pfunlock) P((struct sconnection *qconn));
+ /* Open the connection. */
+ boolean (*pfopen) P((struct sconnection *qconn, long ibaud,
+ boolean fwait));
+ /* Close the connection. */
+ boolean (*pfclose) P((struct sconnection *qconn,
+ pointer puuconf,
+ struct uuconf_dialer *qdialer,
+ boolean fsuccess));
+ /* Reset the connection so that another call may be accepted. */
+ boolean (*pfreset) P((struct sconnection *qconn));
+ /* Dial a number on a connection. This set *qdialer to the dialer
+ used, if any, and sets *ptdialerfound appropriately. The qsys
+ and zphone arguments are for the chat script. This field may be
+ NULL. */
+ boolean (*pfdial) P((struct sconnection *qconn, pointer puuconf,
+ const struct uuconf_system *qsys,
+ const char *zphone,
+ struct uuconf_dialer *qdialer,
+ enum tdialerfound *ptdialerfound));
+ /* Read data from a connection, with a timeout in seconds. When
+ called *pclen is the length of the buffer; on successful return
+ *pclen is the number of bytes read into the buffer. The cmin
+ argument is the minimum number of bytes to read before returning
+ ahead of a timeout. */
+ boolean (*pfread) P((struct sconnection *qconn, char *zbuf, size_t *pclen,
+ size_t cmin, int ctimeout, boolean freport));
+ /* Write data to the connection. */
+ boolean (*pfwrite) P((struct sconnection *qconn, const char *zbuf,
+ size_t clen));
+ /* Read and write data to the connection. This reads and writes
+ data until either all passed in data has been written or the read
+ buffer has been filled. When called *pcread is the size of the
+ read buffer and *pcwrite is the number of bytes to write; on
+ successful return *pcread is the number of bytes read and
+ *pcwrite is the number of bytes written. */
+ boolean (*pfio) P((struct sconnection *qconn, const char *zwrite,
+ size_t *pcwrite, char *zread, size_t *pcread));
+ /* Send a break character. This field may be NULL. */
+ boolean (*pfbreak) P((struct sconnection *qconn));
+ /* Change the connection setting. This field may be NULL. */
+ boolean (*pfset) P((struct sconnection *qconn,
+ enum tparitysetting tparity,
+ enum tstripsetting tstrip,
+ enum txonxoffsetting txonxoff));
+ /* Require or ignore carrer. This field may be NULL. */
+ boolean (*pfcarrier) P((struct sconnection *qconn,
+ boolean fcarrier));
+ /* Run a chat program on a connection. */
+ boolean (*pfchat) P((struct sconnection *qconn, char **pzprog));
+ /* Get the baud rate of a connection. This field may be NULL. */
+ long (*pibaud) P((struct sconnection *qconn));
+};
+
+/* Connection functions. */
+
+/* Initialize a connection. This must be called before any of the
+ other connection functions are called. It initializes the fields
+ of qconn. It returns FALSE on error. */
+extern boolean fconn_init P((struct uuconf_port *qport,
+ struct sconnection *qconn));
+
+/* Free up connection data. */
+extern void uconn_free P((struct sconnection *qconn));
+
+/* Lock a connection. The fin argument is TRUE if the port is to be
+ used for an incoming call; certains type of Unix locking need this
+ information because they need to open the port. */
+extern boolean fconn_lock P((struct sconnection *qconn, boolean fin));
+
+/* Unlock a connection. */
+extern boolean fconn_unlock P((struct sconnection *qconn));
+
+/* Open a connection. If ibaud is 0, the natural baud rate of the
+ port is used. If ihighbaud is not 0, fconn_open chooses the
+ highest supported baud rate between ibaud and ihighbaud. If fwait
+ is TRUE, this should wait for an incoming call. */
+extern boolean fconn_open P((struct sconnection *qconn, long ibaud,
+ long ihighbaud, boolean fwait));
+
+/* Close a connection. The fsuccess argument is TRUE if the
+ conversation completed normally, FALSE if it is being aborted. */
+extern boolean fconn_close P((struct sconnection *qconn,
+ pointer puuconf,
+ struct uuconf_dialer *qdialer,
+ boolean fsuccess));
+
+/* Reset a connection such that another call may be accepted. */
+extern boolean fconn_reset P((struct sconnection *q));
+
+/* Dial out on a connection. The qsys and zphone arguments are for
+ the chat scripts; zphone is the phone number to dial. If qdialer
+ is not NULL, *qdialer will be set to the dialer information used if
+ any; *ptdialerfound will be set appropriately. */
+extern boolean fconn_dial P((struct sconnection *q, pointer puuconf,
+ const struct uuconf_system *qsys,
+ const char *zphone,
+ struct uuconf_dialer *qdialer,
+ enum tdialerfound *ptdialerfound));
+
+/* Read from a connection.
+ zbuf -- buffer to read bytes into
+ *pclen on call -- length of zbuf
+ *pclen on successful return -- number of bytes read
+ cmin -- minimum number of bytes to read before returning ahead of timeout
+ ctimeout -- timeout in seconds, 0 if none
+ freport -- whether to report errors. */
+extern boolean fconn_read P((struct sconnection *qconn, char *zbuf,
+ size_t *pclen, size_t cmin,
+ int ctimeout, boolean freport));
+
+/* Write to a connection. */
+extern boolean fconn_write P((struct sconnection *qconn, const char *zbuf,
+ size_t cbytes));
+
+/* Read and write to a connection. This reads and writes data until
+ either all passed-in data has been written or the read buffer is
+ full.
+ zwrite -- buffer to write bytes from
+ *pcwrite on call -- number of bytes to write
+ *pcwrite on successful return -- number of bytes written
+ zread -- buffer to read bytes into
+ *pcread on call -- size of read buffer
+ *pcread on successful return -- number of bytes read. */
+extern boolean fconn_io P((struct sconnection *qconn, const char *zwrite,
+ size_t *pcwrite, char *zread, size_t *pcread));
+
+/* Send a break character to a connection. */
+extern boolean fconn_break P((struct sconnection *qconn));
+
+/* Change the settings of a connection. This allows independent
+ control over the parity of output characters, whether to strip
+ input characters, and whether to do XON/XOFF handshaking. There is
+ no explicit control over parity checking of input characters. This
+ function returns FALSE on error. Attempts to set values not
+ supported by the hardware are silently ignored. */
+extern boolean fconn_set P((struct sconnection *qconn,
+ enum tparitysetting tparity,
+ enum tstripsetting tstrip,
+ enum txonxoffsetting txonxoff));
+
+/* Get the baud rate of a connection. */
+extern long iconn_baud P((struct sconnection *qconn));
+
+/* Do a chat script with a system. */
+extern boolean fchat P((struct sconnection *qconn, pointer puuconf,
+ const struct uuconf_chat *qchat,
+ const struct uuconf_system *qsys,
+ const struct uuconf_dialer *qdialer,
+ const char *zphone, boolean ftranslate,
+ const char *zport, long ibaud));
+
+/* Tell the connection to either require or ignore carrier as fcarrier
+ is TRUE or FALSE respectively. This is called with fcarrier TRUE
+ when \m is encountered in a chat script, and with fcarrier FALSE
+ when \M is encountered. */
+extern boolean fconn_carrier P((struct sconnection *qconn,
+ boolean fcarrier));
+
+/* Run a chat program on a connection. */
+extern boolean fconn_run_chat P((struct sconnection *qconn,
+ char **pzprog));
+
+/* Dialing out on a modem is partially system independent. This is
+ the modem dialing routine. */
+extern boolean fmodem_dial P((struct sconnection *qconn, pointer puuconf,
+ const struct uuconf_system *qsys,
+ const char *zphone,
+ struct uuconf_dialer *qdialer,
+ enum tdialerfound *ptdialerfound));
+
+/* Begin dialing out. This should open the dialer device if there is
+ one, toggle DTR if requested and possible, and tell the port to
+ ignore carrier. It should return FALSE on error. */
+extern boolean fsysdep_modem_begin_dial P((struct sconnection *qconn,
+ struct uuconf_dialer *qdial));
+
+/* Finish dialing out on a modem. This should close the dialer device
+ if there is one. If the dialer and the port both support carrier,
+ the connection should be told to pay attention to carrier. If it
+ is possible to wait for carrier to come on, and the dialer and the
+ port both the port support carrier, it should wait until carrier
+ comes on. */
+extern boolean fsysdep_modem_end_dial P((struct sconnection *qconn,
+ struct uuconf_dialer *qdial));
+
+/* System dependent initialization routines. */
+extern boolean fsysdep_stdin_init P((struct sconnection *qconn));
+extern boolean fsysdep_modem_init P((struct sconnection *qconn));
+extern boolean fsysdep_direct_init P((struct sconnection *qconn));
+#if HAVE_TCP
+extern boolean fsysdep_tcp_init P((struct sconnection *qconn));
+#endif
+#if HAVE_TLI
+extern boolean fsysdep_tli_init P((struct sconnection *qconn));
+#endif
+
+#endif /* ! defined (CONN_H) */