*/
#define IS_SINGLE(x,y) ( (*x == y) && (*(x+1) == 0) )
-
-
/** Delete a pointer, and NULL its value
*/
template<typename T> inline void DELETE(T* x)
class InspIRCd;
-class CoreExport IsNickHandler : public HandlerBase1<bool, const char*>
-{
- InspIRCd* Server;
- public:
- IsNickHandler(InspIRCd* Srv) : Server(Srv) { }
- virtual ~IsNickHandler() { }
- virtual bool Call(const char*);
-};
-
-class CoreExport IsIdentHandler : public HandlerBase1<bool, const char*>
-{
- InspIRCd* Server;
- public:
- IsIdentHandler(InspIRCd* Srv) : Server(Srv) { }
- virtual ~IsIdentHandler() { }
- virtual bool Call(const char*);
-};
-
+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;
*/
int time_delta;
+#ifdef WIN32
+ IPC* WindowsIPC;
+#endif
+
public:
/** Global cull list, will be processed on next iteration
/**** 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.
*/
time_t next_call;
+ /** Set to the current signal recieved
+ */
+ int s_signal;
+
/** Get the current time
* Because this only calls time() once every time around the mainloop,
* it is much faster than calling time() directly.
* @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<void, userrec*> ProcessUser;
/** Get the total number of currently loaded modules
* @return The number of loaded modules
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.
* @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.
* @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<userrec*, int> FindDescriptor;
/** Add a new mode to this server's mode parser
* @param mh The modehandler to add
* fully registered yet, temporarily zline their IP.
* @param current user to quit
*/
- void FloodQuitUser(userrec* current);
+ caller1<void, userrec*> FloodQuitUser;
/** Restart the server.
* This function will not return. If an error occurs,
* be culled.
*/
void InspSocketCull();
+
+ char* GetReadBuffer()
+ {
+ return this->ReadBuffer;
+ }
};
#endif