X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=include%2Fusers.h;h=c81ad988b7785429841bd78058e3a3c3140755e5;hb=be1e2e4ee5eb8b990692e6f5ae20931abe4c9e3c;hp=6f9c6d2969679cc18ed6867f9c3694b3f2d6b47d;hpb=d2381df1f7ba0e7dd2226b83e9e3c98c5cbd8808;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/users.h b/include/users.h index 6f9c6d296..c81ad988b 100644 --- a/include/users.h +++ b/include/users.h @@ -29,6 +29,7 @@ #include "inspstring.h" #include "connection.h" #include "hashcomp.h" +#include "dns.h" #include "cull_list.h" enum ChanStatus { @@ -52,6 +53,14 @@ enum UserModes { UM_OPERATOR = 'o'-65, }; +enum RegistrationState { + REG_NONE = 0, /* Has sent nothing */ + REG_USER = 1, /* Has sent USER */ + REG_NICK = 2, /* Has sent NICK */ + REG_NICKUSER = 3, /* Bitwise combination of REG_NICK and REG_USER */ + REG_ALL = 7 /* REG_NICKUSER plus next bit along */ +}; + /** Holds a channel name to which a user has been invited. */ class Invited : public classbase @@ -60,6 +69,21 @@ class Invited : public classbase irc::string channel; }; +class UserResolver : public Resolver +{ + private: + userrec* bound_user; + int bound_fd; + public: + UserResolver(userrec* user, std::string to_resolve, bool forward) : Resolver(to_resolve, forward), bound_user(user) + { + this->bound_fd = user->fd; + } + + void OnLookupComplete(const std::string &result); + void OnError(ResolverError e); +}; + /** Holds information relevent to <connect allow> and <connect deny> tags in the config file. */ @@ -138,6 +162,13 @@ class userrec : public connection */ InvitedList invites; public: + /** Resolvers for looking up this users hostname + */ + UserResolver* res_forward; + UserResolver* res_reverse; + std::string stored_host; + + void StartDNSLookup(); /** The users nickname. * An invalid nickname indicates an unregistered connection prior to the NICK command. @@ -238,7 +269,7 @@ class userrec : public connection /** IPV4 ip address */ - in_addr ip4; + insp_inaddr ip4; /* Write error string */ @@ -274,6 +305,8 @@ class userrec : public connection */ const char* FormatNoticeMasks(); + bool userrec::ProcessNoticeMasks(const char *sm); + bool IsNoticeMaskSet(unsigned char sm); void SetNoticeMask(unsigned char sm, bool value); @@ -396,7 +429,7 @@ class userrec : public connection /** Used to hold WHOWAS information */ -class WhoWasGroup +class WhoWasGroup : public classbase { public: char* host; @@ -419,9 +452,9 @@ void kill_link(userrec *user,const char* r); void kill_link_silent(userrec *user,const char* r); void AddWhoWas(userrec* u); void MaintainWhoWas(time_t TIME); -void AddClient(int socket, int port, bool iscached, in_addr ip4); +void AddClient(int socket, int port, bool iscached, insp_inaddr ip4); void FullConnectUser(userrec* user, CullList* Goners); -userrec* ReHashNick(char* Old, char* New); +userrec* ReHashNick(const char* Old, const char* New); void force_nickchange(userrec* user,const char* newnick); /* Configuration callbacks */