+/*
+ * 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;
+};
+UserFunctionHook *UserHookTable = NULL;
+
+
+/*
+ * 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, recptypes *recps);
+ int eventtype;
+};
+MessageFunctionHook *MessageHookTable = NULL;
+
+
+/*
+ * 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);
+};
+DeleteFunctionHook *DeleteHookTable = NULL;
+
+
+/*
+ * 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;
+};
+XmsgFunctionHook *XmsgHookTable = NULL;
+
+
+/*
+ * RoomFunctionHook extensions are used for hooks which impliment room
+ * processing functions when new messages are added.
+ */
+typedef struct RoomFunctionHook RoomFunctionHook;
+struct RoomFunctionHook {
+ RoomFunctionHook *next;
+ int (*fcn_ptr) (struct ctdlroom *);
+};
+RoomFunctionHook *RoomHookTable = NULL;
+
+
+typedef struct SearchFunctionHook SearchFunctionHook;
+struct SearchFunctionHook {
+ SearchFunctionHook *next;
+ void (*fcn_ptr) (int *, long **, const char *);
+ char *name;
+};
+SearchFunctionHook *SearchFunctionHookTable = NULL;
+
+ServiceFunctionHook *ServiceHookTable = NULL;
+
+typedef struct ProtoFunctionHook ProtoFunctionHook;