summaryrefslogtreecommitdiff
path: root/server/zserver.h
diff options
context:
space:
mode:
authorGravatar John Kohl <jtkohl@mit.edu>1988-02-05 10:10:34 +0000
committerGravatar John Kohl <jtkohl@mit.edu>1988-02-05 10:10:34 +0000
commit402cbf105f57375c8a598d5a323e8d23067a2e14 (patch)
tree25a6680a591eb5f46227077cdf22700748374782 /server/zserver.h
parent080dfa6bb5ac7201aaa105daf017a6eab0d08e43 (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.h60
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)