X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=include%2Fusers.h;h=c81ad988b7785429841bd78058e3a3c3140755e5;hb=be1e2e4ee5eb8b990692e6f5ae20931abe4c9e3c;hp=30e524e8559d13f0e115aece301f1cdcb815bca3;hpb=33ed72a1dfae595132dd50c760b6a312ef2ce8fe;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/users.h b/include/users.h index 30e524e85..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 { @@ -45,13 +46,21 @@ enum ClassTypes { /** RFC1459 channel modes * */ -enum ChannelModes { +enum UserModes { UM_SERVERNOTICE = 's'-65, UM_WALLOPS = 'w'-65, UM_INVISIBLE = 'i'-65, 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. @@ -170,6 +201,11 @@ class userrec : public connection */ char modes[64]; + /** What snomasks are set on this user. + * This functions the same as the above modes. + */ + char snomasks[64]; + UserChanList chans; /** The server the user is connected to. @@ -233,7 +269,7 @@ class userrec : public connection /** IPV4 ip address */ - in_addr ip4; + insp_inaddr ip4; /* Write error string */ @@ -263,6 +299,26 @@ class userrec : public connection * e.g. through a module, then this method will ignore it and return the true hostname. */ virtual char* GetFullRealHost(); + + /* + * Create a displayable mode string for this users umodes + */ + const char* FormatNoticeMasks(); + + bool userrec::ProcessNoticeMasks(const char *sm); + + bool IsNoticeMaskSet(unsigned char sm); + + void SetNoticeMask(unsigned char sm, bool value); + + /* + * Create a displayable mode string for this users umodes + */ + const char* FormatModes(); + + bool IsModeSet(unsigned char m); + + void SetMode(unsigned char m, bool value); /** Returns true if a user is invited to a channel. */ @@ -373,7 +429,7 @@ class userrec : public connection /** Used to hold WHOWAS information */ -class WhoWasGroup +class WhoWasGroup : public classbase { public: char* host; @@ -396,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 */