home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.wwiv.com
/
ftp.wwiv.com.zip
/
ftp.wwiv.com
/
pub
/
PPPBCKP
/
SRC
/
SRC15B57.ZIP
/
NET.H
< prev
next >
Wrap
C/C++ Source or Header
|
1997-09-15
|
11KB
|
243 lines
/*****************************************************************************
WWIV Version 4
Copyright (C) 1988-1995 by Wayne Bell
Distribution of the source code for WWIV, in any form, modified or unmodified,
without PRIOR, WRITTEN APPROVAL by the author, is expressly prohibited.
Distribution of compiled versions of WWIV is limited to copies compiled BY
THE AUTHOR. Distribution of any copies of WWIV not compiled by the author
is expressly prohibited.
*****************************************************************************/
#ifndef _NET_H_
#define _NET_H_
/* All network nodes except the destination will only look at:
* tosys - the destination system. Is 0 if more than one system
* list_len - if (tosys==0) then list_len is the number of destination
* systems in a list immediately after the header. NOTE this list will
* be 2*list_len bytes long, since each system entry is 2 bytes.
* length - is the overall length of the message, not including the header
* or the system ist length. Thus the overall length of a message in
* the net will be (sizeof(net_header_rec) + 2*list_len + length)
*/
typedef struct {
unsigned short tosys, /* destination system */
touser, /* destination user */
fromsys, /* originating system */
fromuser; /* originating user */
unsigned short main_type, /* main message type */
minor_type; /* minor message type */
unsigned short list_len; /* # of entries in system list */
unsigned long daten; /* date/time sent */
unsigned long length; /* # of bytes of msg after header */
unsigned short method; /* method of compression */
} net_header_rec;
/*
* Please note that not all of these are used yet, some will probably never
* be used, but sounded like a good idea at the time.
*/
#define main_type_net_info 0x0001 /* normal network updates */
#define main_type_email 0x0002 /* email by user number */
#define main_type_post 0x0003 /* post from sub host */
#define main_type_file 0x0004 /* unused */
#define main_type_pre_post 0x0005 /* post to sub host */
#define main_type_external 0x0006 /* external message */
#define main_type_email_name 0x0007 /* email by user name */
#define main_type_net_edit 0x0008 /* network editor packet */
#define main_type_sub_list 0x0009 /* subs.lst update */
#define main_type_extra_data 0x000a /* unused */
#define main_type_group_bbslist 0x000b /* network update from GC */
#define main_type_group_connect 0x000c /* network update from GC */
#define main_type_unsed_1 0x000d /* unused */
#define main_type_group_info 0x000e /* misc update from GC */
#define main_type_ssm 0x000f /* so-and-so read your mail */
#define main_type_sub_add_req 0x0010 /* add me to your subboard */
#define main_type_sub_drop_req 0x0011 /* remove me from your subboard */
#define main_type_sub_add_resp 0x0012 /* status of add, 0=ok */
#define main_type_sub_drop_resp 0x0013 /* status of drop, 0=ok */
#define main_type_sub_list_info 0x0014 /* info for subs.lst file */
#define main_type_new_post 0x001a /* post by sub name */
#define main_type_new_extern 0x001b /* auto-processing external msgs */
/* these are in main_type_sub_*_resp, as the first byte of the text */
#define sub_adddrop_ok 0x00 /* you've been added/removed */
#define sub_adddrop_not_host 0x01 /* don't host that sub */
#define sub_adddrop_not_there 0x02 /* can't drop, you're not listed */
#define sub_adddrop_not_allowed 0x03 /* not allowed to add/drop you */
#define sub_adddrop_already_there 0x04 /* already in sub */
#define sub_adddrop_error 0xff /* internal error */
typedef struct {
unsigned short systemnumber, /* System number of the contact */
numcontacts, /* number of contacts with system */
numfails; /* number of consec failed calls out */
unsigned long firstcontact, /* time of first contact with system */
lastcontact, /* time of most recent contact */
lastcontactsent,/* time of last contact with data sent */
lasttry, /* time of last try to connect */
bytes_received, /* bytes received from system */
bytes_sent, /* bytes sent to system */
bytes_waiting; /* bytes waiting to be sent */
} net_contact_rec;
/* Each system will hold a file of these records. Each record will hold the
* data pertaining to all contacts with other systems.
*
* systemnumber tells what other system this data is for.
* numcontacts tells how many times a connection has been made with
* that system.
* numfails tells how many times this system has tried to call this other
* system but failed. This is consecutive times, and is zeroed out
* when a successful connection is made by calling out.
* firstcontact is time in unix format of the last time that system has been
* contacted on the net.
* lastcontact is the time the last contact with that system was made.
* lastcontactsent is the last time data was SENT to that system.
* lasttry is the last time we tried to call out to that system.
* bytes_received is number of bytes received from that system.
* bytes_sent is number of bytes sent to that system.
* bytes_waiting is the number of bytes waiting to be sent out to that
* system.
*
* This data is maintained so that the BBS can decide which other system to
* attempt connection with next.
*/
typedef struct {
unsigned short sysnum; /* system number of the system */
char phone[13], /* phone number of system */
name[40]; /* name of system */
unsigned char group; /* group of the system */
unsigned short speed, /* max baud rate of system */
other, /* other info about sys (bit-mapped)*/
forsys; /* how to get there */
short numhops; /* how long to get there */
union {
unsigned short rout_fact; /* routing factor */
float cost; /* cost factor */
long temp; /* temporary variable */
} xx;
} net_system_list_rec;
/* This data is all read in from a text file which holds info about all of
* the systems in the network. This text file doesn't hold connection info
* between the systems. The purpose of all records should be obvious.
*/
#define other_fido 0x0001 /* \ */
/* modem type designators */
#define other_Telebit_19200 0x0002 /* | */
#define other_USR_9600 0x0004 /* < */
#define other_Hayes_9600 0x0008 /* > */
#define other_V32 0x0020 /* ! */
#define other_V32bis 0x0040 /* $ */
#define other_compucom 0x0400 /* / */
#define other_FAX 0x1000 /* ? */
#define other_VFAST 0x4000 /* ~ */
/* system type designators */
#define other_coordinator 0x0010 /* ^ */
#define other_group_coord 0x0100 /* % */
#define other_net_coord 0x0200 /* & */
#define other_end_system 0x2000 /* _ */
#define other_net_server 0x0800 /* + */
#define other_PCP 0x0080 /* = */
typedef struct {
unsigned short sysnum, /* outward calling system */
numsys; /* num systems it can call */
unsigned short *connect; /* list of numsys systems */
float *cost; /* list of numsys costs */
} net_interconnect_rec;
/* This data is also read in from a text file. It tells how much it costs for
* sysnum to call out to other systems.
*
* numsys - is the number of systems that sysnum can call out to
* connect[] - points to an array of numsys integers that tell which
* other systems sysnum can connect to
* cost[] - points to an array of numsys floating point numbers telling
* how much it costs to connect to that system, per minute. ie, it would
* cost (cost[1]) dollars per minute for sysnum to call out to system
* number (connect[1]).
*/
typedef struct {
unsigned short sysnum; /* system to contact */
unsigned char macnum; /* macro/script to use */
unsigned short options; /* bit mapped */
unsigned char call_anyway; /* num days between calls */
char min_hr,
max_hr; /* calling hours */
char password[20]; /* password for that system */
unsigned char times_per_day; /* num times should call per day */
unsigned char call_x_days; /* call only every x days */
unsigned short min_k; /* minimum # k before callout */
char * opts; /* options or NULL */
} net_call_out_rec;
/* This record holds info about other systems that the sysop has determined
* that we can call out to.
*
* sysnum - system number that we can call
* macnum - macro/script number to use to call that system. This is set
* to zero if we just dial it directly.
* options - bit mapped. See #define's below.
* call_anyway - if non-zero, then the minimum number of days between calls
* to that system, even if there is nothing waiting to be sent there. This
* should only be non-zero if options_sendback is also set for this system.
* password - is the password used for connection to this system.
*/
#define options_sendback 0x0001 /* & they can send data back */
#define options_ATT_night 0x0002 /* - callout only at AT&T nigh hours */
#define options_PCP_night 0x0004 /* = callout only at PCP night hours */
#define options_no_call 0x0008 /* + don't call that system, it will call */
#define options_receive_only 0x0010 /* ~ never send anything to the system */
#define options_once_per_day 0x0020 /* ! Only call once per day */
#define options_compress 0x0040 /* ; compress data */
#define options_hslink 0x0080 /* ^ use HSLINK */
#define options_force_ac 0x0100 /* $ force area code on dial */
typedef struct {
unsigned short sysnum; /* system number we can call */
short nument; /* number of entries in list */
unsigned short *list; /* list of systems */
} sys_for_rec;
typedef struct {
unsigned char type; /* type of network */
char name[16]; /* network name */
char dir[69]; /* directory for net data */
unsigned short sysnum; /* system number */
net_call_out_rec *con; /* ptr to callout data */
net_contact_rec *ncn; /* ptr to contact info */
short num_con; /* number in array */
short num_ncn; /* number in array */
} net_networks_rec;
#define net_type_wwivnet 0
#define net_type_fidonet 1
#endif