Logging: add timestamps for eventdriven IO
[citadel.git] / citadel / serv_extensions.h
index 6f6543ab93a9d1a7fc94d52acc6d04d3b44f678d..b2d556377828e0b1ea0b8631dc398e20386a6c46 100644 (file)
@@ -1,4 +1,3 @@
-/* $Id$ */
 
 #ifndef SERV_EXTENSIONS_H
 #define SERV_EXTENSIONS_H
  * We'll probably start moving these to a more sane location in the near
  * future.  For now, this just shuts up the compiler.
  */
-char *serv_bio_init(void);
-char *serv_calendar_init(void);
-char *serv_notes_init(void);
-char *serv_ldap_init(void);
-char *serv_chat_init(void);
-char *serv_expire_init(void);
-char *serv_imap_init(void);
-char *serv_inetcfg_init(void);
-char *serv_listsub_init(void);
-char *serv_mrtg_init(void);
-char *serv_netfilter_init(void);
-char *serv_network_init(void);
-char *serv_newuser_init(void);
-char *serv_pas2_init(void);
-char *serv_pop3_init(void);
-char *serv_rwho_init(void);
-char *serv_smtp_init(void);
-char *serv_spam_init(void);
-char *serv_test_init(void);
-char *serv_upgrade_init(void);
-char *serv_vandelay_init(void);
-char *serv_vcard_init(void);
-char *serv_fulltext_init(void);
+//void serv_calendar_destroy(void);
+//char *serv_test_init(void);
+//char *serv_postfix_tcpdict(void);
 /*
  */
 
+/*
+ * Structure defentitions for hook tables
+ */
+
+struct LogFunctionHook {
+       struct LogFunctionHook *next;
+       int loglevel;
+       void (*h_function_pointer) (char *);
+};
+extern struct LogFunctionHook *LogHookTable;
+
+struct CleanupFunctionHook {
+       struct CleanupFunctionHook *next;
+       void (*h_function_pointer) (void);
+};
+extern struct CleanupFunctionHook *CleanupHookTable;
+
+struct FixedOutputHook {
+       struct FixedOutputHook *next;
+       char content_type[64];
+       void (*h_function_pointer) (char *, int);
+};
+extern struct 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.
+ */
+struct SessionFunctionHook {
+       struct SessionFunctionHook *next;
+       void (*h_function_pointer) (void);
+       int eventtype;
+};
+extern struct 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.
+ */
+struct UserFunctionHook {
+       struct UserFunctionHook *next;
+       void (*h_function_pointer) (struct ctdluser *usbuf);
+       int eventtype;
+};
+extern struct UserFunctionHook *UserHookTable;
+
+/*
+ * MessageFunctionHook extensions are used for hooks which implement handlers
+ * for various types of message operations (save, read, etc.)
+ */
+struct MessageFunctionHook {
+       struct MessageFunctionHook *next;
+       int (*h_function_pointer) (struct CtdlMessage *msg);
+       int eventtype;
+};
+extern struct MessageFunctionHook *MessageHookTable;
+
+
+/*
+ * NetprocFunctionHook extensions are used for hooks which implement handlers
+ * for incoming network messages.
+ */
+struct NetprocFunctionHook {
+       struct NetprocFunctionHook *next;
+       int (*h_function_pointer) (struct CtdlMessage *msg, char *target_room);
+};
+extern struct NetprocFunctionHook *NetprocHookTable;
+
+
+/*
+ * DeleteFunctionHook extensions are used for hooks which get called when a
+ * message is about to be deleted.
+ */
+struct DeleteFunctionHook {
+       struct DeleteFunctionHook *next;
+       void (*h_function_pointer) (char *target_room, long msgnum);
+};
+extern struct 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.
+ */
+struct XmsgFunctionHook {
+       struct XmsgFunctionHook *next;
+       int (*h_function_pointer) (char *, char *, char *, char *);
+       int order;
+};
+extern struct XmsgFunctionHook *XmsgHookTable;
+
+
+
+
+/*
+ * ServiceFunctionHook extensions are used for hooks which implement various
+ * protocols (either on TCP or on unix domain sockets) directly in the Citadel server.
+ */
+struct ServiceFunctionHook {
+       struct ServiceFunctionHook *next;
+       int tcp_port;
+       char *sockpath;
+       void (*h_greeting_function) (void) ;
+       void (*h_command_function) (void) ;
+       void (*h_async_function) (void) ;
+       int msock;
+       const char* ServiceName; /* this is just for debugging and logging purposes. */
+};
+extern struct ServiceFunctionHook *ServiceHookTable;
+
+
+/*
+ * RoomFunctionHook extensions are used for hooks which impliment room
+ * processing functions when new messages are added EG. SIEVE.
+ */
+struct RoomFunctionHook {
+       struct RoomFunctionHook *next;
+       int (*fcn_ptr) (struct ctdlroom *);
+};
+extern struct RoomFunctionHook *RoomHookTable;
+
+
+
+struct SearchFunctionHook {
+       struct SearchFunctionHook *next;
+       void (*fcn_ptr) (int *, long **, const char *);
+       char *name;
+};
+extern struct SearchFunctionHook *SearchFunctionHookTable;
+
 void initialize_server_extensions(void);
 int DLoader_Exec_Cmd(char *cmdbuf);
 char *Dynamic_Module_Init(void);
 
