]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - include/users.h
Remove InspIRCd* parameters and fields
[user/henk/code/inspircd.git] / include / users.h
index 9023d7728b24cbc9f6f6e22aa5fb485c90317ede..763d45c57d3ce2105a597184054e76bb559faef9 100644 (file)
 #define __USERS_H__
 
 #include "socket.h"
+#include "inspsocket.h"
 #include "dns.h"
 #include "mode.h"
 
-/** Channel status for a user
- */
-enum ChanStatus {
-       /** Op */
-       STATUS_OP     = 4,
-       /** Halfop */
-       STATUS_HOP    = 2,
-       /** Voice */
-       STATUS_VOICE  = 1,
-       /** None */
-       STATUS_NORMAL = 0
-};
-
 /** connect class types
  */
 enum ClassTypes {
@@ -208,7 +196,7 @@ typedef std::vector<ConnectClass*> ClassVector;
 
 /** Typedef for the list of user-channel records for a user
  */
-typedef std::map<Channel*, char> UserChanList;
+typedef std::set<Channel*> UserChanList;
 
 /** Shorthand for an iterator into a UserChanList
  */
@@ -218,33 +206,12 @@ typedef UserChanList::iterator UCListIter;
  */
 class User;
 
-/** Visibility data for a user.
- * If a user has a non-null instance of this class in their User,
- * then it is used to determine if this user is visible to other users
- * or not.
- */
-class CoreExport VisData
-{
- public:
-       /** Create a visdata
-        */
-       VisData();
-       /** Destroy a visdata
-        */
-       virtual ~VisData();
-       /** Is this user visible to some other user?
-        * @param user The other user to compare to
-        * @return true True if the user is visible to the other user, false if not
-        */
-       virtual bool VisibleTo(User* 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
  * user's nickname and hostname.
  */
-class CoreExport User : public EventHandler
+class CoreExport User : public StreamSocket
 {
  private:
        /** A list of channels the user has a pending invite to.
@@ -289,21 +256,14 @@ class CoreExport User : public EventHandler
        std::bitset<64> AllowedChanModes;
 
  public:
-       /** Pointer to creator.
-        * This is required to make use of core functions
-        * from within the User class.
-        */
-       InspIRCd* ServerInstance;
+       static LocalIntExt NICKForced;
+       static LocalStringExt OperQuit;
 
        /** Contains a pointer to the connect class a user is on from - this will be NULL for remote connections.
         * The pointer is guarenteed to *always* be valid. :)
         */
        ConnectClass *MyClass;
 
-       /** User visibility state, see definition of VisData.
-        */
-       VisData* Visibility;
-
        /** Hostname of connection.
         * This should be valid as per RFC1035.
         */
@@ -339,6 +299,10 @@ class CoreExport User : public EventHandler
         */
        time_t lastping;
 
+       /** Time that the object was instantiated (used for TS calculation etc)
+       */
+       time_t age;
+
        /** Time the connection was created, set in the constructor. This
         * may be different from the time the user's classbase object was
         * created.
@@ -442,25 +406,6 @@ class CoreExport User : public EventHandler
         */
        std::string password;
 
-       /** User's receive queue.
-        * Lines from the IRCd awaiting processing are stored here.
-        * Upgraded april 2005, old system a bit hairy.
-        */
-       std::string recvq;
-
-       /** User's send queue.
-        * Lines waiting to be sent are stored here until their buffer is flushed.
-        */
-       std::string sendq;
-
-       /** Message user will quit with. Not to be set externally.
-        */
-       std::string quitmsg;
-
-       /** Quit message shown to opers - not to be set externally.
-        */
-       std::string operquitmsg;
-
        /** Whether or not to send an snotice about this user's quitting
         */
        bool quietquit;
@@ -525,7 +470,7 @@ class CoreExport User : public EventHandler
         * @param Instance Creator instance
         * @param uid User UUID, or empty to allocate one automatically
         */
-       User(InspIRCd* Instance, const std::string &uid = "");
+       User(const std::string &uid = "");
 
        /** Check if the user matches a G or K line, and disconnect them if they do.
         * @param doZline True if ZLines should be checked (if IP has changed since initial connect)
@@ -641,44 +586,6 @@ class CoreExport User : public EventHandler
         */
        bool HasModePermission(unsigned char mode, ModeType type);
 
-       /** Calls read() to read some data for this user using their fd.
-        * @param buffer The buffer to read into
-        * @param size The size of data to read
-        * @return The number of bytes read, or -1 if an error occured.
-        */
-       int ReadData(void* buffer, size_t size);
-
-       /** This method adds data to the read buffer of the user.
-        * The buffer can grow to any size within limits of the available memory,
-        * managed by the size of a std::string, however if any individual line in
-        * the buffer grows over 600 bytes in length (which is 88 chars over the
-        * RFC-specified limit per line) then the method will return false and the
-        * text will not be inserted.
-        * @param a The string to add to the users read buffer
-        * @return True if the string was successfully added to the read buffer
-        */
-       bool AddBuffer(const std::string &a);
-
-       /** This method returns true if the buffer contains at least one carriage return
-        * character (e.g. one complete line may be read)
-        * @return True if there is at least one complete line in the users buffer
-        */
-       bool BufferIsReady();
-
-       /** This function clears the entire buffer by setting it to an empty string.
-        */
-       void ClearBuffer();
-
-       /** This method returns the first available string at the tail end of the buffer
-        * and advances the tail end of the buffer past the string. This means it is
-        * a one way operation in a similar way to strtok(), and multiple calls return
-        * multiple lines if they are available. The results of this function if there
-        * are no lines to be read are unknown, always use BufferIsReady() to check if
-        * it is ok to read the buffer before calling GetBuffer().
-        * @return The string at the tail end of this users buffer
-        */
-       std::string GetBuffer();
-
        /** 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, the user will be removed, and further buffer adds will be dropped.
@@ -686,14 +593,6 @@ class CoreExport User : public EventHandler
         */
        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.
         * @return A list of channels the user is invited to
         */
@@ -717,12 +616,6 @@ class CoreExport User : public EventHandler
         */
        const std::string& MakeHostIP();
 
-       /** Shuts down and closes the user's socket
-        * This will not cause the user to be deleted. Use InspIRCd::QuitUser for this,
-        * which will call CloseSocket() for you.
-        */
-       void CloseSocket();
-
        /** Add the user to WHOWAS system
         */
        void AddToWhoWas();
@@ -910,12 +803,12 @@ class CoreExport User : public EventHandler
         */
        void SendAll(const char* command, const char* text, ...) CUSTOM_PRINTF(3, 4);
 
-       /** Compile a channel list for this user, and send it to the user 'source'
-        * Used internally by WHOIS
-        * @param The user to send the channel list to if it is not too long
+       /** Compile a channel list for this user.  Used internally by WHOIS
+        * @param source The user to prepare the channel list for
+        * @param spy Whether to return the spy channel list rather than the normal one
         * @return This user's channel list
         */
-       std::string ChannelList(User* source);
+       std::string ChannelList(User* source, bool spy);
 
        /** Split the channel list in cl which came from dest, and spool it to this user
         * Used internally by WHOIS
@@ -948,16 +841,6 @@ class CoreExport User : public EventHandler
         */
        void ShowRULES();
 
-       /** Set oper-specific quit message shown to opers only when the user quits
-        * (overrides any sent by QuitUser)
-        */
-       void SetOperQuit(const std::string &oquit);
-
-       /** Get oper-specific quit message shown only to opers when the user quits.
-        * (overrides any sent by QuitUser)
-        */
-       const std::string& GetOperQuit();
-
        /** Increases a user's command penalty by a set amount.
         */
        void IncreasePenalty(int increase);
@@ -966,16 +849,13 @@ class CoreExport User : public EventHandler
         */
        void DecreasePenalty(int decrease);
 
-       /** Handle socket event.
-        * From EventHandler class.
-        * @param et Event type
-        * @param errornum Error number for EVENT_ERROR events
-        */
-       void HandleEvent(EventType et, int errornum = 0);
+       void OnDataReady();
+       void OnError(BufferedSocketError error);
 
        /** Default destructor
         */
        virtual ~User();
+       virtual void cull();
 };
 
 /** Derived from Resolver, and performs user forward/reverse lookups.
@@ -1000,7 +880,7 @@ class CoreExport UserResolver : public Resolver
         * @param qt The query type
         * @param cache Modified by the constructor if the result was cached
         */
-       UserResolver(InspIRCd* Instance, User* user, std::string to_resolve, QueryType qt, bool &cache);
+       UserResolver(User* user, std::string to_resolve, QueryType qt, bool &cache);
 
        /** Called on successful lookup
         * @param result Result string
@@ -1016,7 +896,4 @@ class CoreExport UserResolver : public Resolver
        void OnError(ResolverError e, const std::string &errormessage);
 };
 
-/* Configuration callbacks */
-//class ServerConfig;
-
 #endif