#include "inspircd_config.h"
#include "channels.h"
-#include "connection.h"
#include "inspstring.h"
+#include "connection.h"
#include <string>
+#ifdef THREADED_DNS
+#include <pthread.h>
+#endif
#ifndef __USERS_H__
#define __USERS_H__
+
+#include "hashcomp.h"
+#include "cull_list.h"
#define STATUS_OP 4
#define STATUS_HOP 2
#define CC_ALLOW 0
#define CC_DENY 1
+template<typename T> inline string ConvToStr(const T &in);
+
/** Holds a channel name to which a user has been invited.
*/
class Invited : public classbase
{
public:
- char channel[CHANMAX];
+ irc::string channel;
};
int flood;
/** Host mask for this line
*/
- char host[MAXBUF];
+ std::string host;
/** Number of seconds between pings for this line
*/
int pingtime;
/** (Optional) Password for this line
*/
- char pass[MAXBUF];
+ std::string pass;
/** Threshold value for flood disconnect
*/
*/
long recvqmax;
- ConnectClass()
+ ConnectClass() : registration_timeout(0), flood(0), host(""), pingtime(0), pass(""), threshold(0), sendqmax(0), recvqmax(0)
{
- registration_timeout = 0;
- flood = 0;
- pingtime = 0;
- threshold = 0;
- sendqmax = 0;
- recvqmax = 0;
- strlcpy(host,"",MAXBUF);
- strlcpy(pass,"",MAXBUF);
}
};
char nick[NICKMAX];
/** The users ident reply.
+ * Two characters are added to the user-defined limit to compensate for the tilde etc.
*/
- char ident[16];
+ char ident[IDENTMAX+2];
/** The host displayed to non-opers (used for cloaking etc).
* This usually matches the value of userrec::host.
/** The users full name.
*/
- char fullname[128];
+ char fullname[MAXGECOS+1];
/** The user's mode string.
* This may contain any of the following RFC characters: o, w, s, i
* Your module may define other mode characters as it sees fit.
+ * it is limited to length 54, as there can only be a maximum of 52
+ * user modes (26 upper, 26 lower case) a null terminating char, and
+ * an optional + character.
*/
- char modes[MAXBUF];
+ char modes[54];
- ucrec chans[MAXCHANS];
+ std::vector<ucrec> chans;
/** The server the user is connected to.
*/
- char server[256];
+ char* server;
/** The user's away message.
* If this string is empty, the user is not marked as away.
*/
- char awaymsg[512];
-
- /** Stores the result of the last GetFullHost or GetRealHost call.
- * You may use this to increase the speed of use of this class.
- */
- char result[256];
+ char awaymsg[MAXAWAY+1];
/** Number of lines the user can place into the buffer
* (up to the global NetBufferSize bytes) before they
userrec();
- virtual ~userrec() { }
-
/** Returns the full displayed host of the user
* This member function returns the hostname of the user as seen by other users
* on the server, in nick!ident&at;host form.
/** Returns true if a user is invited to a channel.
*/
- virtual bool IsInvited(char* channel);
+ virtual bool IsInvited(irc::string &channel);
/** Adds a channel to a users invite list (invites them to a channel)
*/
- virtual void InviteTo(char* channel);
+ virtual void InviteTo(irc::string &channel);
/** 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.
*/
- virtual void RemoveInvite(char* channel);
+ virtual void RemoveInvite(irc::string &channel);
/** Returns true or false for if a user can execute a privilaged oper command.
* This is done by looking up their oper type from userrec::oper, then referencing
* this to their oper classes and checking the commands they can execute.
*/
- bool HasPermission(char* command);
+ bool HasPermission(std::string &command);
+
+ /** Calls read() to read some data for this user using their fd.
+ */
+ int ReadData(void* buffer, size_t size);
/** This method adds data to the buffer of the user.
* The buffer can grow to any size within limits of the available memory,
*/
void FlushWriteBuf();
+ /** Returns the list of channels this user has been invited to but has not yet joined.
+ */
+ InvitedList* GetInviteList();
+
+ /** Shuts down and closes the user's socket
+ */
+ void CloseSocket();
+
+ virtual ~userrec();
+
+#ifdef THREADED_DNS
+ pthread_t dnsthread;
+#endif
};
/** A lightweight userrec used by WHOWAS
{
public:
char nick[NICKMAX];
- char ident[16];
+ char ident[IDENTMAX+1];
char dhost[160];
char host[160];
- char fullname[128];
+ char fullname[MAXGECOS+1];
char server[256];
time_t signon;
};
+void AddOper(userrec* user);
+void DeleteOper(userrec* user);
+void kill_link(userrec *user,const char* r);
+void kill_link_silent(userrec *user,const char* r);
+void AddWhoWas(userrec* u);
+void AddClient(int socket, char* host, int port, bool iscached, char* ip);
+void FullConnectUser(userrec* user, CullList* Goners);
+//void ConnectUser(userrec *user, CullList* Goners);
+userrec* ReHashNick(char* Old, char* New);
+void force_nickchange(userrec* user,const char* newnick);
+
#endif