-void CtdlRegisterSessionHook(void (*fcn_ptr)(void), int EventType);
-void CtdlUnregisterSessionHook(void (*fcn_ptr)(void), int EventType);
+void CtdlDestroySessionHooks(void);
 void PerformSessionHooks(int EventType);
 
-void CtdlRegisterUserHook(void (*fcn_ptr)(struct ctdluser *), int EventType);
-void CtdlUnregisterUserHook(void (*fcn_ptr)(struct ctdluser *), int EventType);
+void CtdlDestroyUserHooks(void);
 void PerformUserHooks(struct ctdluser *usbuf, int EventType);
 
-void CtdlRegisterXmsgHook(int (*fcn_ptr)(char *, char *, char *), int order);
-void CtdlUnregisterXmsgHook(int (*fcn_ptr)(char *, char *, char *), int order);
-int PerformXmsgHooks(char *, char *, char *);
+int PerformXmsgHooks(char *, char *, char *, char *);
+void CtdlDestroyXmsgHooks(void);
+
 
 
-void CtdlRegisterMessageHook(int (*handler)(struct CtdlMessage *),
-                                                       int EventType);
-void CtdlUnregisterMessageHook(int (*handler)(struct CtdlMessage *),
-                                                       int EventType);
+void CtdlDestroyMessageHook(void);
 int PerformMessageHooks(struct CtdlMessage *, int EventType);
 
 
-void CtdlRegisterNetprocHook(int (*handler)(struct CtdlMessage *, char *) );
-void CtdlUnregisterNetprocHook(int (*handler)(struct CtdlMessage *, char *) );
+void CtdlDestroyNetprocHooks(void);
 int PerformNetprocHooks(struct CtdlMessage *, char *);
 
-void CtdlRegisterDeleteHook(void (*handler)(char *, long) );
-void CtdlUnregisterDeleteHook(void (*handler)(char *, long) );
+void CtdlDestroyRoomHooks(void);
+int PerformRoomHooks(struct ctdlroom *);
+
+
+void CtdlDestroyDeleteHooks(void);
 void PerformDeleteHooks(char *, long);
 
 
-void CtdlRegisterCleanupHook(void (*fcn_ptr)(void));
-void CtdlUnregisterCleanupHook(void (*fcn_ptr)(void));
-void CtdlRegisterProtoHook(void (*handler)(char *), char *cmd, char *desc);
-void CtdlUnregisterProtoHook(void (*handler)(char *), char *cmd);
-void CtdlRegisterServiceHook(int tcp_port,
-                       char *sockpath,
-                        void (*h_greeting_function) (void),
-                        void (*h_command_function) (void),
-                        void (*h_async_function) (void)
-       ) ;
-void CtdlUnregisterServiceHook(int tcp_port,
-                       char *sockpath,
-                        void (*h_greeting_function) (void),
-                        void (*h_command_function) (void),
-                        void (*h_async_function) (void)
-       ) ;
+void CtdlDestroyCleanupHooks(void);
+
+void CtdlDestroyProtoHooks(void);
+
+void CtdlDestroyServiceHook(void);
+
+void CtdlDestroySearchHooks(void);
+
+void CtdlDestroyFixedOutputHooks(void);
+int PerformFixedOutputHooks(char *, char *, int);
+
 
 #endif /* SERV_EXTENSIONS_H */