X-Git-Url: https://jfr.im/git/irc/rqf/shadowircd.git/blobdiff_plain/987ef7eb1f6c6e6bfb79fc0e7759702ff372ac7a..e8e3ef0dfb6fbe28c07e34599f0f48336792b4b3:/include/client.h diff --git a/include/client.h b/include/client.h index c7df24d..41ee5af 100644 --- a/include/client.h +++ b/include/client.h @@ -22,7 +22,6 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA * - * $Id: client.h 3446 2007-05-14 22:21:16Z jilles $ */ #ifndef INCLUDED_client_h @@ -53,6 +52,11 @@ struct Blacklist; #define IDLEN 10 +#define TGCHANGE_NUM 10 /* how many targets we keep track of */ +#define TGCHANGE_REPLY 5 /* how many reply targets */ +#define TGCHANGE_INITIAL 10 /* initial free targets (normal) */ +#define TGCHANGE_INITIAL_LOW 4 /* initial free targets (possible spambot) */ + /* * pre declare structs */ @@ -69,22 +73,6 @@ struct PreClient; struct ListClient; struct scache_entry; -/* - * Atheme's coding standards require that we use BSD-style user-defined types - * for stuff. Fun! --nenolod - */ -typedef struct User user_t; -typedef struct Server server_t; -typedef struct Client client_t; -typedef struct LocalUser local_user_t; -typedef struct Listener listener_t; -typedef struct DNSReply dns_reply_t; -typedef struct Whowas whowas_entry_t; -typedef struct ConfItem conf_item_t; -typedef struct AuthRequest auth_request_t; -typedef struct PreClient pre_client_t; -typedef struct ListClient list_client_t; - /* * Client structures */ @@ -92,15 +80,17 @@ struct User { 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 */ - char suser[NICKLEN+1]; struct Dictionary *metadata; + + char suser[NICKLEN+1]; }; struct Server { - user_t *user; /* who activated this connection */ + struct User *user; /* who activated this connection */ char by[NICKLEN]; rb_dlink_list servers; rb_dlink_list users; @@ -119,22 +109,16 @@ struct ZipStats double out_ratio; }; -struct MetadataEntry -{ - char key[NICKLEN+1]; - char value[TOPICLEN]; -}; - struct Client { 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 */ - client_t *from; /* == self, if Local Client, *NEVER* NULL! */ + struct User *user; /* ...defined, if this is a User */ + struct Server *serv; /* ...defined, if this is a server */ + struct Client *servptr; /* Points to server this Client is on */ + struct Client *from; /* == self, if Local Client, *NEVER* NULL! */ - whowas_entry_t *whowas; /* Pointers to whowas structs */ + struct Whowas *whowas; /* Pointers to whowas structs */ time_t tsinfo; /* TS on the nick, SVINFO on server */ unsigned int umodes; /* opers, normal users subset */ unsigned int flags; /* client flags */ @@ -179,10 +163,11 @@ struct Client int received_number_of_privmsgs; int flood_noticed; - local_user_t *localClient; - pre_client_t *preClient; + struct LocalUser *localClient; + struct PreClient *preClient; time_t large_ctcp_sent; /* ctcp to large group sent, relax flood checks */ + char *certfp; /* client certificate fingerprint */ }; struct LocalUser @@ -225,8 +210,8 @@ struct LocalUser unsigned int receiveK; /* Statistics: total k-bytes received */ unsigned short sendB; /* counters to count upto 1-k lots of bytes */ unsigned short receiveB; /* sent and received. */ - listener_t *listener; /* listener accepted from */ - conf_item_t *att_conf; /* attached conf */ + struct Listener *listener; /* listener accepted from */ + struct ConfItem *att_conf; /* attached conf */ struct server_conf *att_sconf; struct rb_sockaddr_storage ip; @@ -273,14 +258,18 @@ struct LocalUser int sent_parsed; /* how many messages we've parsed in this second */ time_t last_knock; /* time of last knock */ unsigned long random_ping; - auth_request_t *auth_request; + struct AuthRequest *auth_request; /* target change stuff */ - uint32_t targets[10]; /* targets were aware of (fnv32(use_id(target_p))) */ - unsigned int targinfo[2]; /* cyclic array, no in use */ + /* targets we're aware of (fnv32(use_id(target_p))): + * 0..TGCHANGE_NUM-1 regular slots + * TGCHANGE_NUM..TGCHANGE_NUM+TGCHANGE_REPLY-1 reply slots + */ + uint32_t targets[TGCHANGE_NUM + TGCHANGE_REPLY]; + unsigned int targets_free; /* free targets */ time_t target_last; /* last time we cleared a slot */ - list_client_t *safelist_data; + struct ListClient *safelist_data; char *mangledhost; /* non-NULL if host mangling module loaded and applicable to this client */ @@ -293,6 +282,8 @@ struct LocalUser struct ev_entry *event; /* used for associated events */ struct PrivilegeSet *privset; /* privset... */ + + struct ev_entry *override_timeout_event; }; struct PreClient @@ -315,10 +306,8 @@ struct ListClient { unsigned int hash_indice; unsigned int users_min, users_max; - - /* It would be nice to add other modifiers, - * but not for 1.1 --nenolod - */ + time_t created_min, created_max, topic_min, topic_max; + int operspy; }; /* @@ -407,7 +396,6 @@ struct ListClient #define FLAGS_GOTID 0x0080 /* successful ident lookup achieved */ #define FLAGS_FLOODDONE 0x0100 /* flood grace period over / reported */ #define FLAGS_NORMALEX 0x0400 /* Client exited normally */ -#define FLAGS_SENDQEX 0x0800 /* Sendq exceeded */ #define FLAGS_MARK 0x10000 /* marked client */ #define FLAGS_HIDDEN 0x20000 /* hidden server */ #define FLAGS_EOB 0x40000 /* EOB */ @@ -434,11 +422,18 @@ struct ListClient #define UMODE_DEAF 0x0080 #define UMODE_NOFORWARD 0x0100 /* don't forward */ #define UMODE_REGONLYMSG 0x0200 /* only allow logged in users to msg */ +#define UMODE_NOCTCP 0x0400 /* block CTCPs except for ACTION */ +#define UMODE_NOINVITE 0x0800 /* block invites */ +#define UMODE_BOT 0x8000 /* mark as a bot in whois */ +#define UMODE_SCALLERID 0x40000 /* soft caller id */ /* user information flags, only settable by remote mode or local oper */ #define UMODE_OPER 0x1000 /* Operator */ #define UMODE_ADMIN 0x2000 /* Admin on server */ #define UMODE_SSLCLIENT 0x4000 /* using SSL */ +#define UMODE_OVERRIDE 0x20000 /* able to override */ + +#define IsOverride(x) ((x)->umodes & UMODE_OVERRIDE) /* overflow flags */ /* EARLIER FLAGS ARE IN s_newconf.h */ @@ -527,6 +522,10 @@ struct ListClient #define IsDeaf(x) ((x)->umodes & UMODE_DEAF) #define IsNoForward(x) ((x)->umodes & UMODE_NOFORWARD) #define IsSetRegOnlyMsg(x) ((x)->umodes & UMODE_REGONLYMSG) +#define IsSetNoCTCP(x) ((x)->umodes & UMODE_NOCTCP) +#define IsSetNoInvite(x) ((x)->umodes & UMODE_NOINVITE) +#define IsSetBot(x) ((x)->umodes & UMODE_BOT) +#define IsSetSCallerId(x) ((x)->umodes & UMODE_SCALLERID) #define SetGotId(x) ((x)->flags |= FLAGS_GOTID) #define IsGotId(x) (((x)->flags & FLAGS_GOTID) != 0) @@ -577,7 +576,7 @@ extern const char *get_client_name(struct Client *client, int show_ip); extern const char *log_client_name(struct Client *, int); extern int is_remote_connect(struct Client *); extern void init_client(void); -extern client_t *make_client(struct Client *from); +extern struct Client *make_client(struct Client *from); extern void free_pre_client(struct Client *client); extern void free_client(struct Client *client); @@ -590,22 +589,22 @@ extern void error_exit_client(struct Client *, int); extern void count_local_client_memory(size_t * count, size_t * memory); extern void count_remote_client_memory(size_t * count, size_t * memory); -extern client_t *find_chasing(struct Client *, const char *, int *); -extern client_t *find_person(const char *); -extern client_t *find_named_person(const char *); -extern client_t *next_client(struct Client *, const char *); +extern struct Client *find_chasing(struct Client *, const char *, int *); +extern struct Client *find_person(const char *); +extern struct Client *find_named_person(const char *); +extern struct Client *next_client(struct Client *, const char *); #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); +extern void dead_link(struct Client *client_p, int sendqex); extern int show_ip(struct Client *source_p, struct Client *target_p); extern int show_ip_conf(struct ConfItem *aconf, struct Client *target_p); extern void initUser(void); extern void free_user(struct User *, struct Client *); -extern user_t *make_user(struct Client *); -extern server_t *make_server(struct Client *); +extern struct User *make_user(struct Client *); +extern struct Server *make_server(struct Client *); extern void close_connection(struct Client *); extern void init_uid(void); extern char *generate_uid(void); @@ -613,8 +612,9 @@ extern char *generate_uid(void); void allocate_away(struct Client *); void free_away(struct Client *); -const char *get_metadata(struct Client *, const char *); -void set_metadata(struct Client *, const char *, const char *); -void delete_metadata(struct Client *, const char *); +extern struct Metadata *user_metadata_add(struct Client *target, const char *name, const char *value, int propegate); +extern void user_metadata_delete(struct Client *target, const char *name, int propegate); +extern struct Metadata *user_metadata_find(struct Client *target, const char *name); +extern void user_metadata_clear(struct Client *target); #endif /* INCLUDED_client_h */