X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;ds=sidebyside;f=include%2Fusers.h;h=ae76d2eb3a3ffa18948bf460fd1e0175bd40596e;hb=5267fb9d362aeb326c9e64f7171c957f76776f90;hp=fa8f610bc915c9c4b57af2f56573bf6e13bbbc0d;hpb=0ec19b7ac91eedc83b31c3da733e237bfe28fc48;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/users.h b/include/users.h index fa8f610bc..ae76d2eb3 100644 --- a/include/users.h +++ b/include/users.h @@ -455,11 +455,10 @@ class CoreExport User : public Extensible /** Returns true or false if a user can set a privileged user or channel mode. * This is done by looking up their oper type from User::oper, then referencing * this to their oper classes, and checking the modes they can set. - * @param mode The mode the check - * @param type ModeType (MODETYPE_CHANNEL or MODETYPE_USER). + * @param mh Mode to check * @return True if the user can set or unset this mode. */ - virtual bool HasModePermission(unsigned char mode, ModeType type); + virtual bool HasModePermission(const ModeHandler* mh) const; /** Creates a usermask with real host. * Takes a buffer to use and fills the given buffer with the hostmask in the format user\@host @@ -519,9 +518,114 @@ class CoreExport User : public Extensible */ void WriteNotice(const std::string& text) { this->WriteCommand("NOTICE", ":" + text); } - void WriteNumeric(unsigned int numeric, const char* text, ...) CUSTOM_PRINTF(3, 4); + /** Send a NOTICE message from the local server to the user. + * @param text Text to send + */ + virtual void WriteRemoteNotice(const std::string& text); + + virtual void WriteRemoteNumeric(const Numeric::Numeric& numeric); + + template + void WriteRemoteNumeric(unsigned int numeric, T1 p1) + { + Numeric::Numeric n(numeric); + n.push(p1); + WriteRemoteNumeric(n); + } + + template + void WriteRemoteNumeric(unsigned int numeric, T1 p1, T2 p2) + { + Numeric::Numeric n(numeric); + n.push(p1); + n.push(p2); + WriteRemoteNumeric(n); + } + + template + void WriteRemoteNumeric(unsigned int numeric, T1 p1, T2 p2, T3 p3) + { + Numeric::Numeric n(numeric); + n.push(p1); + n.push(p2); + n.push(p3); + WriteRemoteNumeric(n); + } - void WriteNumeric(unsigned int numeric, const std::string &text); + template + void WriteRemoteNumeric(unsigned int numeric, T1 p1, T2 p2, T3 p3, T4 p4) + { + Numeric::Numeric n(numeric); + n.push(p1); + n.push(p2); + n.push(p3); + n.push(p4); + WriteRemoteNumeric(n); + } + + template + void WriteRemoteNumeric(unsigned int numeric, T1 p1, T2 p2, T3 p3, T4 p4, T5 p5) + { + Numeric::Numeric n(numeric); + n.push(p1); + n.push(p2); + n.push(p3); + n.push(p4); + n.push(p5); + WriteRemoteNumeric(n); + } + + void WriteNumeric(const Numeric::Numeric& numeric); + + template + void WriteNumeric(unsigned int numeric, T1 p1) + { + Numeric::Numeric n(numeric); + n.push(p1); + WriteNumeric(n); + } + + template + void WriteNumeric(unsigned int numeric, T1 p1, T2 p2) + { + Numeric::Numeric n(numeric); + n.push(p1); + n.push(p2); + WriteNumeric(n); + } + + template + void WriteNumeric(unsigned int numeric, T1 p1, T2 p2, T3 p3) + { + Numeric::Numeric n(numeric); + n.push(p1); + n.push(p2); + n.push(p3); + WriteNumeric(n); + } + + template + void WriteNumeric(unsigned int numeric, T1 p1, T2 p2, T3 p3, T4 p4) + { + Numeric::Numeric n(numeric); + n.push(p1); + n.push(p2); + n.push(p3); + n.push(p4); + WriteNumeric(n); + } + + template + void WriteNumeric(unsigned int numeric, T1 p1, T2 p2, T3 p3, T4 p4, T5 p5) + { + Numeric::Numeric n(numeric); + n.push(p1); + n.push(p2); + n.push(p3); + n.push(p4); + n.push(p5); + WriteNumeric(n); + } /** Write text to this user, appending CR/LF and prepending :nick!user\@host of the user provided in the first parameter. * @param user The user to prepend the :nick!user\@host of @@ -558,20 +662,6 @@ class CoreExport User : public Extensible */ void ForEachNeighbor(ForEachNeighborHandler& handler, bool include_self = true); - /** Dump text to a user target, splitting it appropriately to fit - * @param linePrefix text to prefix each complete line with - * @param textStream the text to send to the user - */ - void SendText(const std::string& linePrefix, std::stringstream& textStream); - - /** Write to the user, routing the line if the user is remote. - */ - virtual void SendText(const std::string& line) = 0; - - /** Write to the user, routing the line if the user is remote. - */ - void SendText(const char* text, ...) CUSTOM_PRINTF(2, 3); - /** Return true if the user shares at least one channel with another user * @param other The other user to compare the channel list against * @return True if the given user shares at least one channel with this user @@ -641,7 +731,7 @@ class CoreExport UserIOHandler : public StreamSocket typedef unsigned int already_sent_t; -class CoreExport LocalUser : public User, public InviteBase, public insp::intrusive_list_node +class CoreExport LocalUser : public User, public insp::intrusive_list_node { public: LocalUser(int fd, irc::sockets::sockaddrs* client, irc::sockets::sockaddrs* server); @@ -720,7 +810,6 @@ class CoreExport LocalUser : public User, public InviteBase, public i */ unsigned int CommandFloodPenalty; - static already_sent_t already_sent_id; already_sent_t already_sent; /** Check if the user matches a G or K line, and disconnect them if they do. @@ -744,30 +833,14 @@ class CoreExport LocalUser : public User, public InviteBase, public i void SetClientIP(const irc::sockets::sockaddrs& sa, bool recheck_eline = true); - void SendText(const std::string& line); void Write(const std::string& text); void Write(const char*, ...) CUSTOM_PRINTF(2, 3); - /** Returns the list of channels this user has been invited to but has not yet joined. - * @return A list of channels the user is invited to + /** Send a NOTICE message from the local server to the user. + * The message will be sent even if the user is connected to a remote server. + * @param text Text to send */ - InviteList& GetInviteList(); - - /** Returns true if a user is invited to a channel. - * @param chan A channel to look up - * @return True if the user is invited to the given channel - */ - bool IsInvited(Channel* chan) { return (Invitation::Find(chan, this) != NULL); } - - /** Removes a channel from a users invite list. - * This member function is called on successfully joining an invite only channel - * to which the user has previously been invited, to clear the invitation. - * @param chan The channel to remove the invite to - * @return True if the user was invited to the channel and the invite was erased, false if the user wasn't invited - */ - bool RemoveInvite(Channel* chan); - - void RemoveExpiredInvites(); + void WriteRemoteNotice(const std::string& text) CXX11_OVERRIDE; /** Returns true or false for if a user can execute a privilaged oper command. * This is done by looking up their oper type from User::oper, then referencing @@ -790,20 +863,18 @@ class CoreExport LocalUser : public User, public InviteBase, public i /** Returns true or false if a user can set a privileged user or channel mode. * This is done by looking up their oper type from User::oper, then referencing * this to their oper classes, and checking the modes they can set. - * @param mode The mode the check - * @param type ModeType (MODETYPE_CHANNEL or MODETYPE_USER). + * @param mh Mode to check * @return True if the user can set or unset this mode. */ - bool HasModePermission(unsigned char mode, ModeType type); + bool HasModePermission(const ModeHandler* mh) const; }; -class CoreExport RemoteUser : public User +class RemoteUser : public User { public: RemoteUser(const std::string& uid, Server* srv) : User(uid, srv, USERTYPE_REMOTE) { } - virtual void SendText(const std::string& line); }; class CoreExport FakeUser : public User @@ -821,7 +892,6 @@ class CoreExport FakeUser : public User } virtual CullResult cull(); - virtual void SendText(const std::string& line); virtual const std::string& GetFullHost(); virtual const std::string& GetFullRealHost(); };