/** RFC1459 channel modes
* */
enum UserModes {
- UM_SERVERNOTICE = 's'-65,
- UM_WALLOPS = 'w'-65,
- UM_INVISIBLE = 'i'-65,
- UM_OPERATOR = 'o'-65,
- UM_SNOMASK = 'n'-65,
+ UM_SERVERNOTICE = 's' - 65,
+ UM_WALLOPS = 'w' - 65,
+ UM_INVISIBLE = 'i' - 65,
+ UM_OPERATOR = 'o' - 65,
+ UM_SNOMASK = 'n' - 65
};
enum RegistrationState {
+
+#ifndef WIN32 // Burlex: This is already defined in win32, luckily it is still 0.
REG_NONE = 0, /* Has sent nothing */
+#endif
+
REG_USER = 1, /* Has sent USER */
REG_NICK = 2, /* Has sent NICK */
REG_NICKUSER = 3, /* Bitwise combination of REG_NICK and REG_USER */
/** Derived from Resolver, and performs user forward/reverse lookups.
*/
-class UserResolver : public Resolver
+class CoreExport UserResolver : public Resolver
{
private:
/** User this class is 'attached' to.
/** Holds information relevent to <connect allow> and <connect deny> tags in the config file.
*/
-class ConnectClass : public classbase
+class CoreExport ConnectClass : public classbase
{
private:
/** Type of line, either CC_ALLOW or CC_DENY
/** Global max when connecting by this connection class
*/
unsigned long maxglobal;
+ /** Port number this connect class applies to
+ */
+ int port;
public:
*/
ConnectClass(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 long maxl, unsigned long maxg, int p = 0) :
type(CC_ALLOW), registration_timeout(timeout), flood(fld), host(hst), pingtime(ping), pass(pas),
- threshold(thres), sendqmax(sendq), recvqmax(recvq), maxlocal(maxl), maxglobal(maxg) { }
+ threshold(thres), sendqmax(sendq), recvqmax(recvq), maxlocal(maxl), maxglobal(maxg), port(p) { }
/** Create a new connect class to DENY connections
* @param hst The IP mask to deny
*/
ConnectClass(const std::string &hst) : type(CC_DENY), registration_timeout(0), flood(0), host(hst), pingtime(0),
- pass(""), threshold(0), sendqmax(0), recvqmax(0), maxlocal(0), maxglobal(0) { }
+ pass(""), threshold(0), sendqmax(0), recvqmax(0), maxlocal(0), maxglobal(0), port(0) { }
/** Returns the type, CC_ALLOW or CC_DENY
*/
return host;
}
+ int GetPort()
+ {
+ return port;
+ }
+
/** Returns the ping frequency
*/
unsigned int GetPingTime()
*/
unsigned long GetMaxLocal()
{
- return (maxlocal ? maxlocal : 1);
+ return maxlocal;
}
/** Returns the maximum number of global sessions
*/
unsigned long GetMaxGlobal()
{
- return (maxglobal ? maxglobal : 1);
+ return maxglobal;
}
};
typedef std::map<chanrec*, char> UserChanList;
typedef UserChanList::iterator UCListIter;
+class userrec;
+
+class CoreExport VisData
+{
+ public:
+ VisData();
+ virtual ~VisData();
+ virtual bool VisibleTo(userrec* user);
+};
+
/** Holds all information about a user
* This class stores all information about a user connected to the irc server. Everything about a
* connection is stored here primarily, from the user's socket ID (file descriptor) through to the
* by nickname, or the FindDescriptor method of the InspIRCd class to find a specific user by their
* file descriptor value.
*/
-class userrec : public connection
+class CoreExport userrec : public connection
{
private:
/** Pointer to creator.
*/
UserResolver* res_reverse;
+ VisData* Visibility;
+
/** Stored reverse lookup from res_forward
*/
std::string stored_host;
*/
void Oper(const std::string &opertype);
+ /** Call this method to find the matching <connect> for a user, and to check them against it.
+ */
+ void CheckClass();
+
/** Use this method to fully connect a user.
* This will send the message of the day, check G/K/E lines, etc.
*/