#define __USERS_H__
#include <string>
-
-#ifdef THREADED_DNS
-#include <pthread.h>
-#endif
-
#include "inspircd_config.h"
#include "socket.h"
#include "channels.h"
#include "inspstring.h"
#include "connection.h"
#include "hashcomp.h"
+#include "dns.h"
#include "cull_list.h"
enum ChanStatus {
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
};
+
+/** Derived from Resolver, and performs user forward/reverse lookups.
+ */
+class UserResolver : public Resolver
+{
+ private:
+ /** User this class is 'attached' to.
+ */
+ userrec* bound_user;
+ int bound_fd;
+ public:
+ UserResolver(userrec* user, std::string to_resolve, bool forward);
+
+ void OnLookupComplete(const std::string &result);
+ void OnError(ResolverError e);
+};
+
+
/** Holds information relevent to <connect allow> and <connect deny> tags in the config file.
*/
class ConnectClass : public classbase
*/
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.
*/
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.
/** IPV4 ip address
*/
- in_addr ip4;
+ insp_inaddr ip4;
/* Write error string
*/
*/
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 HasMode(unsigned char m);
+ bool IsModeSet(unsigned char m);
+
+ void SetMode(unsigned char m, bool value);
/** Returns true if a user is invited to a channel.
*/
/** Default destructor
*/
virtual ~userrec();
-
-#ifdef THREADED_DNS
- /** Thread used for threaded lookups
- */
- pthread_t dnsthread;
-#endif
};
/** Used to hold WHOWAS information
*/
-class WhoWasGroup
+class WhoWasGroup : public classbase
{
public:
char* host;
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 */