X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=include%2Fusers.h;h=a63dd7cc67a95b882eb29a5e985cc9f3eaea19ff;hb=991a893b5de0d168a3c7372905044a1ddadd9214;hp=4d7b074b6e4c975ab2e2698d50f852abe1a37799;hpb=32026e5b6f345be8bfeddde939e69eec6618fe6b;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/users.h b/include/users.h index 4d7b074b6..a63dd7cc6 100644 --- a/include/users.h +++ b/include/users.h @@ -14,13 +14,8 @@ #ifndef __USERS_H__ #define __USERS_H__ -#include -#include "inspircd_config.h" #include "socket.h" -#include "channels.h" -#include "inspstring.h" #include "connection.h" -#include "hashcomp.h" #include "dns.h" /** Channel status for a user @@ -76,47 +71,8 @@ enum RegistrationState { }; /* Required forward declaration */ -class InspIRCd; - -/** Derived from Resolver, and performs user forward/reverse lookups. - */ -class CoreExport UserResolver : public Resolver -{ - private: - /** User this class is 'attached' to. - */ - User* bound_user; - /** File descriptor teh lookup is bound to - */ - int bound_fd; - /** True if the lookup is forward, false if is a reverse lookup - */ - bool fwd; - public: - /** Create a resolver. - * @param Instance The creating instance - * @param user The user to begin lookup on - * @param to_resolve The IP or host to resolve - * @param qt The query type - * @param cache Modified by the constructor if the result was cached - */ - UserResolver(InspIRCd* Instance, User* user, std::string to_resolve, QueryType qt, bool &cache); - - /** Called on successful lookup - * @param result Result string - * @param ttl Time to live for result - * @param cached True if the result was found in the cache - * @param resultnum Result number, we are only interested in result 0 - */ - void OnLookupComplete(const std::string &result, unsigned int ttl, bool cached, int resultnum = 0); - - /** Called on failed lookup - * @param e Error code - * @param errormessage Error message string - */ - void OnError(ResolverError e, const std::string &errormessage); -}; - +class Channel; +class UserResolver; /** Holds information relevent to <connect allow> and <connect deny> tags in the config file. */ @@ -145,6 +101,10 @@ class CoreExport ConnectClass : public classbase */ std::string pass; + /** (Optional) Hash Method for this line + */ + std::string hash; + /** Threshold value for flood disconnect */ unsigned int threshold; @@ -179,7 +139,7 @@ public: */ ConnectClass(const ConnectClass* source) : classbase(), type(source->type), name(source->name), registration_timeout(source->registration_timeout), flood(source->flood), host(source->host), - pingtime(source->pingtime), pass(source->pass), threshold(source->threshold), sendqmax(source->sendqmax), + pingtime(source->pingtime), pass(source->pass), hash(source->hash), threshold(source->threshold), sendqmax(source->sendqmax), recvqmax(source->recvqmax), maxlocal(source->maxlocal), maxglobal(source->maxglobal), maxchans(source->maxchans), port(source->port), RefCount(0), disabled(false), limit(0) { @@ -187,7 +147,7 @@ public: /** Create a new connect class with no settings. */ - ConnectClass() : type(CC_DENY), name("unnamed"), registration_timeout(0), flood(0), host(""), pingtime(0), pass(""), + ConnectClass() : type(CC_DENY), name("unnamed"), registration_timeout(0), flood(0), host(""), pingtime(0), pass(""), hash(""), threshold(0), sendqmax(0), recvqmax(0), maxlocal(0), maxglobal(0), RefCount(0), disabled(false), limit(0) { } @@ -199,6 +159,7 @@ public: * @param hst The IP mask to allow * @param ping The ping frequency * @param pas The password to be used + * @param hsh The hash to be used * @param thres The flooding threshold * @param sendq The maximum sendq value * @param recvq The maximum recvq value @@ -206,9 +167,9 @@ public: * @param maxg The maximum global sessions */ ConnectClass(const std::string &thename, unsigned int timeout, unsigned int fld, const std::string &hst, unsigned int ping, - const std::string &pas, unsigned int thres, unsigned long sendq, unsigned long recvq, + const std::string &pas, const std::string &hsh, unsigned int thres, unsigned long sendq, unsigned long recvq, unsigned long maxl, unsigned long maxg, unsigned int maxc, int p = 0) : - type(CC_ALLOW), name(thename), registration_timeout(timeout), flood(fld), host(hst), pingtime(ping), pass(pas), + type(CC_ALLOW), name(thename), registration_timeout(timeout), flood(fld), host(hst), pingtime(ping), pass(pas), hash(hsh), threshold(thres), sendqmax(sendq), recvqmax(recvq), maxlocal(maxl), maxglobal(maxg), maxchans(maxc), port(p), RefCount(0), disabled(false), limit(0) { } /** Create a new connect class to DENY connections @@ -216,7 +177,7 @@ public: * @param hst The IP mask to deny */ ConnectClass(const std::string &thename, const std::string &hst) : type(CC_DENY), name(thename), registration_timeout(0), - flood(0), host(hst), pingtime(0), pass(""), threshold(0), sendqmax(0), recvqmax(0), maxlocal(0), maxglobal(0), maxchans(0), port(0), RefCount(0), disabled(false), limit(0) + flood(0), host(hst), pingtime(0), pass(""), hash(""), threshold(0), sendqmax(0), recvqmax(0), maxlocal(0), maxglobal(0), maxchans(0), port(0), RefCount(0), disabled(false), limit(0) { } @@ -226,7 +187,7 @@ public: */ ConnectClass(const std::string &thename, const ConnectClass* source) : type(source->type), name(thename), registration_timeout(source->registration_timeout), flood(source->flood), host(source->host), - pingtime(source->pingtime), pass(source->pass), threshold(source->threshold), sendqmax(source->sendqmax), + pingtime(source->pingtime), pass(source->pass), hash(source->hash), threshold(source->threshold), sendqmax(source->sendqmax), recvqmax(source->recvqmax), maxlocal(source->maxlocal), maxglobal(source->maxglobal), maxchans(source->maxchans), port(source->port), RefCount(0), disabled(false), limit(0) { @@ -246,7 +207,7 @@ public: */ void Update(unsigned int timeout, unsigned int fld, const std::string &hst, unsigned int ping, const std::string &pas, unsigned int thres, unsigned long sendq, unsigned long recvq, - unsigned long maxl, unsigned long maxg, unsigned int maxc, int p, unsigned long limit) + unsigned long maxl, unsigned long maxg, unsigned int maxc, int p, unsigned long llimit) { if (timeout) registration_timeout = timeout; @@ -273,7 +234,7 @@ public: if (p) port = p; - this->limit = limit; + this->limit = llimit; } /** Reference counter. Contains an int as to how many users are connected to this class. :) @@ -356,6 +317,13 @@ public: return pass; } + /** Returns the hash or an empty string + */ + const std::string& GetHash() + { + return hash; + } + /** Returns the flood threshold value */ unsigned int GetThreshold() @@ -392,9 +360,9 @@ public: } }; -/** Holds a complete list of all channels to which a user has been invited and has not yet joined. +/** Holds a complete list of all channels to which a user has been invited and has not yet joined, and the time at which they'll expire. */ -typedef std::vector InvitedList; +typedef std::vector< std::pair > InvitedList; /** Holds a complete list of all allow and deny tags from the configuration file (connection classes) */ @@ -632,18 +600,21 @@ class CoreExport User : public connection */ time_t reset_due; - /** If this is set to true, then all read operations for the user + /** If this is set to true, then all socket operations for the user * are dropped into the bit-bucket. - * This is used by the global CullList, but please note that setting this value - * alone will NOT cause the user to quit. This means it can be used seperately, - * for example by shun modules etc. + * This value is set by QuitUser, and is not needed seperately from that call. + * Please note that setting this value alone will NOT cause the user to quit. */ - bool muted; + bool quitting; /** IPV4 or IPV6 ip address. Use SetSockAddr to set this and GetProtocolFamily/ * GetIPString/GetPort to obtain its values. */ sockaddr* ip; + + /** Set by GetIPString() to avoid constantly re-grabbing IP via sockets voodoo. + */ + std::string cachedip; /** Initialize the clients sockaddr * @param protocol_family The protocol family of the IP address, AF_INET or AF_INET6 @@ -765,8 +736,9 @@ class CoreExport User : public connection /** Adds a channel to a users invite list (invites them to a channel) * @param channel A channel name to add + * @param timeout When the invite should expire (0 == never) */ - virtual void InviteTo(const irc::string &channel); + virtual void InviteTo(const irc::string &channel, time_t timeout); /** Removes a channel from a users invite list. * This member function is called on successfully joining an invite only channel @@ -1061,7 +1033,7 @@ class CoreExport User : public connection * @param text The text format string to send * @param ... Format arguments */ - void SendAll(const char* command, char* text, ...); + void SendAll(const char* command, const char* text, ...); /** Compile a channel list for this user, and send it to the user 'source' * Used internally by WHOIS @@ -1131,8 +1103,47 @@ class CoreExport User : public connection virtual ~User(); }; +/** Derived from Resolver, and performs user forward/reverse lookups. + */ +class CoreExport UserResolver : public Resolver +{ + private: + /** User this class is 'attached' to. + */ + User* bound_user; + /** File descriptor teh lookup is bound to + */ + int bound_fd; + /** True if the lookup is forward, false if is a reverse lookup + */ + bool fwd; + public: + /** Create a resolver. + * @param Instance The creating instance + * @param user The user to begin lookup on + * @param to_resolve The IP or host to resolve + * @param qt The query type + * @param cache Modified by the constructor if the result was cached + */ + UserResolver(InspIRCd* Instance, User* user, std::string to_resolve, QueryType qt, bool &cache); + + /** Called on successful lookup + * @param result Result string + * @param ttl Time to live for result + * @param cached True if the result was found in the cache + * @param resultnum Result number, we are only interested in result 0 + */ + void OnLookupComplete(const std::string &result, unsigned int ttl, bool cached, int resultnum = 0); + + /** Called on failed lookup + * @param e Error code + * @param errormessage Error message string + */ + void OnError(ResolverError e, const std::string &errormessage); +}; + /* Configuration callbacks */ -class ServerConfig; +//class ServerConfig; #endif