X-Git-Url: https://jfr.im/git/irc/rqf/shadowircd.git/blobdiff_plain/c98390004f4f14cd8215302d77313f81e2546e22..c945815bf60d0084b553d920022afb0036a3f664:/include/client.h diff --git a/include/client.h b/include/client.h index 0b6adcc..943098e 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. @@ -251,7 +249,7 @@ 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; @@ -271,10 +269,10 @@ struct LocalUser 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 +288,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 */ @@ -310,7 +308,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 */ }; @@ -415,10 +413,11 @@ struct exit_client_hook #define FLAGS_DEAD 0x0002 /* Local socket is dead--Exiting soon */ #define FLAGS_KILLED 0x0004 /* Prevents "QUIT" from being sent for this */ #define FLAGS_SENTUSER 0x0008 /* Client sent a USER command. */ +#define FLAGS_CLICAP 0x0010 /* In CAP negotiation, wait for CAP END */ #define FLAGS_CLOSING 0x0020 /* set when closing to suppress errors */ -#define FLAGS_CHKACCESS 0x0040 /* ok to check clients access if set */ +#define FLAGS_PING_COOKIE 0x0040 /* has sent ping cookie */ #define FLAGS_GOTID 0x0080 /* successful ident lookup achieved */ -#define FLAGS_NEEDID 0x0100 /* I-lines say must use ident return */ +#define FLAGS_FLOODDONE 0x0100 /* flood grace period over / reported */ #define FLAGS_NORMALEX 0x0400 /* Client exited normally */ #define FLAGS_SENDQEX 0x0800 /* Sendq exceeded */ #define FLAGS_SERVLINK 0x10000 /* servlink has servlink process */ @@ -453,16 +452,11 @@ struct exit_client_hook /* overflow flags */ /* EARLIER FLAGS ARE IN s_newconf.h */ -#define FLAGS2_EXEMPTRESV 0x0080000 -#define FLAGS2_EXEMPTGLINE 0x0100000 -#define FLAGS2_EXEMPTKLINE 0x0200000 -#define FLAGS2_EXEMPTFLOOD 0x0400000 -#define FLAGS2_NOLIMIT 0x0800000 -#define FLAGS2_IDLE_LINED 0x1000000 -#define FLAGS2_CLICAP 0x2000000 -#define FLAGS2_PING_COOKIE 0x4000000 -#define FLAGS2_IP_SPOOFING 0x8000000 -#define FLAGS2_FLOODDONE 0x10000000 +#define FLAGS2_EXEMPTRESV 0x00400000 +#define FLAGS2_EXEMPTGLINE 0x00800000 +#define FLAGS2_EXEMPTKLINE 0x01000000 +#define FLAGS2_EXEMPTFLOOD 0x02000000 +#define FLAGS2_IP_SPOOFING 0x10000000 #define FLAGS2_EXEMPTSPAMBOT 0x20000000 #define FLAGS2_EXEMPTSHIDE 0x40000000 #define FLAGS2_EXEMPTJUPE 0x80000000 @@ -471,8 +465,6 @@ struct exit_client_hook UMODE_WALLOP | UMODE_LOCOPS) #define DEFAULT_OPER_SNOMASK SNO_GENERAL -#define FLAGS_ID (FLAGS_NEEDID | FLAGS_GOTID) - #define CLICAP_MULTI_PREFIX 0x0001 #define CLICAP_SASL 0x0002 @@ -480,9 +472,6 @@ struct exit_client_hook * flags macros. */ #define IsPerson(x) (IsClient(x) && (x)->user != NULL) -#define DoAccess(x) ((x)->flags & FLAGS_CHKACCESS) -#define SetAccess(x) ((x)->flags |= FLAGS_CHKACCESS) -#define ClearAccess(x) ((x)->flags &= ~FLAGS_CHKACCESS) #define HasServlink(x) ((x)->flags & FLAGS_SERVLINK) #define SetServlink(x) ((x)->flags |= FLAGS_SERVLINK) #define MyConnect(x) ((x)->flags & FLAGS_MYCONNECT) @@ -525,28 +514,20 @@ struct exit_client_hook if (MyClient((x)) && !IsOper((x)) && !IsServer((x))) \ (x)->handler = CLIENT_HANDLER; } -#define IsPrivileged(x) (IsOper(x) || IsServer(x)) - /* umode flags */ #define IsInvisible(x) ((x)->umodes & UMODE_INVISIBLE) #define SetInvisible(x) ((x)->umodes |= UMODE_INVISIBLE) #define ClearInvisible(x) ((x)->umodes &= ~UMODE_INVISIBLE) #define SendWallops(x) ((x)->umodes & UMODE_WALLOP) -#define ClearWallops(x) ((x)->umodes &= ~UMODE_WALLOP) #define SendLocops(x) ((x)->umodes & UMODE_LOCOPS) #define SendServNotice(x) ((x)->umodes & UMODE_SERVNOTICE) #define SendOperwall(x) ((x)->umodes & UMODE_OPERWALL) -#define SetWallops(x) ((x)->umodes |= UMODE_WALLOP) -#define SetCallerId(x) ((x)->umodes |= UMODE_CALLERID) #define IsSetCallerId(x) ((x)->umodes & UMODE_CALLERID) #define IsService(x) ((x)->umodes & UMODE_SERVICE) #define IsDeaf(x) ((x)->umodes & UMODE_DEAF) #define IsNoForward(x) ((x)->umodes & UMODE_NOFORWARD) #define IsSetRegOnlyMsg(x) ((x)->umodes & UMODE_REGONLYMSG) -#define SetNeedId(x) ((x)->flags |= FLAGS_NEEDID) -#define IsNeedId(x) (((x)->flags & FLAGS_NEEDID) != 0) - #define SetGotId(x) ((x)->flags |= FLAGS_GOTID) #define IsGotId(x) (((x)->flags & FLAGS_GOTID) != 0) @@ -555,8 +536,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) @@ -572,14 +551,11 @@ 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)->flags2 & FLAGS2_FLOODDONE) -#define SetFloodDone(x) ((x)->flags2 |= FLAGS2_FLOODDONE) +#define IsFloodDone(x) ((x)->flags & FLAGS_FLOODDONE) +#define SetFloodDone(x) ((x)->flags |= FLAGS_FLOODDONE) /* * definitions for get_client_name @@ -618,7 +594,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); @@ -633,4 +609,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 */