+
+/*
+ * Structure defentitions for hook tables
+ */
+
+typedef struct __LogDebugEntry {
+ CtdlDbgFunction F;
+ const char *Name;
+ long Len;
+ const int *LogP;
+} LogDebugEntry;
+HashList *LogDebugEntryTable = NULL;
+
+typedef struct LogFunctionHook LogFunctionHook;
+struct LogFunctionHook {
+ LogFunctionHook *next;
+ int loglevel;
+ void (*h_function_pointer) (char *);
+};
+extern LogFunctionHook *LogHookTable;
+
+typedef struct FixedOutputHook FixedOutputHook;
+struct FixedOutputHook {
+ FixedOutputHook *next;
+ char content_type[64];
+ void (*h_function_pointer) (char *, int);
+};
+extern FixedOutputHook *FixedOutputTable;
+
+
+
+/*
+ * SessionFunctionHook extensions are used for any type of hook for which
+ * the context in which it's being called (which is determined by the event
+ * type) will make it obvious for the hook function to know where to look for
+ * pertinent data.
+ */
+typedef struct SessionFunctionHook SessionFunctionHook;
+struct SessionFunctionHook {
+ SessionFunctionHook *next;
+ void (*h_function_pointer) (void);
+ int eventtype;
+};
+extern SessionFunctionHook *SessionHookTable;
+
+
+/*
+ * UserFunctionHook extensions are used for any type of hook which implements
+ * an operation on a user or username (potentially) other than the one
+ * operating the current session.
+ */
+typedef struct UserFunctionHook UserFunctionHook;
+struct UserFunctionHook {
+ UserFunctionHook *next;
+ void (*h_function_pointer) (struct ctdluser *usbuf);
+ int eventtype;
+};
+extern UserFunctionHook *UserHookTable;
+
+/*
+ * MessageFunctionHook extensions are used for hooks which implement handlers
+ * for various types of message operations (save, read, etc.)
+ */
+typedef struct MessageFunctionHook MessageFunctionHook;
+struct MessageFunctionHook {
+ MessageFunctionHook *next;
+ int (*h_function_pointer) (struct CtdlMessage *msg);
+ int eventtype;
+};
+extern MessageFunctionHook *MessageHookTable;
+
+
+/*
+ * NetprocFunctionHook extensions are used for hooks which implement handlers
+ * for incoming network messages.
+ */
+typedef struct NetprocFunctionHook NetprocFunctionHook;
+struct NetprocFunctionHook {
+ NetprocFunctionHook *next;
+ int (*h_function_pointer) (struct CtdlMessage *msg, char *target_room);
+};
+extern NetprocFunctionHook *NetprocHookTable;
+
+
+/*
+ * DeleteFunctionHook extensions are used for hooks which get called when a
+ * message is about to be deleted.
+ */
+typedef struct DeleteFunctionHook DeleteFunctionHook;
+struct DeleteFunctionHook {
+ DeleteFunctionHook *next;
+ void (*h_function_pointer) (char *target_room, long msgnum);
+};
+extern DeleteFunctionHook *DeleteHookTable;
+
+
+/*
+ * ExpressMessageFunctionHook extensions are used for hooks which implement
+ * the sending of an instant message through various channels. Any function
+ * registered should return the number of recipients to whom the message was
+ * successfully transmitted.
+ */
+typedef struct XmsgFunctionHook XmsgFunctionHook;
+struct XmsgFunctionHook {
+ XmsgFunctionHook *next;
+ int (*h_function_pointer) (char *, char *, char *, char *);
+ int order;
+};
+extern XmsgFunctionHook *XmsgHookTable;
+