X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=include%2Fusers.h;h=fdfa4606bc96d1dac04e14cf227ec347cf075c3d;hb=398e82a1142e8d361b206b4a2b15e3f6325a51b2;hp=39abc63095ad426e9735243ba766094d8a82f9fc;hpb=e93827e41cdb958314eb669e94c9dd1280b691c9;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/users.h b/include/users.h index 39abc6309..fdfa4606b 100644 --- a/include/users.h +++ b/include/users.h @@ -15,9 +15,7 @@ #define __USERS_H__ #include "socket.h" -#include "connection.h" #include "dns.h" - #include "mode.h" /** Channel status for a user @@ -45,16 +43,14 @@ enum ClassTypes { /** RFC1459 channel modes */ enum UserModes { - /** +s: Server notices */ - UM_SERVERNOTICE = 's' - 65, + /** +s: Server notice mask */ + UM_SNOMASK = 's' - 65, /** +w: WALLOPS */ UM_WALLOPS = 'w' - 65, /** +i: Invisible */ UM_INVISIBLE = 'i' - 65, /** +o: Operator */ - UM_OPERATOR = 'o' - 65, - /** +n: Server notice mask */ - UM_SNOMASK = 'n' - 65 + UM_OPERATOR = 'o' - 65 }; /** Registration state of a user, e.g. @@ -259,7 +255,7 @@ public: */ unsigned long limit; - int GetMaxChans() + size_t GetMaxChans() { return maxchans; } @@ -416,7 +412,7 @@ class CoreExport VisData * by nickname, or the FindDescriptor method of the InspIRCd class to find a specific user by their * file descriptor value. */ -class CoreExport User : public connection +class CoreExport User : public EventHandler { private: /** Pointer to creator. @@ -431,15 +427,15 @@ class CoreExport User : public connection */ InvitedList invites; - /** Cached nick!ident@host value using the real hostname + /** Cached nick!ident@dhost value using the displayed hostname */ std::string cached_fullhost; - /** Cached nick!ident@ip value using the real IP address + /** Cached ident@ip value using the real IP address */ std::string cached_hostip; - /** Cached nick!ident@host value using the masked hostname + /** Cached ident@realhost value using the real hostname */ std::string cached_makehost; @@ -457,46 +453,74 @@ class CoreExport User : public connection */ void DecrementModes(); - /** Max channels for this user - */ - unsigned int MaxChans; - std::map* AllowedOperCommands; /** Allowed user modes from oper classes. */ - bool* AllowedUserModes; + std::bitset<64> AllowedUserModes; /** Allowed channel modes from oper classes. */ - bool* AllowedChanModes; + std::bitset<64> AllowedChanModes; public: - /** Module responsible for raw i/o - */ - Module* io; - /** Contains a pointer to the connect class a user is on from - this will be NULL for remote connections. * The pointer is guarenteed to *always* be valid. :) */ ConnectClass *MyClass; - /** Resolvers for looking up this users IP address - * This will occur if and when res_reverse completes. - * When this class completes its lookup, User::dns_done - * will be set from false to true. + /** User visibility state, see definition of VisData. */ - UserResolver* res_forward; + VisData* Visibility; - /** Resolvers for looking up this users hostname - * This is instantiated by User::StartDNSLookup(), - * and on success, instantiates User::res_reverse. + /** Hostname of connection. + * This should be valid as per RFC1035. */ - UserResolver* res_reverse; + std::string host; - /** User visibility state, see definition of VisData. + /** Stats counter for bytes inbound */ - VisData* Visibility; + int bytes_in; + + /** Stats counter for bytes outbound + */ + int bytes_out; - /** Stored reverse lookup from res_forward + /** Stats counter for commands inbound + */ + int cmds_in; + + /** Stats counter for commands outbound + */ + int cmds_out; + + /** True if user has authenticated, false if otherwise + */ + bool haspassed; + + /** Used by User to indicate the registration status of the connection + * It is a bitfield of the REG_NICK, REG_USER and REG_ALL bits to indicate + * the connection state. + */ + char registered; + + /** Time the connection was last pinged + */ + time_t lastping; + + /** Time the connection was created, set in the constructor. This + * may be different from the time the user's classbase object was + * created. + */ + time_t signon; + + /** Time that the connection last sent a message, used to calculate idle time + */ + time_t idle_lastmsg; + + /** Used by PING checking code + */ + time_t nping; + + /** Stored reverse lookup from res_forward. Should not be used after resolution. */ std::string stored_host; @@ -506,8 +530,6 @@ class CoreExport User : public connection */ void StartDNSLookup(); - unsigned int GetMaxChans(); - /** The users nickname. * An invalid nickname indicates an unregistered connection prior to the NICK command. * Use InspIRCd::IsNick() to validate nicknames. @@ -534,20 +556,21 @@ class CoreExport User : public connection std::string fullname; /** The user's mode list. - * This is NOT a null terminated string! In the 1.1 version of InspIRCd - * this is an array of values in a similar way to channel modes. - * A value of 1 in field (modeletter-65) indicates that the mode is + * NOT a null terminated string. + * Also NOT an array. + * Much love to the STL for giving us an easy to use bitset, saving us RAM. + * if (modes[modeletter-65]) is set, then the mode is * set, for example, to work out if mode +s is set, we check the field * User::modes['s'-65] != 0. * The following RFC characters o, w, s, i have constants defined via an * enum, such as UM_SERVERNOTICE and UM_OPETATOR. */ - unsigned char modes[64]; + std::bitset<64> modes; /** What snomasks are set on this user. * This functions the same as the above modes. */ - unsigned char snomasks[64]; + std::bitset<64> snomasks; /** Channels this user is on, and the permissions they have there */ @@ -737,7 +760,7 @@ class CoreExport User : public connection /** Create a displayable mode string for this users umodes * @param The mode string */ - const char* FormatModes(); + const char* FormatModes(bool showparameters = false); /** Returns true if a specific mode is set * @param m The user mode