LOGGING: make module infrastructure logging configurable
[citadel.git] / citadel / serv_extensions.h
index 9a658b0366acc062061099be6738116c1a58685a..f4f720144d090da94eb6d5d816dddf35cbe31cb8 100644 (file)
@@ -1,4 +1,3 @@
-/* $Id$ */
 
 #ifndef SERV_EXTENSIONS_H
 #define SERV_EXTENSIONS_H
 /*
  */
 
-/*
- * 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;
-
+typedef void (*CtdlDbgFunction) (const int);
 
+extern int DebugModules;
+#define MDBGLOG(LEVEL) if ((LEVEL != LOG_DEBUG) || (DebugModules != 0))
 
-/*
- * 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;
+#define MOD_syslog(LEVEL, FORMAT, ...)                         \
+       MDBGLOG(LEVEL) syslog(LEVEL,                            \
+                             "Modules: " FORMAT, __VA_ARGS__)
 
-
-/*
- * 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;
+#define MODM_syslog(LEVEL, FORMAT)                     \
+       MDBGLOG(LEVEL) syslog(LEVEL,                    \
+                             "Modules: " FORMAT);
 
 
 
@@ -125,8 +35,9 @@ 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.
  */
+typedef struct ServiceFunctionHook ServiceFunctionHook;
 struct ServiceFunctionHook {
-       struct ServiceFunctionHook *next;
+       ServiceFunctionHook *next;
        int tcp_port;
        char *sockpath;
        void (*h_greeting_function) (void) ;
@@ -135,30 +46,16 @@ struct ServiceFunctionHook {
        int msock;
        const char* ServiceName; /* this is just for debugging and logging purposes. */
 };
-extern struct ServiceFunctionHook *ServiceHookTable;
-
+extern 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 *);
+typedef struct CleanupFunctionHook CleanupFunctionHook;
+struct CleanupFunctionHook {
+       CleanupFunctionHook *next;
+       void (*h_function_pointer) (void);
 };
-extern struct RoomFunctionHook *RoomHookTable;
-
+extern CleanupFunctionHook *CleanupHookTable;
 
 
-struct SearchFunctionHook {
-       struct SearchFunctionHook *next;
-       void (*fcn_ptr) (int *, long **, char *);
-       char *name;
-};
-extern struct SearchFunctionHook *SearchFunctionHookTable;
-
 void initialize_server_extensions(void);
 int DLoader_Exec_Cmd(char *cmdbuf);
 char *Dynamic_Module_Init(void);
@@ -195,9 +92,13 @@ void CtdlDestroyProtoHooks(void);
 
 void CtdlDestroyServiceHook(void);
 
+void CtdlDestroySearchHooks(void);
+
 void CtdlDestroyFixedOutputHooks(void);
 int PerformFixedOutputHooks(char *, char *, int);
 
-void CtdlModuleDoSearch(int *num_msgs, long **search_msgs, char *search_string, char *func_name);
+void CtdlRegisterDebugFlagHook(const char *Name, long len, CtdlDbgFunction F, const int *);
+void CtdlSetDebugLogFacilities(const char **Str, long n);
+void CtdlDestroyDebugTable(void);
 
 #endif /* SERV_EXTENSIONS_H */