X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=include%2Fusers.h;h=0d2bff0129f351bd55a74cf2fc22b16df3ded2b3;hb=552ab1e39852733203d2037aa0bbaa1b63fd94a2;hp=29db518b799a78460300a4e8f089e50d7ea0e525;hpb=58385dd458e927994957b6d603f7f9da3fc52e14;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/users.h b/include/users.h index 29db518b7..0d2bff012 100644 --- a/include/users.h +++ b/include/users.h @@ -239,6 +239,12 @@ public: this->limit = llimit; } + void Update(const std::string &n, const std::string &hst) + { + name = n; + host = hst; + } + /** Reference counter. Contains an int as to how many users are connected to this class. :) * This will be 0 if no users are connected. If a is removed from the config, and there * are 0 users on it - it will go away in RAM. :) @@ -431,19 +437,19 @@ class CoreExport User : public connection /** Cached nick!ident@host value using the real hostname */ - char* cached_fullhost; + std::string cached_fullhost; /** Cached nick!ident@ip value using the real IP address */ - char* cached_hostip; + std::string cached_hostip; /** Cached nick!ident@host value using the masked hostname */ - char* cached_makehost; + std::string cached_makehost; /** Cached nick!ident@realhost value using the real hostname */ - char* cached_fullrealhost; + std::string cached_fullrealhost; /** When we erase the user (in the destructor), * we call this method to subtract one from all @@ -506,27 +512,27 @@ class CoreExport User : public connection * An invalid nickname indicates an unregistered connection prior to the NICK command. * Use InspIRCd::IsNick() to validate nicknames. */ - char nick[NICKMAX]; - + std::string nick; + /** The user's unique identifier. * This is the unique identifier which the user has across the network. */ - char uuid[UUID_LENGTH]; - + std::string uuid; + /** The users ident reply. * Two characters are added to the user-defined limit to compensate for the tilde etc. */ - char ident[IDENTMAX+2]; - + std::string ident; + /** The host displayed to non-opers (used for cloaking etc). * This usually matches the value of User::host. */ - char dhost[65]; - + std::string dhost; + /** The users full name (GECOS). */ - char fullname[MAXGECOS+1]; - + 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. @@ -536,12 +542,12 @@ class CoreExport User : public connection * The following RFC characters o, w, s, i have constants defined via an * enum, such as UM_SERVERNOTICE and UM_OPETATOR. */ - char modes[64]; + unsigned char modes[64]; /** What snomasks are set on this user. * This functions the same as the above modes. */ - char snomasks[64]; + unsigned char snomasks[64]; /** Channels this user is on, and the permissions they have there */ @@ -554,7 +560,12 @@ class CoreExport User : public connection /** The user's away message. * If this string is empty, the user is not marked as away. */ - char awaymsg[MAXAWAY+1]; + std::string awaymsg; + + /** Time the user last went away. + * This is ONLY RELIABLE if user IS_AWAY()! + */ + time_t awaytime; /** Timestamp of current time + connection class timeout. * This user must send USER/NICK before this timestamp is @@ -567,8 +578,8 @@ class CoreExport User : public connection * we can say 'yay' or 'nay' to any commands they issue. * The value of this is the value of a valid 'type name=' tag. */ - char oper[NICKMAX]; - + std::string oper; + /** True when DNS lookups are completed. * The UserResolver classes res_forward and res_reverse will * set this value once they complete. @@ -579,8 +590,8 @@ class CoreExport User : public connection * This is stored even if the block doesnt need a password, so that * modules may check it. */ - char password[64]; - + std::string password; + /** User's receive queue. * Lines from the IRCd awaiting processing are stored here. * Upgraded april 2005, old system a bit hairy. @@ -648,7 +659,7 @@ class CoreExport User : public connection /** Get IP string from sockaddr, using static internal buffer * @return The IP string */ - const char* GetIPString(); + const char* GetIPString(bool translate4in6 = true); /* Write error string */ @@ -678,12 +689,16 @@ 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 + */ + void CheckLines(); + /** Returns the full displayed host of the user * This member function returns the hostname of the user as seen by other users * on the server, in nick!ident&at;host form. * @return The full masked host of the user */ - virtual char* GetFullHost(); + virtual const std::string& GetFullHost(); /** Returns the full real host of the user * This member function returns the hostname of the user as seen by other users @@ -691,7 +706,7 @@ class CoreExport User : public connection * e.g. through a module, then this method will ignore it and return the true hostname. * @return The full real host of the user */ - virtual char* GetFullRealHost(); + virtual const std::string& GetFullRealHost(); /** This clears any cached results that are used for GetFullRealHost() etc. * The results of these calls are cached as generating them can be generally expensive. @@ -792,7 +807,7 @@ class CoreExport User : public connection * @param a The string to add to the users read buffer * @return True if the string was successfully added to the read buffer */ - bool AddBuffer(std::string a); + bool AddBuffer(const std::string &a); /** This method returns true if the buffer contains at least one carriage return * character (e.g. one complete line may be read) @@ -859,13 +874,13 @@ class CoreExport User : public connection * Takes a buffer to use and fills the given buffer with the hostmask in the format user@host * @return the usermask in the format user@host */ - char* MakeHost(); + const std::string& MakeHost(); /** Creates a usermask with real ip. * Takes a buffer to use and fills the given buffer with the ipmask in the format user@ip * @return the usermask in the format user@ip */ - char* MakeHostIP(); + const std::string& MakeHostIP(); /** Shuts down and closes the user's socket * This will not cause the user to be deleted. Use InspIRCd::QuitUser for this, @@ -873,14 +888,6 @@ class CoreExport User : public connection */ void CloseSocket(); - /** Disconnect a user gracefully - * @param user The user to remove - * @param r The quit reason to show to normal users - * @param oreason The quit reason to show to opers - * @return Although this function has no return type, on exit the user provided will no longer exist. - */ - static void QuitUser(InspIRCd* Instance, User *user, const std::string &r, const char* oreason = ""); - /** Add the user to WHOWAS system */ void AddToWhoWas(); @@ -1106,7 +1113,7 @@ class CoreExport User : public connection /** Get oper-specific quit message shown only to opers when the user quits. * (overrides any sent by QuitUser) */ - const char* GetOperQuit(); + const std::string& GetOperQuit(); /** Increases a user's command penalty by a set amount. */