X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=include%2Finspircd.h;h=dbbc0375e732bc8a6be105eb96b446ff28405f93;hb=de97b98a41109a517a8e677bf9b48400038f702d;hp=b7aa7628b7d32c8fe5ef8dba092f6cb8af8da01a;hpb=326191cd160e141958a2b3d536d37dabf7922568;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/inspircd.h b/include/inspircd.h index b7aa7628b..dbbc0375e 100644 --- a/include/inspircd.h +++ b/include/inspircd.h @@ -29,6 +29,7 @@ #include #include #include "inspircd_config.h" +#include "uid.h" #include "users.h" #include "channels.h" #include "socket.h" @@ -38,6 +39,7 @@ #include "snomasks.h" #include "cull_list.h" #include "filelogger.h" +#include "caller.h" /** * Used to define the maximum number of parameters a command may have. @@ -53,15 +55,6 @@ */ #define ETIREDHAMSTERS EAGAIN - -/** - * This define is used in place of strcmp when we - * want to check if a char* string contains only one - * letter. Pretty fast, its just two compares and an - * addition. - */ -#define IS_SINGLE(x,y) ( (*x == y) && (*(x+1) == 0) ) - /** Delete a pointer, and NULL its value */ template inline void DELETE(T* x) @@ -235,6 +228,14 @@ typedef std::vector > FailedPortList; /** A list of ip addresses cross referenced against clone counts */ typedef std::map clonemap; +class InspIRCd; + +DEFINE_HANDLER1(ProcessUserHandler, void, userrec*); +DEFINE_HANDLER1(IsNickHandler, bool, const char*); +DEFINE_HANDLER1(IsIdentHandler, bool, const char*); +DEFINE_HANDLER1(FindDescriptorHandler, userrec*, int); +DEFINE_HANDLER1(FloodQuitUserHandler, void, userrec*); + /* Forward declaration - required */ class XLineManager; @@ -254,6 +255,10 @@ class XLineManager; class CoreExport InspIRCd : public classbase { private: + /** Holds the current UID. Used to generate the next one. + */ + char current_uid[UUID_LENGTH]; + /** Holds a string describing the last module error to occur */ char MODERR[MAXBUF]; @@ -366,13 +371,50 @@ class CoreExport InspIRCd : public classbase */ int time_delta; +#ifdef WIN32 + IPC* WindowsIPC; +#endif + public: + /** Global cull list, will be processed on next iteration + */ + CullList GlobalCulls; + + + /**** Functors ****/ + + ProcessUserHandler HandleProcessUser; + IsNickHandler HandleIsNick; + IsIdentHandler HandleIsIdent; + FindDescriptorHandler HandleFindDescriptor; + FloodQuitUserHandler HandleFloodQuitUser; + /** InspSocket classes pending deletion after being closed. * We don't delete these immediately as this may cause a segmentation fault. */ std::map SocketCull; + /** Globally accessible fake user record. This is used to force mode changes etc across s2s, etc.. bit ugly, but.. better than how this was done in 1.1 + */ + userrec *FakeClient; + + /** Returns the next available UID for this server. + */ + std::string GetUID(); + + /** Find a user in the UUID hash + * @param nick The nickname to find + * @return A pointer to the user, or NULL if the user does not exist + */ + userrec *FindUUID(const std::string &); + + /** Find a user in the UUID hash + * @param nick The nickname to find + * @return A pointer to the user, or NULL if the user does not exist + */ + userrec *FindUUID(const char *); + /** Build the ISUPPORT string by triggering all modules On005Numeric events */ void BuildISupport(); @@ -423,6 +465,11 @@ class CoreExport InspIRCd : public classbase */ user_hash* clientlist; + /** Client list stored by UUID. Contains all clients, and is updated + * automatically by the constructor and destructor of userrec. + */ + user_hash* uuidlist; + /** Channel list, a hash_map containing all channels */ chan_hash* chanlist; @@ -471,9 +518,9 @@ class CoreExport InspIRCd : public classbase */ time_t next_call; - /** Global cull list, will be processed on next iteration + /** Set to the current signal recieved */ - CullList GlobalCulls; + int s_signal; /** Get the current time * Because this only calls time() once every time around the mainloop, @@ -515,7 +562,7 @@ class CoreExport InspIRCd : public classbase * @return There is no actual return value, however upon exit, the user 'cu' may have been * marked for deletion in the global CullList. */ - void ProcessUser(userrec* cu); + caller1 ProcessUser; /** Get the total number of currently loaded modules * @return The number of loaded modules @@ -582,18 +629,28 @@ class CoreExport InspIRCd : public classbase */ void WriteOpers(const std::string &text); - /** Find a nickname in the nick hash + /** Find a user in the nick hash. + * If the user cant be found in the nick hash check the uuid hash * @param nick The nickname to find * @return A pointer to the user, or NULL if the user does not exist */ userrec* FindNick(const std::string &nick); - /** Find a nickname in the nick hash + /** Find a user in the nick hash. + * If the user cant be found in the nick hash check the uuid hash * @param nick The nickname to find * @return A pointer to the user, or NULL if the user does not exist */ userrec* FindNick(const char* nick); + /** Find a user in the nick hash ONLY + */ + userrec* FindNickOnly(const char* nick); + + /** Find a user in the nick hash ONLY + */ + userrec* FindNickOnly(const std::string &nick); + /** Find a channel in the channels hash * @param chan The channel to find * @return A pointer to the channel, or NULL if the channel does not exist @@ -623,8 +680,9 @@ class CoreExport InspIRCd : public classbase /** Determine the right path for, and open, the logfile * @param argv The argv passed to main() initially, used to calculate program path * @param argc The argc passed to main() initially, used to calculate program path + * @return True if the log could be opened, false if otherwise */ - void OpenLog(char** argv, int argc); + bool OpenLog(char** argv, int argc); /** Close the currently open log file */ @@ -659,9 +717,18 @@ class CoreExport InspIRCd : public classbase bool IsChannel(const char *chname); /** Rehash the local server - * @param status This value is unused, and required for signal handler functions */ - static void Rehash(int status); + void Rehash(); + + /** Handles incoming signals after being set + * @param signal the signal recieved + */ + void SignalHandler(int signal); + + /** Sets the signal recieved + * @param signal the signal recieved + */ + static void SetSignal(int signal); /** Causes the server to exit after unloading modules and * closing all open file descriptors. @@ -669,7 +736,7 @@ class CoreExport InspIRCd : public classbase * @param The exit code to give to the operating system * (See the ExitStatus enum for valid values) */ - static void Exit(int status); + void Exit(int status); /** Causes the server to exit immediately with exit code 0. * The status code is required for signal handlers, and ignored. @@ -843,20 +910,20 @@ class CoreExport InspIRCd : public classbase * @param n A nickname to verify * @return True if the nick is valid */ - bool IsNick(const char* n); + caller1 IsNick; /** Return true if an ident is valid * @param An ident to verify * @return True if the ident is valid */ - bool IsIdent(const char* n); + caller1 IsIdent; /** Find a username by their file descriptor. * It is preferred to use this over directly accessing the fd_ref_table array. * @param socket The file descriptor of a user * @return A pointer to the user if the user exists locally on this descriptor */ - userrec* FindDescriptor(int socket); + caller1 FindDescriptor; /** Add a new mode to this server's mode parser * @param mh The modehandler to add @@ -1165,7 +1232,7 @@ class CoreExport InspIRCd : public classbase * fully registered yet, temporarily zline their IP. * @param current user to quit */ - void FloodQuitUser(userrec* current); + caller1 FloodQuitUser; /** Restart the server. * This function will not return. If an error occurs, @@ -1208,6 +1275,11 @@ class CoreExport InspIRCd : public classbase * be culled. */ void InspSocketCull(); + + char* GetReadBuffer() + { + return this->ReadBuffer; + } }; #endif