/** * users.h: Data structures for connected clients. * * Copyright © 2007 Pippijn van Steenhoven / The Ermyth Team * Rights to this code are as documented in COPYING. * * * Portions of this file were derived from sources bearing the following license: * Copyright © 2005 William Pitcock, et al. * Rights to this code are as documented in doc/pod/license.pod. * * $Id: users.h,v 1.5 2007/09/16 18:54:42 pippijn Exp $ */ #ifndef USERS_H #define USERS_H #include class user_t : public zero_initialised { struct callbacks { functor::callback3 sasl_input; functor::callback1 add; functor::callback1 away; functor::callback3 can_register; functor::callback1 remove; functor::callback1 identify; functor::callback1 oper; functor::callback1 deoper; }; public: unsigned mu_index; // index used in myuser_t::login_vector char nick[NICKLEN]; char user[USERLEN]; char host[HOSTLEN]; /* Real host */ char gecos[GECOSLEN]; char vhost[HOSTLEN]; /* Visible host */ char uid[IDLEN]; /* Used for TS6, P10, IRCNet ircd. */ char ip[HOSTIPLEN]; list_t channels; server_t *server; myuser_t *myuser; unsigned int offenses; unsigned int msgs; time_t lastmsg; unsigned int flags; time_t ts; static callbacks callback; }; #define UF_AWAY 0x00000002 #define UF_INVIS 0x00000004 #define UF_IRCOP 0x00000010 #define UF_ADMIN 0x00000020 #define UF_SEENINFO 0x00000080 #define UF_HIDEHOSTREQ 0x00000200 /* host hiding requested */ #define CLIENT_NAME(user) ((user)->uid[0] ? (user)->uid : (user)->nick) /* function.c */ E bool is_ircop (user_t *user); E bool is_admin (user_t *user); E bool is_internal_client (user_t *user); /* users.C */ typedef std::pair user_pair; typedef std::map user_map; E user_map userlist; E void init_users (void); E user_t *user_add (char const * const nick, char const * const user, char const * const host, char const * const vhost, char const * const ip, char const * const uid, char const * const gecos, server_t *server, time_t ts); E void user_delete (user_t *u); E user_t *user_find (char const * const nick); E user_t *user_find_named (char const * const nick); E void user_changeuid (user_t *u, char const * const uid); E void user_changenick (user_t *u, char const * const nick, time_t ts); E void user_mode (user_t *user, char const * const modes); /* uid.c */ E void init_uid (void); E char *uid_get (void); #endif