diff options
author | John Kohl <jtkohl@mit.edu> | 1988-02-05 10:10:34 +0000 |
---|---|---|
committer | John Kohl <jtkohl@mit.edu> | 1988-02-05 10:10:34 +0000 |
commit | 402cbf105f57375c8a598d5a323e8d23067a2e14 (patch) | |
tree | 25a6680a591eb5f46227077cdf22700748374782 /server/zserver.h | |
parent | 080dfa6bb5ac7201aaa105daf017a6eab0d08e43 (diff) |
add locked field to host structure.
define pending structure & add to each server
rearrange dfn's of functions.
frob rexmit delay.
Diffstat (limited to 'server/zserver.h')
-rw-r--r-- | server/zserver.h | 60 |
1 files changed, 41 insertions, 19 deletions
diff --git a/server/zserver.h b/server/zserver.h index b96dc47..74696c3 100644 --- a/server/zserver.h +++ b/server/zserver.h @@ -81,6 +81,8 @@ typedef struct _ZHostList_t { struct _ZHostList_t *q_back; struct _ZClientList_t *zh_clients; struct sockaddr_in zh_addr; /* IP addr/port of hostmanager */ + int zh_locked; /* 1 if this host is locked for + a braindump */ } ZHostList_t; typedef enum _server_state { @@ -90,16 +92,6 @@ typedef enum _server_state { SERV_STARTING /* Server is between dead and up */ } server_state; -typedef struct _ZServerDesc_t { - server_state zs_state; /* server's state */ - struct sockaddr_in zs_addr; /* server's address */ - long zs_timeout; /* Length of timeout in sec */ - timer zs_timer; /* timer struct for this server */ - int zs_numsent; /* number of hello's sent */ - ZHostList_t *zs_hosts; /* pointer to list of info from this - server */ -} ZServerDesc_t; - typedef struct _ZNotAcked_t { struct _ZNotAcked_t *q_forw; /* link to next */ struct _ZNotAcked_t *q_back; /* link to prev */ @@ -117,6 +109,28 @@ typedef struct _ZNotAcked_t { #define na_srv_idx dest.srv_idx } ZNotAcked_t; +typedef struct _ZSrvPending_t { + struct _ZSrvPending_t *q_forw; /* link to next */ + struct _ZSrvPending_t *q_back; /* link to prev */ + caddr_t pend_packet; /* the notice (in pkt form) */ + int pend_len; /* len of pkt */ + int pend_auth; /* whether it is authentic */ + struct sockaddr_in pend_who; /* the addr of the sender */ +} ZSrvPending_t; + +typedef struct _ZServerDesc_t { + server_state zs_state; /* server's state */ + struct sockaddr_in zs_addr; /* server's address */ + long zs_timeout; /* Length of timeout in sec */ + timer zs_timer; /* timer struct for this server */ + int zs_numsent; /* number of hello's sent */ + ZHostList_t *zs_hosts; /* pointer to list of info from this + server */ + ZSrvPending_t *zs_update_queue; /* queue of packets to send + to this server when done dumping */ + int zs_dumping; /* 1 if dumping, so we should queue */ +} ZServerDesc_t; + typedef enum _ZSentType { NOT_SENT, /* message was not xmitted */ SENT, /* message was xmitted */ @@ -157,20 +171,24 @@ extern ZClient_t *client_which_client(); extern char *strsave(); /* found in dispatch.c */ -extern void dispatch(), clt_ack(), nack_release(), sendit(); +extern void handle_packet(), dispatch(), clt_ack(), nack_release(), sendit(); /* found in hostm_s.c */ -extern void hostm_dispatch(), hostm_flush(), hostm_shutdown(), hostm_losing(); +extern void hostm_flush(), hostm_shutdown(), hostm_losing(); extern ZHostList_t *hostm_find_host(); extern ZServerDesc_t *hostm_find_server(); extern void hostm_transfer(), hostm_deathgram(); +extern Code_t hostm_dispatch(); /* found in server_s.c */ -extern void server_timo(), server_dispatch(), server_recover(); -extern void server_adispatch(), server_init(), server_shutdown(); -extern void server_forward(), server_kill_clt(); +extern void server_timo(), server_recover(); +extern void server_init(), server_shutdown(); +extern void server_forward(), server_kill_clt(), server_pending_free(); +extern void server_self_queue(), server_send_queue(); extern int is_server(); extern ZServerDesc_t *server_which_server(); +extern ZSrvPending_t *server_dequeue(); +extern Code_t server_dispatch(), server_adispatch(); /* found in subscr_s.c */ extern Code_t subscr_cancel(), subscr_subscribe(), subscr_send_subs();; @@ -178,12 +196,12 @@ extern ZClientList_t *subscr_match_list(); extern void subscr_free_list(), subscr_cancel_client(), subscr_sendlist(); /* found in uloc_s.c */ -extern void ulogin_dispatch(), ulocate_dispatch(), uloc_hflush(); +extern void uloc_hflush(); extern void uloc_flush_client(); -extern Code_t uloc_send_locations(); +extern Code_t ulogin_dispatch(), ulocate_dispatch(), uloc_send_locations(); /* found in zctl.c */ -extern void control_dispatch(); +extern Code_t control_dispatch(); /* found in libc.a */ char *malloc(), *realloc(); @@ -194,6 +212,7 @@ long random(); /* found in main.c */ extern struct in_addr my_addr; /* my inet address */ extern struct sockaddr_in sock_sin; /* socket descriptors */ +extern u_short hm_port; /* port # of hostmanagers */ extern int srv_socket; /* dgram sockets for clients and other servers */ extern int bdump_socket; /* brain dump socket @@ -226,7 +245,7 @@ extern char *pktypes[]; /* names of the packet types */ /* useful defines */ /* client defines */ -#define REXMIT_SECS ((long) 15) /* rexmit delay on normal notices */ +#define REXMIT_SECS ((long) 20) /* rexmit delay on normal notices */ #define NUM_REXMITS (5) /* number of rexmits */ /* hostmanager defines */ @@ -268,6 +287,7 @@ extern char *pktypes[]; /* names of the packet types */ #define NULLZACLT ((ZAcl_t *) 0) #define NULLZPT ((ZPacket_t *) 0) #define NULLZSDT ((ZServerDesc_t *) 0) +#define NULLZSPT ((ZSrvPending_t *) 0) /* me_server_idx is the index into otherservers of this server descriptor. */ /* the 'limbo' server is always the first server */ @@ -276,6 +296,8 @@ extern char *pktypes[]; /* names of the packet types */ #define limbo_server_idx() (0) #define limbo_server (&otherservers[limbo_server_idx()]) +#define msgs_queued() (ZQLength() || otherservers[me_server_idx].zs_update_queue) + #define ack(a,b) clt_ack(a,b,SENT) #define nack(a,b) clt_ack(a,b,NOT_SENT) |