X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=include%2Fusers.h;h=5f066cdd4619235e7100daed8742741b2b0f3bb2;hb=28801718521fa1d07af3678d6ec171e4a95ffd19;hp=b3de659419c473425e6dabef4684ec64fcd3cf70;hpb=7e94b3110480efd4ef1e46cd44dc31c46aa9f8a7;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/users.h b/include/users.h index b3de65941..5f066cdd4 100644 --- a/include/users.h +++ b/include/users.h @@ -15,7 +15,6 @@ #define __USERS_H__ #include "socket.h" -#include "connection.h" #include "dns.h" #include "mode.h" @@ -44,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. @@ -415,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. @@ -430,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; @@ -459,39 +456,71 @@ class CoreExport User : public connection 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; + + /** 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 + /** Stored reverse lookup from res_forward. Should not be used after resolution. */ std::string stored_host; @@ -679,9 +708,10 @@ class CoreExport User : public connection User(InspIRCd* Instance, const std::string &uid = ""); /** Check if the user matches a G or K line, and disconnect them if they do. + * @param doZline True if ZLines should be checked (if IP has changed since initial connect) * Returns true if the user matched a ban, false else. */ - bool CheckLines(); + bool CheckLines(bool doZline = false); /** Returns the full displayed host of the user * This member function returns the hostname of the user as seen by other users @@ -731,7 +761,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