#ifndef _KVI_IRCMASK_H_ #define _KVI_IRCMASK_H_ //============================================================================= // // File : kvi_ircmask.h // Creation date : Fri Jan 8 1999 19:50:35 by Szymon Stefanek // // This file is part of the KVirc irc client distribution // Copyright (C) 1999-2004 Szymon Stefanek (pragma at kvirc dot net) // // This program is FREE software. You can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your opinion) any later version. // // This program is distributed in the HOPE that it will be USEFUL, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. // See the GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, write to the Free Software Foundation, // Inc. ,51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. // //============================================================================= // originally this file was named kvi_ircuser.h and the class was KviIrcUser // ported to UNICODE on 2004.10.28 1:50 am #include "kvi_settings.h" #include "kvi_heapobject.h" #include "kvi_qstring.h" //============================================================================= // Irc user mask abstraction //============================================================================= class KVILIB_API KviIrcMask : public KviHeapObject { friend class KviIrcUserList; friend class KviIrcUserChanList; private: TQString m_szNick; TQString m_szUser; TQString m_szHost; static TQString m_szWild; public: // Sets the nick for this user.
// If szNick is NULL or it points to an empty string the nick is set to "*".
void setNick(const TQString &szNick){ m_szNick = szNick.isEmpty() ? m_szWild : szNick; }; // Sets the username for this user.
// If szUsername is NULL or it points to an empty string the username is set to "*".
void setUsername(const TQString &szUser){ m_szUser = szUser.isEmpty() ? m_szWild : szUser; }; void setUser(const TQString &szUser){ m_szUser = szUser.isEmpty() ? m_szWild : szUser; }; // Sets the host for this user.
// If szHost is NULL or it points to an empty string the host is set to "*".
void setHost(const TQString &szHost){ m_szHost = szHost.isEmpty() ? m_szWild : szHost; }; // Sets the host , nick and username extracting it from an irc mask:
// nick!user@host
// The mask is terminated by end-of string null character or a character equal to c in the string.
// Returns the pointer to the end of the mask in the szMask string.(c or null-terminator)
//const char * setMask(const TQString &szMask,char c=' '); // Sets the host , nick and username extracting it from an userhost mask:
// nick[*]=<+|->user@host
// The mask is terminated by end-of string null char or a space character.
// Returns the pointer to the next non-space char in the szMask string or to the null-terminator
// If there are no more masks avaiable. // WARNING : the szMask pointer can NOT be NULL //const char *setUserhostMask(const TQString &szMask); // Returns the nick of this user.
// In the worst case you get a string == "*"
const TQString &nick() const { return m_szNick; }; // DEPRECATED! const TQString &username() const { return m_szUser; }; const TQString &user() const { return m_szUser; }; const TQString &host() const { return m_szHost; }; bool hasUser() const { return !(m_szUser.isEmpty() || (m_szUser == m_szWild)); }; bool hasHost() const { return !(m_szHost.isEmpty() || (m_szHost == m_szWild)); }; bool hasNumericHost() const; // Retuns in szMask the specified (if possible) mask of this user.
// If the host or username are not known , the mask may contain less information // than requested.
enum MaskType { NickUserHost = 0, // nick!~user@machine.host.top (nick!~user@XXX.XXX.XXX.XXX) (default) NickUserNet = 1, // 1 : nick!~user@*.abc.host.top (nick!~user@XXX.XXX.XXX.*) NickUser = 2, // 2 : nick!~user@* NickHost = 3, // 3 : nick!*@machine.host.top (nick!*@XXX.XXX.XXX.XXX) NickNet = 4, // 4 : nick!*@*.abc.host.top (nick!*@XXX.XXX.XXX.*) Nick = 5, // 5 : nick!*@* UserHost = 6, // 6 : *!~user@machine.host.top (*!~user@XXX.XXX.XXX.XXX) UserNet = 7, // 7 : *!~user@*.abc.host.top (*!~user@XXX.XXX.XXX.*) User = 8, // 8 : *!~user@* Host = 9, // 9 : *!*@machine.host.top (*!*@XXX.XXX.XXX.XXX) Net = 10, // 10: *!*@*.abc.host.top (*!*@XXX.XXX.XXX.*) NickCleanUserHost = 11, // 11 : nick!*user@machine.host.top (nick!*user@XXX.XXX.XXX.XXX) NickCleanUserNet = 12, // 12 : nick!*user@*.abc.host.top (nick!*user@XXX.XXX.XXX.*) NickCleanUser = 13, // 13 : nick!*user@* CleanUserHost = 14, // 14 : *!*user@machine.host.top (*!user@*XXX.XXX.XXX.XXX) CleanUserNet = 15, // 15 : *!*user@*.abc.host.top (*!user@*XXX.XXX.XXX.*) CleanUser = 16, // 16 : *!*user@* NickUserLargeNet = 17, // 17 : nick!~user@*.host.top (nick!~user@XXX.XXX.*) NickLargeNet = 18, // 18 : nick!*@*.host.top (nick!*@XXX.XXX.*) UserLargeNet = 19, // 19 : *!~user@*.host.top (*!~user@XXX.XXX.*) NickCleanUserLargeNet = 20, // 20 : nick!*user@*.host.top (nick!*user@XXX.XXX.*) CleanUserLargeNet = 21, // 21 : *!*user@*.host.top (*!user@*XXX.XXX.*) // smart versions of the masks 17-21 that try take care of masked ip addresses // in the form xxx.xxx.INVALID-TOP-MASK NickUserSmartNet = 22, // 22 : nick!~user@*.host.top (nick!~user@XXX.XXX.*) NickSmartNet = 23, // 23 : nick!*@*.host.top (nick!*@XXX.XXX.*) UserSmartNet = 24, // 24 : *!~user@*.host.top (*!~user@XXX.XXX.*) NickCleanUserSmartNet = 25, // 25 : nick!*user@*.host.top (nick!*user@XXX.XXX.*) CleanUserSmartNet = 26 // 26 : *!*user@*.host.top (*!user@*XXX.XXX.*) }; void mask(TQString &szMask,MaskType eMaskType = NickCleanUserHost) const; bool hasWildNick(); // Wild external matches (this and external are wild) // bool matches(const char *szMask); // // passing 0 as one of params here means that it is a match by default // bool matches(const char *nick,const char *user,const char *host); bool matches(const KviIrcMask &mask) const; // Fixed external matches (this is wild , external is fixed) bool matchesFixed(const TQString &nick,const TQString &user,const TQString &host) const; // bool matchesFixed(const TQString &szMask) const; bool matchesFixed(const KviIrcMask &mask) const; // Fixed internal matches (this is fixed , external is wild) //bool matchedBy(const TQString &szMask) const; bool matchedBy(const KviIrcMask &mask) const { return mask.matchesFixed(*this); }; int nonWildChars(); bool operator==(const KviIrcMask &user); public: // Constructs an empty mask (*!*@*) KviIrcMask(); // Constructs this KviIrcMask object from a string mask KviIrcMask(const TQString &szMask); // Carbon copy KviIrcMask(const KviIrcMask &ircUser) : m_szNick(ircUser.m_szNick), m_szUser(ircUser.m_szUser), m_szHost(ircUser.m_szHost) {}; KviIrcMask(const TQString &nick,const TQString &user,const TQString &host) : m_szNick(nick), m_szUser(user), m_szHost(host) {}; private: int getIpDomainMaskLen() const; TQString getHostDomainMask() const; int getLargeIpDomainMaskLen() const; TQString getLargeHostDomainMask() const; // this is just a GUESS and must be called AFTER making sure that it is NOT a plain numeric IP bool hasMaskedIp() const; }; #endif //_KVI_IRCMASK_H_