+
+ /** Sets the write error for a connection. This is done because the actual disconnect
+ * of a client may occur at an inopportune time such as half way through /LIST output.
+ * The WriteErrors of clients are checked at a more ideal time (in the mainloop) and
+ * errored clients purged.
+ */
+ void SetWriteError(const std::string &error);
+
+ /** Returns the write error which last occured on this connection or an empty string
+ * if none occured.
+ */
+ const char* GetWriteError();
+
+ /** Adds to the user's write buffer.
+ * You may add any amount of text up to this users sendq value, if you exceed the
+ * sendq value, SetWriteError() will be called to set the users error string to
+ * "SendQ exceeded", and further buffer adds will be dropped.
+ */
+ void AddWriteBuf(const std::string &data);
+
+ /** Flushes as much of the user's buffer to the file descriptor as possible.
+ * This function may not always flush the entire buffer, rather instead as much of it
+ * as it possibly can. If the send() call fails to send the entire buffer, the buffer
+ * position is advanced forwards and the rest of the data sent at the next call to
+ * this method.
+ */
+ void FlushWriteBuf();
+
+ /** Returns the list of channels this user has been invited to but has not yet joined.
+ */
+ InvitedList* GetInviteList();
+
+ /** Creates a wildcard host.
+ * Takes a buffer to use and fills the given buffer with the host in the format *!*@hostname
+ */
+ char* MakeWildHost();
+
+ /** Creates a host.
+ * Takes a buffer to use and fills the given buffer with the host in the format nick!user@host
+ */
+ void MakeHost(char* nhost);
+
+ /** Shuts down and closes the user's socket
+ */
+ void CloseSocket();
+
+ /** Default destructor
+ */
+ virtual ~userrec();
+
+#ifdef THREADED_DNS
+ /** Thread used for threaded lookups
+ */
+ pthread_t dnsthread;
+#endif
+};
+
+/** Used to hold WHOWAS information
+ */
+class WhoWasGroup : public classbase
+{
+ public:
+ char* host;
+ char* dhost;
+ char* ident;
+ const char* server;
+ char* gecos;
+ time_t signon;
+
+ WhoWasGroup(userrec* user);
+ ~WhoWasGroup();