diff options
Diffstat (limited to 'gnu/libexec/uucp/common_sources/prot.h')
| -rw-r--r-- | gnu/libexec/uucp/common_sources/prot.h | 250 | 
1 files changed, 250 insertions, 0 deletions
| diff --git a/gnu/libexec/uucp/common_sources/prot.h b/gnu/libexec/uucp/common_sources/prot.h new file mode 100644 index 000000000000..4e2bb584d842 --- /dev/null +++ b/gnu/libexec/uucp/common_sources/prot.h @@ -0,0 +1,250 @@ +/* prot.h +   Protocol header file. + +   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. +   */ + +/* We need the definition of uuconf_cmdtab to declare the protocol +   parameter arrays.  */ +#ifndef UUCONF_H +#include "uuconf.h" +#endif + +#if ANSI_C +/* These structures are used in prototypes but are not defined in this +   header file.  */ +struct sdaemon; +struct sconnection; +struct stransfer; +#endif + +/* The sprotocol structure holds information and functions for a specific +   protocol (e.g. the 'g' protocol).  */ + +struct sprotocol +{ +  /* The name of the protocol (e.g. 'g').  */ +  char bname; +  /* Reliability requirements, an or of UUCONF_RELIABLE_xxx defines +     from uuconf.h.  */ +  int ireliable; +  /* The maximum number of channels this protocol can support.  */ +  int cchans; +  /* Protocol parameter commands.  */ +  struct uuconf_cmdtab *qcmds; +  /* A routine to start the protocol.  If *pzlog is set to be +     non-NULL, it is an informative message to be logged; it should +     then be passed to ubuffree.  */ +  boolean (*pfstart) P((struct sdaemon *qdaemon, char **pzlog)); +  /* Shutdown the protocol.  */ +  boolean (*pfshutdown) P((struct sdaemon *qdaemon)); +  /* Send a command to the other side.  */ +  boolean (*pfsendcmd) P((struct sdaemon *qdaemon, const char *z, +			  int ilocal, int iremote)); +  /* Get buffer to space to fill with data.  This should set *pcdata +     to the amount of data desired.  */ +  char *(*pzgetspace) P((struct sdaemon *qdaemon, size_t *pcdata)); +  /* Send data to the other side.  The argument z must be a return +     value of pzgetspace.  The ipos argument is the file position, and +     is ignored by most protocols.  */ +  boolean (*pfsenddata) P((struct sdaemon *qdaemon, char *z, size_t c, +			   int ilocal, int iremote, long ipos)); +  /* Wait for data to come in and call fgot_data with it until +     fgot_data sets *pfexit.  */ +  boolean (*pfwait) P((struct sdaemon *qdaemon)); +  /* Handle any file level actions that need to be taken.  If a file +     transfer is starting rather than ending, fstart is TRUE.  If the +     file is being sent rather than received, fsend is TRUE.  If +     fstart and fsend are both TRUE, cbytes holds the size of the +     file.  If *pfhandled is set to TRUE, then the protocol routine +     has taken care of queueing up qtrans for the next action.  */ +  boolean (*pffile) P((struct sdaemon *qdaemon, struct stransfer *qtrans, +		       boolean fstart, boolean fsend, long cbytes, +		       boolean *pfhandled)); +}; + +/* Send data to the other system.  If the fread argument is TRUE, this +   will also receive data into the receive buffer abPrecbuf; fread is +   passed as TRUE if the protocol expects data to be coming back, to +   make sure the input buffer does not fill up.  Returns FALSE on +   error.  */ +extern boolean fsend_data P((struct sconnection *qconn, +			     const char *zsend, size_t csend, +			     boolean fdoread)); + +/* Receive data from the other system when there is no data to send. +   The cneed argument is the amount of data desired and the ctimeout +   argument is the timeout in seconds.  This will set *pcrec to the +   amount of data received.  It will return FALSE on error.  If a +   timeout occurs, it will return TRUE with *pcrec set to zero.  */ +extern boolean freceive_data P((struct sconnection *qconn, size_t cneed, +				size_t *pcrec, int ctimeout, +				boolean freport)); + +/* Get one character from the remote system, going through the +   procotol buffering.  The ctimeout argument is the timeout in +   seconds, and the freport argument is TRUE if errors should be +   reported (when closing a connection it is pointless to report +   errors).  This returns a character or -1 on a timeout or -2 on an +   error.  */ +extern int breceive_char P((struct sconnection *qconn, +			    int ctimeout, boolean freport)); + +/* Compute a 32 bit CRC of a data buffer, given an initial CRC.  */ +extern unsigned long icrc P((const char *z, size_t c, unsigned long ick)); + +/* The initial CRC value to use for a new buffer.  */ +#if ANSI_C +#define ICRCINIT (0xffffffffUL) +#else +#define ICRCINIT ((unsigned long) 0xffffffffL) +#endif + +/* The size of the receive buffer.  */ +#define CRECBUFLEN (16384) + +/* Buffer to hold received data.  */ +extern char abPrecbuf[CRECBUFLEN]; + +/* Index of start of data in abPrecbuf.  */ +extern int iPrecstart; + +/* Index of end of data (first byte not included in data) in abPrecbuf.  */ +extern int iPrecend; + +/* There are a couple of variables and functions that are shared by +   the 'i' and 'j' protocols (the 'j' protocol is just a wrapper +   around the 'i' protocol).  These belong in a separate header file, +   protij.h, but I don't want to create one for just a couple of +   things.  */ + +/* An escape sequence of characters for the 'j' protocol to avoid +   (protocol parameter ``avoid'').  */ +extern const char *zJavoid_parameter; + +/* Timeout to use when sending the 'i' protocol SYNC packet (protocol +   parameter ``sync-timeout'').  */ +extern int cIsync_timeout; + +/* Shared startup routine for the 'i' and 'j' protocols.  */ +extern boolean fijstart P((struct sdaemon *qdaemon, char **pzlog, +			   int imaxpacksize, +			   boolean (*pfsend) P((struct sconnection *qconn, +						const char *zsend, +						size_t csend, +						boolean fdoread)), +			   boolean (*pfreceive) P((struct sconnection *qconn, +						   size_t cneed, +						   size_t *pcrec, +						   int ctimeout, +						   boolean freport)))); + +/* Prototypes for 'g' protocol functions.  */ + +extern struct uuconf_cmdtab asGproto_params[]; +extern boolean fgstart P((struct sdaemon *qdaemon, char **pzlog)); +extern boolean fbiggstart P((struct sdaemon *qdaemon, char **pzlog)); +extern boolean fgshutdown P((struct sdaemon *qdaemon)); +extern boolean fgsendcmd P((struct sdaemon *qdaemon, const char *z, +			    int ilocal, int iremote)); +extern char *zggetspace P((struct sdaemon *qdaemon, size_t *pcdata)); +extern boolean fgsenddata P((struct sdaemon *qdaemon, char *z, size_t c, +			     int ilocal, int iremote, long ipos)); +extern boolean fgwait P((struct sdaemon *qdaemon)); + +/* Prototypes for 'f' protocol functions.  */ + +extern struct uuconf_cmdtab asFproto_params[]; +extern boolean ffstart P((struct sdaemon *qdaemon, char **pzlog)); +extern boolean ffshutdown P((struct sdaemon *qdaemon)); +extern boolean ffsendcmd P((struct sdaemon *qdaemon, const char *z, +			    int ilocal, int iremote)); +extern char *zfgetspace P((struct sdaemon *qdaemon, size_t *pcdata)); +extern boolean ffsenddata P((struct sdaemon *qdaemon, char *z, size_t c, +			     int ilocal, int iremote, long ipos)); +extern boolean ffwait P((struct sdaemon *qdaemon)); +extern boolean fffile P((struct sdaemon *qdaemon, struct stransfer *qtrans, +			 boolean fstart, boolean fsend, long cbytes, +			 boolean *pfhandled)); + +/* Prototypes for 't' protocol functions.  */ + +extern struct uuconf_cmdtab asTproto_params[]; +extern boolean ftstart P((struct sdaemon *qdaemon, char **pzlog)); +extern boolean ftshutdown P((struct sdaemon *qdaemon)); +extern boolean ftsendcmd P((struct sdaemon *qdaemon, const char *z, +			    int ilocal, int iremote)); +extern char *ztgetspace P((struct sdaemon *qdaemon, size_t *pcdata)); +extern boolean ftsenddata P((struct sdaemon *qdaemon, char *z, size_t c, +			     int ilocal, int iremote, long ipos)); +extern boolean ftwait P((struct sdaemon *qdaemon)); +extern boolean ftfile P((struct sdaemon *qdaemon, struct stransfer *qtrans, +			 boolean fstart, boolean fsend, long cbytes, +			 boolean *pfhandled)); + +/* Prototypes for 'e' protocol functions.  */ + +extern struct uuconf_cmdtab asEproto_params[]; +extern boolean festart P((struct sdaemon *qdaemon, char **pzlog)); +extern boolean feshutdown P((struct sdaemon *qdaemon)); +extern boolean fesendcmd P((struct sdaemon *qdaemon, const char *z, +			    int ilocal, int iremote)); +extern char *zegetspace P((struct sdaemon *qdaemon, size_t *pcdata)); +extern boolean fesenddata P((struct sdaemon *qdaemon, char *z, size_t c, +			     int ilocal, int iremote, long ipos)); +extern boolean fewait P((struct sdaemon *qdaemon)); +extern boolean fefile P((struct sdaemon *qdaemon, struct stransfer *qtrans, +			 boolean fstart, boolean fsend, long cbytes, +			 boolean *pfhandled)); + +/* Prototypes for 'i' protocol functions.  */ + +extern struct uuconf_cmdtab asIproto_params[]; +extern boolean fistart P((struct sdaemon *qdaemon, char **pzlog)); +extern boolean fishutdown P((struct sdaemon *qdaemon)); +extern boolean fisendcmd P((struct sdaemon *qdaemon, const char *z, +			    int ilocal, int iremote)); +extern char *zigetspace P((struct sdaemon *qdaemon, size_t *pcdata)); +extern boolean fisenddata P((struct sdaemon *qdaemon, char *z, size_t c, +			     int ilocal, int iremote, long ipos)); +extern boolean fiwait P((struct sdaemon *qdaemon)); + +/* Prototypes for 'j' protocol functions.  The 'j' protocol mostly +   uses the 'i' protocol functions, but it has a couple of functions +   of its own.  */ +extern boolean fjstart P((struct sdaemon *qdaemon, char **pzlog)); +extern boolean fjshutdown P((struct sdaemon *qdaemon)); + +/* Prototypes for 'a' protocol functions (these use 'z' as the second +   character because 'a' is a modified Zmodem protocol).  */ +extern struct uuconf_cmdtab asZproto_params[]; +extern boolean fzstart P((struct sdaemon *qdaemon, char **pzlog)); +extern boolean fzshutdown P((struct sdaemon *qdaemon)); +extern boolean fzsendcmd P((struct sdaemon *qdaemon, const char *z, +			    int ilocal, int iremote)); +extern char *zzgetspace P((struct sdaemon *qdaemon, size_t *pcdata)); +extern boolean fzsenddata P((struct sdaemon *qdaemon, char *z, size_t c, +			     int ilocal, int iremote, long ipos)); +extern boolean fzwait P((struct sdaemon *qdaemon)); +extern boolean fzfile P((struct sdaemon *qdaemon, struct stransfer *qtrans, +			 boolean fstart, boolean fsend, long cbytes, +			 boolean *pfhandled)); | 
