/*
* $Id: protoco2.h,v 2.6 2003/05/30 17:15:22 gul Exp $
*
* $Log: protoco2.h,v $
* Revision 2.6 2003/05/30 17:15:22 gul
* Asymmetric ND-mode, new protocol option NDA
*
* Revision 2.5 2003/05/30 16:03:10 gul
* Asymmetric NR-mode
*
* Revision 2.4 2003/03/05 13:21:51 gul
* Fix warnings
*
* Revision 2.3 2002/02/22 00:18:34 gul
* Run by-file events with the same command-line once after session
*
* Revision 2.2 2001/02/15 16:05:59 gul
* crypt bugfix
*
* Revision 2.1 2001/02/15 11:03:18 gul
* Added crypt traffic possibility
*
* Revision 2.0 2001/01/10 12:12:38 gul
* Binkd is under CVS again
*
*
*/
/*
binkp's frames:
+---------------------- 0=data block, 1=message(command)
| +---- data block size / msg's argument size
| |
7 6543210 76543210
+-+-------+--------+--- ... ---+
| | HI LO | | -- data block / msg's argument
+-+-------+--------+--- ... ---+
*/
#ifndef _PROTOCO2_H_
#define _PROTOCO2_H_
#define BLK_HDR_SIZE 2
typedef unsigned char t_msg;
#define M_NUL 0 /* Ignored by binkp (data *
optionally Logged) */
#define M_ADR 1
#define M_PWD 2
#define M_FILE 3
#define M_OK 4 /* The password is ok (data *
ignored) */
#define M_EOB 5 /* End-of-batch (data ignored) */
#define M_GOT 6 /* File received */
#define M_ERR 7 /* Misc errors */
#define M_BSY 8 /* All AKAs are busy */
#define M_GET 9 /* Get a file from offset */
#define M_SKIP 10 /* Skip a file */
#define M_MAX 10
typedef struct _BMSG BMSG;
struct _BMSG
{
t_msg t; /* msg type */
int sz; /* msg size */
char *s; /* msg text */
};
/* Protocol's state */
typedef struct _STATE STATE;
struct _STATE
{
SOCKET s;
FTN_NODE *to; /* Dest. address (if an outbound *
connection) */
char expected_pwd[MAXPWDLEN + 1];
/* binkp buffres */
char *obuf;
char *optr; /* Next byte to send */
int oleft; /* Bytes left to send at optr */
char *ibuf;
int isize; /* Current block's size. * -1=expecting block
header */
int iread; /* Number of bytes read already */
int imsg; /* 0=data block, * 1=message(command) */
/* binkp queues and data */
BMSG *msgs; /* Output msg queue */
int n_msgs;
TFILE in, out; /* Files in transfer */
TFILE flo; /* A .?lo in transfer */
TFILE *sent_fls; /* Sent files: waiting for GOT */
int n_sent_fls; /* The number of... */
FTNQ *q; /* Queue */
FTN_ADDR *fa; /* Foreign akas */
int nfa; /* How many... */
int nallfa; /* How many remote akas including busy & n/a */
int maxflvr;
int skip_all_flag; /* We'd skip all */
int r_skipped_flag; /* Remote skipped smthng */
int listed_flag; /* Listed? */
char *inbound; /* The current inbound dir */
char *peer_name; /* Remote host's name */
unsigned long our_ip; /* Local IP */
int io_error;
int msgs_in_batch;
int minor, major; /* Version of remote binkp */
KILLLIST *killlist; /* Files to kill _after_ session */
int n_killlist;
RCVDLIST *rcvdlist; /* List of files rcvd in the curr.batch */
int n_rcvdlist;
/* binkp stats */
int files_sent; /* Files sent/rcvd during the session */
int files_rcvd;
unsigned long bytes_sent;
unsigned long bytes_rcvd;
time_t start_time; /* Start of session */
char sysname[MAXSYSTEMNAME + 1];
char sysop[MAXSYSOPNAME + 1];
char location[MAXLOCATIONNAME + 1];
/* binkp state description */
int local_EOB, remote_EOB;
int GET_FILE_balance; /* Prevent quitting without * waiting for GET
results */
int off_req_sent; /* "M_FILE ... -1" sent, waiting * for M_GET */
int state;
int NR_flag; /* State of binkp when in NR mode */
int ND_flag; /* State of binkp when in ND mode */
int MD_flag; /* State of binkp when in MD mode */
unsigned char *MD_challenge; /* Received CRAM challenge data */
int waiting_for_GOT; /* File sent, waiting for M_GOT in ND-mode */
int send_eof; /* Need to send zero-length data block */
char *ND_status; /* ND status file name */
TFILE in_complete; /* M_GOT sent, need to rename */
FTN_ADDR ND_addr; /* Address for current ND status */
FTN_ADDR out_addr; /* Currently precessing remote AKA */
int crypt_flag; /* Is session encrypted? */
unsigned long keys_out[3]; /* Encription keys for outbound */
unsigned long keys_in[3]; /* Encription keys for inbound */
EVTQ *evt_queue; /* Queue of by-files events */
};
#define STATE_DEFINED 1
/*
* Do we have to give up files for this node in this session? We send files if
* send-if-pwd not set or
* it's a secure session or
* it's an outbound session AND they don't skip what we send
*/
#define OK_SEND_FILES(S) \
((send_if_pwd == 0 || (S)->state == P_SECURE || (S)->to) \
&& (S)->r_skipped_flag == 0)
/* state.NR_flag: state of binkp when in NR mode */
#define NO_NR 0
#define WANT_NR 1
#define WE_NR 2
#define THEY_NR 4
/* state.ND_flag: state of binkp when in ND mode */
#define NO_ND 0
#define WE_ND 1
#define THEY_ND 2
#define CAN_NDA 4 /* they supports asymmetric ND-mode */
/* state.crypt_flag: state of binkp when in crypt mode */
#define NO_CRYPT 0
#define WE_CRYPT 1
#define THEY_CRYPT 2
#define YES_CRYPT 4
#endif
syntax highlighted by Code2HTML, v. 0.9.1