diff options
Diffstat (limited to 'server/zserver.h')
-rw-r--r-- | server/zserver.h | 552 |
1 files changed, 205 insertions, 347 deletions
diff --git a/server/zserver.h b/server/zserver.h index fc00703..eb0a208 100644 --- a/server/zserver.h +++ b/server/zserver.h @@ -22,7 +22,6 @@ <sys/time.h>, <stdio.h>, <krb.h> */ -extern "C" { #include <arpa/inet.h> #include <zephyr/acl.h> #include <sys/file.h> @@ -34,15 +33,18 @@ extern "C" { #ifdef lint #include <sys/uio.h> /* so it shuts up about struct iovec */ #endif /* lint */ +#ifdef _IBMR2 +#include <sys/select.h> +#endif #include "zsrv_err.h" -} #include "timer.h" #include "zsrv_conf.h" /* configuration params */ -#include "ZString.h" +#include "zstring.h" #include "access.h" #include "unix.h" +#include "zalloc.h" /* definitions for the Zephyr server */ @@ -53,171 +55,71 @@ extern "C" { * instance, and recipient at the moment. */ -struct ZDestination { +typedef struct _ZDestination { unsigned long hash_value; -public: - ZString classname; - ZString inst; - ZString recip; - void set_hash () { - hash_value = classname.hash() ^ inst.hash() ^ recip.hash(); - } - unsigned long hash () { - return hash_value; - } - friend int operator== (const ZDestination&, const ZDestination&); - ZDestination (const char*, const char* =0, const char* =0); - ZDestination (const ZString& = null_string, - const ZString& = null_string, - const ZString& = null_string); - ZDestination (const ZDestination&); - ~ZDestination (); - void print (char *buf); - static int order_strings (const ZDestination&, const ZDestination&); -#if !defined(__GNUG__) || defined(FIXED_GXX) - void *operator new (unsigned int sz) { return zalloc (sz); } - void operator delete (void *ptr) { zfree (ptr, sizeof (ZDestination)); } -#endif -}; - -const static ZDestination null_destination = 0; - -extern int operator== (const ZDestination&, const ZDestination&); - -inline int operator != (const ZDestination& z1, const ZDestination& z2) { - return !(z1 == z2); -} + ZSTRING *classname; + ZSTRING *inst; + ZSTRING *recip; +} ZDestination; -inline int operator< (const ZDestination& z1, const ZDestination& z2) { - return (z1.hash_value != z2.hash_value - ? z1.hash_value < z2.hash_value - : ZDestination::order_strings (z1, z2) < 0); -} - -inline int operator> (const ZDestination& z1, const ZDestination& z2) { - return (z1 == z2) ? 0 : !(z1 < z2); -} - -inline int operator >= (const ZDestination& z1, const ZDestination& z2) { - return !(z1 < z2); -} - -struct Notice { +/* typedef struct _Notice { ZNotice_t *notice; - ZDestination dest; - ZString sender; + struct _ZDestination dest; + ZSTRING *sender; int msg_no; - static int current_msg; - Notice (ZNotice_t *n) : notice(n), dest(n->z_class, n->z_class_inst, n->z_recipient), sender (n->z_sender) { - msg_no = current_msg; - } -}; - -struct ZSubscr_t { - ZSubscr_t *q_forw; /* links in client's subscr. queue */ - ZSubscr_t *q_back; - ZDestination zst_dest; /* destination of messages */ - - ZSubscr_t (const ZString& = null_string, - const ZString& = null_string, - const ZString& = null_string); - ZSubscr_t (const ZSubscr_t&); -#if !defined (__GNUG__) || defined (FIXED_GXX) - void *operator new (unsigned int sz) { return zalloc (sz); } - void operator delete (void *ptr) { zfree (ptr, sizeof (ZSubscr_t)); } -#endif -}; - -inline ZSubscr_t::ZSubscr_t (const ZString& cls, const ZString& inst, const ZString& recip) : zst_dest (cls, inst, recip) { - q_forw = q_back = this; -} - -inline ZSubscr_t::ZSubscr_t (const ZSubscr_t& z) : zst_dest (z.zst_dest) { - q_forw = q_back = this; -} - -inline int operator== (const ZSubscr_t& s1, const ZSubscr_t& s2) { - return s1.zst_dest == s2.zst_dest; -} - -inline int operator >= (const ZSubscr_t& s1, const ZSubscr_t& s2) { - return s1.zst_dest >= s2.zst_dest; -} - -struct ZClient_t { +} Notice; +*/ +typedef struct _ZSubscr_t { + struct _ZSubscr_t *q_forw; /* links in client's subscr. queue */ + struct _ZSubscr_t *q_back; + struct _ZDestination zst_dest; /* destination of messages */ +} ZSubscr_t; + +typedef struct _ZClient_t { struct sockaddr_in zct_sin; /* ipaddr/port of client */ - struct ZSubscr_t *zct_subs; /* subscriptions */ + struct _ZSubscr_t *zct_subs; /* subscriptions */ #ifdef KERBEROS C_Block zct_cblock; /* session key for this client */ #endif /* KERBEROS */ - ZString zct_principal; /* krb principal of user */ + ZSTRING *zct_principal; /* krb principal of user */ long last_msg; /* last message sent to this client */ long last_check; /* actually, last time the other server was asked to check... */ - ZClient_t () { - last_msg = last_check = 0; - } -#if !defined (__GNUG__) || defined (FIXED_GXX) - void *operator new (unsigned int sz) { return zalloc (sz); } - void operator delete (void *ptr) { zfree (ptr, sizeof (ZClient_t)); } -#endif -}; - -struct ZClientList_t { - ZClientList_t *q_forw; - ZClientList_t *q_back; - ZClient_t *zclt_client; -#if !defined (__GNUG__) || defined (FIXED_GXX) - void *operator new (unsigned int sz) { return zalloc (sz); } - void operator delete (void *ptr) { zfree (ptr, sizeof (ZClientList_t)); } -#endif -}; +} ZClient_t; + +typedef struct _ZClientList_t { + struct _ZClientList_t *q_forw; + struct _ZClientList_t *q_back; + struct _ZClient_t *zclt_client; +} ZClientList_t; -struct ZClass_t { - ZClass_t *q_forw; - ZClass_t *q_back; +typedef struct _ZClass_t { + struct _ZClass_t *q_forw; + struct _ZClass_t *q_back; ZDestination zct_dest; ZAcl_t *zct_acl; ZClientList_t *zct_clientlist; +} ZClass_t; - ZClass_t (const ZDestination& dest = null_destination) : zct_dest (dest) { - q_forw = q_back = this; - zct_clientlist = 0; - zct_acl = 0; - } - ~ZClass_t () { - if (zct_clientlist) - xfree (zct_clientlist); - } -#if !defined (__GNUG__) || defined (FIXED_GXX) - void *operator new (unsigned int sz) { return zalloc (sz); } - void operator delete (void *ptr) { zfree (ptr, sizeof (ZClass_t)); } -#endif -}; - -struct ZHostList_t { - struct ZHostList_t *q_forw; - struct ZHostList_t *q_back; +typedef struct _ZHostList_t { + struct _ZHostList_t *q_forw; + struct _ZHostList_t *q_back; ZClientList_t *zh_clients; - sockaddr_in zh_addr; /* IP addr/port of hostmanager */ - unsigned int zh_locked : 1; /* 1 if this host is locked for + struct sockaddr_in zh_addr; /* IP addr/port of hostmanager */ + unsigned int zh_locked; /* 1 if this host is locked for a braindump */ -#if !defined (__GNUG__) || defined (FIXED_GXX) - void *operator new (unsigned int sz) { return zalloc (sz); } - void operator delete (void *ptr) { zfree (ptr, sizeof (ZHostList_t)); } -#endif -}; +} ZHostList_t; -enum server_state { +typedef enum _server_state { SERV_UP, /* Server is up */ SERV_TARDY, /* Server due for a hello */ SERV_DEAD, /* Server is considered dead */ SERV_STARTING /* Server is between dead and up */ -}; +} server_state; -struct ZNotAcked_t { - struct ZNotAcked_t *q_forw; /* link to next */ - struct ZNotAcked_t *q_back; /* link to prev */ +typedef struct _ZNotAcked_t { + struct _ZNotAcked_t *q_forw; /* link to next */ + struct _ZNotAcked_t *q_back; /* link to prev */ timer na_timer; /* timer for retransmit */ long na_abstimo; /* absolute timeout to drop after */ short na_rexmits; /* number of retransmits */ @@ -230,214 +132,177 @@ struct ZNotAcked_t { } dest; #define na_addr dest.na_sin #define na_srv_idx dest.srv_idx -#if !defined (__GNUG__) || defined (FIXED_GXX) - void *operator new (unsigned int sz) { return zalloc (sz); } - void operator delete (void *ptr) { zfree (ptr, sizeof (ZNotAcked_t)); } -#endif -#ifndef __GNUG__ /* cfront 2.0 breakage... */ - ZNotAcked_t () { } -#endif -}; +} ZNotAcked_t; -struct ZSrvPending_t { - struct ZSrvPending_t *q_forw; /* link to next */ - struct ZSrvPending_t *q_back; /* link to prev */ +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) */ short pend_len; /* len of pkt */ - unsigned int pend_auth : 1; /* whether it is authentic */ + unsigned int pend_auth; /* whether it is authentic */ struct sockaddr_in pend_who; /* the addr of the sender */ -#if !defined (__GNUG__) || defined (FIXED_GXX) - void *operator new (unsigned int sz) { return zalloc (sz); } - void operator delete (void *ptr) { zfree (ptr, sizeof (ZSrvPending_t)); } -#endif -}; +} ZSrvPending_t; -class ZServerDesc_t { +typedef struct _ZServerDesc_t { + server_state zs_state; /* server's state */ struct sockaddr_in zs_addr; /* server's address */ - friend void server_reset (void); - friend void server_recover (ZClient_t *); - friend void server_hello (ZServerDesc_t *, int); - friend void setup_server (ZServerDesc_t *, in_addr *); - friend void server_shutdown (void); - friend void server_forw_reliable (ZServerDesc_t*, caddr_t, int, - ZNotice_t *); - friend void srv_rexmit (void*); - friend ZServerDesc_t*server_which_server(sockaddr_in*); - public: long zs_timeout; /* Length of timeout in sec */ timer zs_timer; /* timer struct for this server */ - ZHostList_t *zs_hosts; /* pointer to list of info from this + struct _ZHostList_t *zs_hosts; /* pointer to list of info from this server */ - ZSrvPending_t *zs_update_queue; /* queue of packets to send + struct _ZSrvPending_t *zs_update_queue; /* queue of packets to send to this server when done dumping */ short zs_numsent; /* number of hello's sent */ - unsigned int zs_dumping : 1; /* 1 if dumping, so we should queue */ + unsigned int zs_dumping; /* 1 if dumping, so we should queue */ char addr[16]; /* text version of address */ - private: - server_state zs_state; /* server's state */ - public: - server_state state () { - return zs_state; - } - void set_state (server_state s) { - zs_state = s; - } -}; - -enum ZSentType { +} ZServerDesc_t; + +typedef enum ZSentType { NOT_SENT, /* message was not xmitted */ SENT, /* message was xmitted */ AUTH_FAILED, /* authentication failed */ NOT_FOUND /* user not found for uloc */ -}; - -class SignalBlock { - int old_mask; -public: - SignalBlock (int mask) { - old_mask = sigblock (mask); - } - ~SignalBlock () { - (void) sigsetmask (old_mask); - } -}; -const int dump_masks = sigmask (SIGFPE) | sigmask (SIGEMT); - -/* useful... */ -extern "C" char * inet_ntoa (struct in_addr); -inline char * inet_ntoa (struct sockaddr_in &s) { - return inet_ntoa (s.sin_addr); -} +} ZSentType; + +/* statistics gathering */ +typedef struct _ZStatistic_t { + int val; + char *str; +} ZStatistic; + +#ifdef __STDC__ +# define P(s) s +#else +# define P(s) () +#endif /* Function declarations */ /* found in bdump.c */ -extern void bdump_get(ZNotice_t *notice, int auth, struct sockaddr_in *who, - ZServerDesc_t *server); -extern void bdump_send(void), - bdump_offer(struct sockaddr_in *who); -extern Code_t bdump_send_list_tcp(ZNotice_Kind_t kind, u_short port, - char *z_class, char *inst, char *opcode, +extern void bdump_get P((ZNotice_t *notice, int auth, struct sockaddr_in *who, + ZServerDesc_t *server)); +extern void bdump_send P((void)); +extern void bdump_offer P((struct sockaddr_in *who)); +extern Code_t bdump_send_list_tcp P((ZNotice_Kind_t kind, int port, + char *class_name, char *inst, char *opcode, char *sender, char *recip, - const char **lyst, int num); + char **lyst, int num)); /* found in class.c */ -extern Code_t class_register(ZClient_t *client, ZSubscr_t *subs), - class_deregister(ZClient_t *client, ZSubscr_t *subs), - class_restrict(char *z_class, ZAcl_t *acl), - class_setup_restricted(char *z_class, ZAcl_t *acl); -extern ZClientList_t *class_lookup(ZSubscr_t *subs); -extern ZAcl_t *class_get_acl(ZString z_class); -extern void class_free(ZClientList_t *lyst); -extern const ZString class_control, class_admin, class_hm; -extern const ZString class_ulogin, class_ulocate; - -inline int class_is_control (const Notice& notice) { - return notice.dest.classname == class_control; -} -inline int class_is_admin (const Notice& notice) { - return notice.dest.classname == class_admin; -} -inline int class_is_hm (const Notice& notice) { - return notice.dest.classname == class_hm; -} -inline int class_is_ulogin (const Notice& notice) { - return notice.dest.classname == class_ulogin; -} -inline int class_is_ulocate (const Notice& notice) { - return notice.dest.classname == class_ulocate; -} +extern Code_t class_register P((ZClient_t *client, ZSubscr_t *subs)); +extern Code_t class_deregister P((ZClient_t *client, ZSubscr_t *subs)); +extern Code_t class_restrict P((char *z_class, ZAcl_t *acl)); +extern Code_t class_setup_restricted P((char *z_class, ZAcl_t *acl)); +extern ZClientList_t *class_lookup P((ZSubscr_t *subs)); +extern ZAcl_t *class_get_acl P((ZSTRING *z_class)); +extern void class_free P((ZClientList_t *lyst)); +extern ZSTRING *class_control, *class_admin, *class_hm; +extern ZSTRING *class_ulogin, *class_ulocate; +extern void set_ZDestination_hash P((ZDestination *zd)); +extern int ZDest_eq P((ZDestination *zd1, ZDestination *zd2)); +extern int order_dest_strings P((ZDestination *zd1, ZDestination *zd2)); /* found in client.c */ -extern Code_t client_register(ZNotice_t *notice, struct sockaddr_in *who, +extern Code_t client_register P((ZNotice_t *notice, struct sockaddr_in *who, register ZClient_t **client, - ZServerDesc_t *server, int wantdefaults); -extern void client_deregister(ZClient_t *client, ZHostList_t *host, int flush); -extern void client_dump_clients(FILE *fp, ZClientList_t *clist); -extern ZClient_t *client_which_client(struct sockaddr_in *who, - ZNotice_t *notice); + ZServerDesc_t *server, int wantdefaults)); +extern void client_deregister P((ZClient_t *client, ZHostList_t *host, + int flush)); +extern void client_dump_clients P((FILE *fp, ZClientList_t *clist)); +extern ZClient_t *client_which_client P((struct sockaddr_in *who, + ZNotice_t *notice)); /* found in common.c */ -extern char *strsave(const char *str); -extern unsigned long hash (const char *); +extern char *strsave P((Zconst char *str)); +extern unsigned long hash P((Zconst char *)); /* found in dispatch.c */ -extern void handle_packet(void); -extern void clt_ack(ZNotice_t *notice, struct sockaddr_in *who, - ZSentType sent); -extern void nack_release(ZClient_t *client); -extern void sendit(register ZNotice_t *notice, int auth, - struct sockaddr_in *who); -extern void xmit(register ZNotice_t *notice, struct sockaddr_in *dest, - int auth, ZClient_t *client); -extern Code_t control_dispatch(ZNotice_t *notice, int auth, - struct sockaddr_in *who, ZServerDesc_t *server); -extern Code_t xmit_frag(ZNotice_t *notice, char *buf, int len, int waitforack); -extern int current_msg; +extern void handle_packet P((void)); +extern void clt_ack P((ZNotice_t *notice, struct sockaddr_in *who, + ZSentType sent)); +extern void nack_release P((ZClient_t *client)); +extern void sendit P((register ZNotice_t *notice, int auth, + struct sockaddr_in *who)); +extern void rexmit P((void *)); +extern void xmit P((register ZNotice_t *notice, struct sockaddr_in *dest, + int auth, ZClient_t *client)); +extern Code_t control_dispatch P((ZNotice_t *notice, int auth, + struct sockaddr_in *who, + ZServerDesc_t *server)); +extern Code_t xmit_frag P((ZNotice_t *notice, char *buf, int len, + int waitforack)); /* found in hostm.c */ -extern void hostm_flush(ZHostList_t *host, ZServerDesc_t *server); -extern void hostm_shutdown(void); -extern void hostm_losing(ZClient_t *client, ZHostList_t *host); -extern ZHostList_t *hostm_find_host(struct in_addr *addr); -extern ZServerDesc_t *hostm_find_server(struct in_addr *addr); -extern void hostm_transfer(ZHostList_t *host, ZServerDesc_t *server); -extern void hostm_deathgram(struct sockaddr_in *sin, ZServerDesc_t *server); -extern void hostm_dump_hosts(FILE *fp); -extern Code_t hostm_dispatch(ZNotice_t *notice, int auth, - struct sockaddr_in *who, ZServerDesc_t *server); -extern void hostm_lose_ignore(ZClient_t *client); -extern void hostm_renumber_servers (int *); +extern void hostm_flush P((ZHostList_t *host, ZServerDesc_t *server)); +extern void hostm_shutdown P((void)); +extern void hostm_losing P((ZClient_t *client, ZHostList_t *host)); +extern ZHostList_t *hostm_find_host P((struct in_addr *addr)); +extern ZServerDesc_t *hostm_find_server P((struct in_addr *addr)); +extern void hostm_transfer P((ZHostList_t *host, ZServerDesc_t *server)); +extern void hostm_deathgram P((struct sockaddr_in *sin, + ZServerDesc_t *server)); +extern void hostm_dump_hosts P((FILE *fp)); +extern Code_t hostm_dispatch P((ZNotice_t *notice, int auth, + struct sockaddr_in *who, ZServerDesc_t *server)); +extern void hostm_lose_ignore P((ZClient_t *client)); +extern void hostm_renumber_servers P((int *)); /* found in kstuff.c */ #ifdef KERBEROS -extern int GetKerberosData (int, struct in_addr, AUTH_DAT*, char*, char*); -extern Code_t SendKerberosData (int, KTEXT, char*, char*); +extern int GetKerberosData P((int, struct in_addr, AUTH_DAT*, char*, char*)); +extern Code_t SendKerberosData P((int, KTEXT, char*, char*)); #endif /* found in server.c */ -extern void server_timo(void *which); -extern void server_recover(ZClient_t *client), - server_dump_servers(FILE *fp); -extern void server_init(void), - server_shutdown(void); -extern void server_forward(ZNotice_t *notice, int auth, - struct sockaddr_in *who); -extern void server_kill_clt(ZClient_t *client); -extern void server_pending_free(register ZSrvPending_t *pending); -extern void server_self_queue(ZNotice_t*, int, struct sockaddr_in *), - server_send_queue(ZServerDesc_t *), - server_reset(void); +extern void server_timo P((void *which)); +extern void server_recover P((ZClient_t *client)), + server_dump_servers P((FILE *fp)); +extern void server_init P((void)), + server_shutdown P((void)); +extern void server_forward P((ZNotice_t *notice, int auth, + struct sockaddr_in *who)); +extern void server_kill_clt P((ZClient_t *client)); +extern void server_pending_free P((register ZSrvPending_t *pending)); +extern void server_self_queue P((ZNotice_t*, int, struct sockaddr_in *)), + server_send_queue P((ZServerDesc_t *)), + server_reset P((void)); extern int is_server(); -extern ZServerDesc_t *server_which_server(struct sockaddr_in *who); -extern ZSrvPending_t *server_dequeue(register ZServerDesc_t *server); -extern Code_t server_dispatch(ZNotice_t *notice, int auth, - struct sockaddr_in *who); -extern Code_t server_adispatch(ZNotice_t *notice, int auth, - struct sockaddr_in *who, ZServerDesc_t *server); +extern ZServerDesc_t *server_which_server P((struct sockaddr_in *who)); +extern ZSrvPending_t *server_dequeue P((register ZServerDesc_t *server)); +extern Code_t server_dispatch P((ZNotice_t *notice, int auth, + struct sockaddr_in *who)); +extern Code_t server_adispatch P((ZNotice_t *notice, int auth, + struct sockaddr_in *who, + ZServerDesc_t *server)); /* found in subscr.c */ -extern Code_t subscr_cancel(struct sockaddr_in *sin, ZNotice_t *notice), - subscr_subscribe(ZClient_t *who, ZNotice_t *notice), - subscr_send_subs(ZClient_t *client, char *vers);; -extern ZClientList_t *subscr_match_list(ZNotice_t *notice); -extern void subscr_free_list(ZClientList_t *list), - subscr_cancel_client(register ZClient_t *client), - subscr_sendlist(ZNotice_t *notice, int auth, struct sockaddr_in *who); -extern void subscr_dump_subs(FILE *fp, ZSubscr_t *subs), - subscr_reset(void); -extern Code_t subscr_def_subs(ZClient_t *who); +extern Code_t subscr_cancel P((struct sockaddr_in *sin, ZNotice_t *notice)); +extern Code_t subscr_subscribe P((ZClient_t *who, ZNotice_t *notice)), + subscr_send_subs P((ZClient_t *client, char *vers));; +extern ZClientList_t *subscr_match_list P((ZNotice_t *notice)); +extern void subscr_free_list P((ZClientList_t *list)), + subscr_cancel_client P((register ZClient_t *client)), + subscr_sendlist P((ZNotice_t *notice, int auth, struct sockaddr_in *who)); +extern void subscr_dump_subs P((FILE *fp, ZSubscr_t *subs)), + subscr_reset P((void)); +extern Code_t subscr_def_subs P((ZClient_t *who)); /* found in uloc.c */ -extern void uloc_hflush(struct in_addr *addr), - uloc_flush_client(struct sockaddr_in *sin), - uloc_dump_locs(register FILE *fp); -extern Code_t ulogin_dispatch(ZNotice_t *notice, int auth, - struct sockaddr_in *who, ZServerDesc_t *server), - ulocate_dispatch(ZNotice_t *notice, int auth, struct sockaddr_in *who, - ZServerDesc_t *server), - uloc_send_locations(ZHostList_t *host, char *vers); +extern void uloc_hflush P((struct in_addr *addr)), + uloc_flush_client P((struct sockaddr_in *sin)), + uloc_dump_locs P((register FILE *fp)); +extern Code_t ulogin_dispatch P((ZNotice_t *notice, int auth, + struct sockaddr_in *who, ZServerDesc_t *server)), + ulocate_dispatch P((ZNotice_t *notice, int auth, struct sockaddr_in *who, + ZServerDesc_t *server)), + uloc_send_locations P((ZHostList_t *host, char *vers)); + +/* found in version.c */ +extern char *get_version P((void)); + +#undef P + /* global identifiers */ @@ -455,19 +320,37 @@ extern int nfildes; /* number to look at in select() */ extern int zdebug; extern char myname[]; /* domain name of this host */ extern ZNotAcked_t *nacklist; /* list of not ack'ed packets */ -extern char version[]; +extern Zconst char version[]; extern u_long npackets; /* num of packets processed */ extern long uptime; /* time we started */ +extern struct in_addr my_addr; /* found in bdump.c */ extern int bdumping; /* are we dumping right now? */ +/* found in dispatch.c */ +extern ZStatistic i_s_ctls, i_s_logins, i_s_admins, i_s_locates; +extern int num_rexmits; +extern long rexmit_secs, abs_timo; + /* found in server.c */ extern ZServerDesc_t *otherservers; /* array of servers */ extern int me_server_idx; /* me (in the array of servers) */ extern int nservers; /* number of other servers*/ -extern "C" struct in_addr my_addr; /* my inet address */ +/* found in subscr.c */ +extern ZSTRING *empty; +extern ZSTRING *wildcard_instance; +extern ZSTRING *wildcard_class; +extern ZSubscr_t matchall_sub; + +extern struct in_addr my_addr; /* my inet address */ + +#define class_is_control(classname) (classname == class_control) +#define class_is_admin(classname) (classname == class_admin) +#define class_is_hm(classname) (classname == class_hm) +#define class_is_ulogin(classname) (classname == class_ulogin) +#define class_is_ulocate(classname) (classname == class_ulocate) #define ADMIN_HELLO "HELLO" /* Opcode: hello, are you there */ #define ADMIN_IMHERE "IHEARDYOU" /* Opcode: yes, I am here */ @@ -484,29 +367,25 @@ extern "C" struct in_addr my_addr; /* my inet address */ #define ADMIN_YOU "YOUR_STATE" /* Class inst: please send your state*/ #define ADMIN_ME "MY_STATE" /* Class inst: please send my info */ -ZClass_t * const NULLZCT = 0; -ZClient_t * const NULLZCNT = 0; -ZClientList_t * const NULLZCLT = 0; -ZSubscr_t * const NULLZST = 0; -ZHostList_t * const NULLZHLT = 0; -ZNotAcked_t * const NULLZNAT = 0; -ZAcl_t * const NULLZACLT = 0; -ZPacket_t * const NULLZPT = 0; -ZServerDesc_t * const NULLZSDT = 0; -ZSrvPending_t * const NULLZSPT = 0; +#define NULLZCT ((ZClass_t *) 0) +#define NULLZCNT ((ZClient_t *) 0) +#define NULLZCLT ((ZClientList_t *) 0) +#define NULLZST ((ZSubscr_t *) 0) +#define NULLZHLT ((ZHostList_t *) 0) +#define NULLZNAT ((ZNotAcked_t *) 0) +#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 */ #define me_server (&otherservers[me_server_idx]) -inline int limbo_server_idx () { - return 0; -} +#define limbo_server_idx() (0) #define limbo_server (&otherservers[limbo_server_idx()]) -inline int msgs_queued () { - return ZQLength () || otherservers[me_server_idx].zs_update_queue; -} +#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) @@ -515,10 +394,8 @@ inline int msgs_queued () { /* the magic class to match all packets */ #define MATCHALL_CLASS "zmatch_all" -extern const ZString wildcard_class; /* the instance that matches all instances */ #define WILDCARD_INSTANCE "*" -extern const ZString wildcard_instance; /* SERVER_SRVTAB is defined in zephyr.h */ #define ZEPHYR_SRVTAB SERVER_SRVTAB @@ -530,23 +407,4 @@ extern const ZString wildcard_instance; #define zdbug(s1) #endif /* DEBUG */ -/* statistics gathering */ -class statistic { - int val; - const char *str; -public: - statistic (const char *label) { val = 0; str = label; } - int value () { return val; } - void reset () { val = 0; } - void operator++ () { val++; } - void log (int do_reset = 0) { - if (do_reset) { - syslog (LOG_INFO, "stats: %s: %d since last report", str, val); - reset (); - } - else - syslog (LOG_INFO, "stats: %s: %d", str, val); - } -}; - #endif /* !__ZSERVER_H__ */ |