X-Git-Url: https://jfr.im/git/irc/rqf/shadowircd.git/blobdiff_plain/333d73ff28ab5ab0193fa60adb39e2215e30074a..5da17c500b44990ff7731058f4ebdf923db5ba29:/include/client.h diff --git a/include/client.h b/include/client.h index 20f9bfc..d5d15f5 100644 --- a/include/client.h +++ b/include/client.h @@ -35,14 +35,12 @@ #endif #include "ircd_defs.h" -#include "linebuf.h" #include "channel.h" #include "res.h" #include "snomask.h" #include "irc_string.h" #include "sprintf_irc.h" #include "ircd.h" -#include "commio.h" /* other structs */ struct Blacklist; @@ -92,8 +90,8 @@ typedef struct ListClient list_client_t; */ struct User { - dlink_list channel; /* chain of channel pointer blocks */ - dlink_list invited; /* chain of invite pointer blocks */ + rb_dlink_list channel; /* chain of channel pointer blocks */ + rb_dlink_list invited; /* chain of invite pointer blocks */ char *away; /* pointer to away message */ int refcnt; /* Number of times this block is referenced */ @@ -104,8 +102,8 @@ struct Server { user_t *user; /* who activated this connection */ char by[NICKLEN]; - dlink_list servers; - dlink_list users; + rb_dlink_list servers; + rb_dlink_list users; int caps; /* capabilities bit-field */ char *fullcaps; struct scache_entry *nameinfo; @@ -136,8 +134,8 @@ struct ZipStats struct Client { - dlink_node node; - dlink_node lnode; + rb_dlink_node node; + rb_dlink_node lnode; user_t *user; /* ...defined, if this is a User */ server_t *serv; /* ...defined, if this is a server */ client_t *servptr; /* Points to server this Client is on */ @@ -182,7 +180,7 @@ struct Client /* list of who has this client on their allow list, its counterpart * is in LocalUser */ - dlink_list on_allow_list; + rb_dlink_list on_allow_list; local_user_t *localClient; pre_client_t *preClient; @@ -190,7 +188,7 @@ struct Client struct LocalUser { - dlink_node tnode; /* This is the node for the local list type the client is on*/ + rb_dlink_node tnode; /* This is the node for the local list type the client is on*/ /* * The following fields are allocated only for local clients * (directly connected to *this* server with a socket. @@ -235,7 +233,7 @@ struct LocalUser conf_item_t *att_conf; /* attached conf */ struct server_conf *att_sconf; - struct irc_sockaddr_storage ip; + struct rb_sockaddr_storage ip; time_t last_nick_change; int number_of_nick_changes; @@ -251,30 +249,21 @@ struct LocalUser char *fullcaps; int caps; /* capabilities bit-field */ - int fd; /* >= 0, for local clients */ + rb_fde_t *F; /* >= 0, for local clients */ /* time challenge response is valid for */ time_t chal_time; - int ctrlfd; /* For servers: - control fd used for sending commands - to servlink */ - - struct SlinkRpl slinkrpl; /* slink reply being parsed */ - unsigned char *slinkq; /* sendq for control data */ - int slinkq_ofs; /* ofset into slinkq */ - int slinkq_len; /* length remaining after slinkq_ofs */ - - struct ZipStats zipstats; + struct DNSQuery *dnsquery; /* for outgoing server's name lookup */ time_t last_away; /* Away since... */ time_t last; /* clients allowed to talk through +g */ - dlink_list allow_list; + rb_dlink_list allow_list; /* nicknames theyre monitoring */ - dlink_list monitor_list; + rb_dlink_list monitor_list; /* * Anti-flood stuff. We track how many messages were parsed and how @@ -290,7 +279,7 @@ struct LocalUser auth_request_t *auth_request; /* target change stuff */ - void *targets[10]; /* targets were aware of */ + uint32_t targets[10]; /* targets were aware of (fnv32(use_id(target_p))) */ unsigned int targinfo[2]; /* cyclic array, no in use */ time_t target_last; /* last time we cleared a slot */ @@ -298,6 +287,12 @@ struct LocalUser char *mangledhost; /* non-NULL if host mangling module loaded and applicable to this client */ + + struct _ssl_ctl *ssl_ctl; /* which ssl daemon we're associate with */ + rb_uint32_t localflags; + struct ZipStats *zipstats; /* zipstats */ + rb_uint16_t cork_count; /* used for corking/uncorking connections */ + struct ev_entry *event; /* used for associated events */ }; struct PreClient @@ -310,7 +305,7 @@ struct PreClient unsigned char sasl_out; unsigned char sasl_complete; - dlink_list dnsbl_queries; /* list of struct BlacklistClient * */ + rb_dlink_list dnsbl_queries; /* list of struct BlacklistClient * */ struct Blacklist *dnsbl_listed; /* first dnsbl where it's listed */ }; @@ -433,6 +428,11 @@ struct exit_client_hook #define FLAGS_DYNSPOOF 0x1000000 /* dynamic spoof, only opers see ip */ #define FLAGS_EXUNKNOWN 0x2000000 /* too many unknowns exit.. */ +/* flags for local clients, this needs stuff moved from above to here at some point */ +#define LFLAGS_SSL 0x00000001 +#define LFLAGS_FLUSH 0x00000002 +#define LFLAGS_CORK 0x00000004 + /* umodes, settable flags */ /* lots of this moved to snomask -- jilles */ #define UMODE_SERVNOTICE 0x0001 /* server notices */ @@ -449,6 +449,7 @@ struct exit_client_hook /* user information flags, only settable by remote mode or local oper */ #define UMODE_OPER 0x100000 /* Operator */ #define UMODE_ADMIN 0x200000 /* Admin on server */ +#define UMODE_SSLCLIENT 0x1000000 /* using SSL */ #define UMODE_ALL UMODE_SERVNOTICE @@ -458,8 +459,6 @@ struct exit_client_hook #define FLAGS2_EXEMPTGLINE 0x00800000 #define FLAGS2_EXEMPTKLINE 0x01000000 #define FLAGS2_EXEMPTFLOOD 0x02000000 -#define FLAGS2_NOLIMIT 0x04000000 -#define FLAGS2_IDLE_LINED 0x08000000 #define FLAGS2_IP_SPOOFING 0x10000000 #define FLAGS2_EXEMPTSPAMBOT 0x20000000 #define FLAGS2_EXEMPTSHIDE 0x40000000 @@ -508,6 +507,16 @@ struct exit_client_hook #define IsExUnknown(x) ((x)->flags & FLAGS_EXUNKNOWN) #define SetExUnknown(x) ((x)->flags |= FLAGS_EXUNKNOWN) +/* local flags */ + +#define IsSSL(x) ((x)->localClient->localflags & LFLAGS_SSL) +#define SetSSL(x) ((x)->localClient->localflags |= LFLAGS_SSL) +#define ClearSSL(x) ((x)->localClient->localflags &= ~LFLAGS_SSL) + +#define IsFlush(x) ((x)->localClient->localflags & LFLAGS_FLUSH) +#define SetFlush(x) ((x)->localClient->localflags |= LFLAGS_FLUSH) +#define ClearFlush(x) ((x)->localClient->localflags &= ~LFLAGS_FLUSH) + /* oper flags */ #define MyOper(x) (MyConnect(x) && IsOper(x)) @@ -522,6 +531,9 @@ struct exit_client_hook #define IsInvisible(x) ((x)->umodes & UMODE_INVISIBLE) #define SetInvisible(x) ((x)->umodes |= UMODE_INVISIBLE) #define ClearInvisible(x) ((x)->umodes &= ~UMODE_INVISIBLE) +#define IsSSLClient(x) ((x)->umodes & UMODE_SSLCLIENT) +#define SetSSLClient(x) ((x)->umodes |= UMODE_SSLCLIENT) +#define ClearSSLClient(x) ((x)->umodes &= ~UMODE_SSLCLIENT) #define SendWallops(x) ((x)->umodes & UMODE_WALLOP) #define SendLocops(x) ((x)->umodes & UMODE_LOCOPS) #define SendServNotice(x) ((x)->umodes & UMODE_SERVNOTICE) @@ -540,8 +552,6 @@ struct exit_client_hook */ #define IsExemptKline(x) ((x)->flags2 & FLAGS2_EXEMPTKLINE) #define SetExemptKline(x) ((x)->flags2 |= FLAGS2_EXEMPTKLINE) -#define IsExemptLimits(x) ((x)->flags2 & FLAGS2_NOLIMIT) -#define SetExemptLimits(x) ((x)->flags2 |= FLAGS2_NOLIMIT) #define IsExemptGline(x) ((x)->flags2 & FLAGS2_EXEMPTGLINE) #define SetExemptGline(x) ((x)->flags2 |= FLAGS2_EXEMPTGLINE) #define IsExemptFlood(x) ((x)->flags2 & FLAGS2_EXEMPTFLOOD) @@ -557,15 +567,17 @@ struct exit_client_hook #define IsIPSpoof(x) ((x)->flags2 & FLAGS2_IP_SPOOFING) #define SetIPSpoof(x) ((x)->flags2 |= FLAGS2_IP_SPOOFING) -#define SetIdlelined(x) ((x)->flags2 |= FLAGS2_IDLE_LINED) -#define IsIdlelined(x) ((x)->flags2 & FLAGS2_IDLE_LINED) - /* for local users: flood grace period is over * for servers: mentioned in networknotice.c notice */ #define IsFloodDone(x) ((x)->flags & FLAGS_FLOODDONE) #define SetFloodDone(x) ((x)->flags |= FLAGS_FLOODDONE) +/* These also operate on the uplink from which it came */ +#define IsCork(x) (MyConnect(x) ? (x)->localClient->cork_count : (x)->from->localClient->cork_count) +#define SetCork(x) (MyConnect(x) ? (x)->localClient->cork_count++ : (x)->from->localClient->cork_count++ ) +#define ClearCork(x) (MyConnect(x) ? (x)->localClient->cork_count-- : (x)->from->localClient->cork_count--) + /* * definitions for get_client_name */ @@ -603,7 +615,7 @@ extern client_t *find_person(const char *); extern client_t *find_named_person(const char *); extern client_t *next_client(struct Client *, const char *); -#define accept_message(s, t) ((s) == (t) || (dlinkFind((s), &((t)->localClient->allow_list)))) +#define accept_message(s, t) ((s) == (t) || (rb_dlinkFind((s), &((t)->localClient->allow_list)))) extern void del_all_accepts(struct Client *client_p); extern void dead_link(struct Client *client_p); @@ -618,4 +630,7 @@ extern void close_connection(struct Client *); extern void init_uid(void); extern char *generate_uid(void); +void allocate_away(struct Client *); +void free_away(struct Client *); + #endif /* INCLUDED_client_h */