Silence logging in non-debug usecases. The raspii users gonna love this.
[citadel.git] / citadel / serv_extensions.h
index b2d556377828e0b1ea0b8631dc398e20386a6c46..95f9640335fbc69291385968ee1c75cde731d8a9 100644 (file)
 /*
  */
 
-/*
- * Structure defentitions for hook tables
- */
+typedef void (*CtdlDbgFunction) (const int);
 
-struct LogFunctionHook {
-       struct LogFunctionHook *next;
-       int loglevel;
-       void (*h_function_pointer) (char *);
-};
-extern struct LogFunctionHook *LogHookTable;
+extern int DebugModules;
+#define MDBGLOG(LEVEL) if ((LEVEL != LOG_DEBUG) || (DebugModules != 0))
 
-struct CleanupFunctionHook {
-       struct CleanupFunctionHook *next;
-       void (*h_function_pointer) (void);
-};
-extern struct CleanupFunctionHook *CleanupHookTable;
+#define MOD_syslog(LEVEL, FORMAT, ...)                                 \
+       MDBGLOG(LEVEL) syslog(LEVEL,                                    \
+                             "%s Modules: " FORMAT, IOSTR, __VA_ARGS__)
 
-struct FixedOutputHook {
-       struct FixedOutputHook *next;
-       char content_type[64];
-       void (*h_function_pointer) (char *, int);
-};
-extern struct FixedOutputHook *FixedOutputTable;
+#define MODM_syslog(LEVEL, FORMAT)                             \
+       MDBGLOG(LEVEL) syslog(LEVEL,                            \
+                             "%s Modules: " FORMAT, IOSTR);
 
 
+extern int EnableMarkers;
+#define MARKLOG(LEVEL) if ((LEVEL != LOG_DEBUG) || (EnableMarkers != 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 MARK_syslog(LEVEL, FORMAT, ...)                                        \
+       MARKLOG(LEVEL) syslog(LEVEL,                                    \
+                             "%s: " FORMAT, IOSTR, __VA_ARGS__)
 
+#define MARKM_syslog(LEVEL, FORMAT)                            \
+       MARKLOG(LEVEL) syslog(LEVEL,                            \
+                              "%s: " FORMAT, IOSTR);
 
-/*
- * 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;
+extern int EnableCtlProto;
+#define CTDLLOG(LEVEL) if ((LEVEL != LOG_DEBUG) || (EnableCtlProto != 0))
 
+#define CTDL_syslog(LEVEL, FORMAT, ...)                                        \
+       CTDLLOG(LEVEL) syslog(LEVEL,                                    \
+                             "%s CC[%d]: " FORMAT, IOSTR, CCCID, __VA_ARGS__)
 
-/*
- * 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 CTDLM_syslog(LEVEL, FORMAT)                            \
+       CTDLLOG(LEVEL) syslog(LEVEL,                            \
+                             "%s CC[%d]: " FORMAT, IOSTR, CCCID);
 
 
 
@@ -124,8 +58,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) ;
@@ -134,30 +69,23 @@ 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 **, const char *);
-       char *name;
-};
-extern struct SearchFunctionHook *SearchFunctionHookTable;
-
+typedef struct __LogDebugEntry {
+       CtdlDbgFunction F;
+       const char *Name;
+       long Len;
+       const int *LogP;
+} LogDebugEntry;
+extern HashList *LogDebugEntryTable;
 void initialize_server_extensions(void);
 int DLoader_Exec_Cmd(char *cmdbuf);
 char *Dynamic_Module_Init(void);
@@ -165,6 +93,9 @@ char *Dynamic_Module_Init(void);
 void CtdlDestroySessionHooks(void);
 void PerformSessionHooks(int EventType);
 
+int CheckTDAPVeto (int DBType, StrBuf *ErrMsg);
+void CtdlDestroyTDAPVetoHooks(void);
+
 void CtdlDestroyUserHooks(void);
 void PerformUserHooks(struct ctdluser *usbuf, int EventType);
 
@@ -174,7 +105,7 @@ void CtdlDestroyXmsgHooks(void);
 
 
 void CtdlDestroyMessageHook(void);
-int PerformMessageHooks(struct CtdlMessage *, int EventType);
+int PerformMessageHooks(struct CtdlMessage *, recptypes *recps, int EventType);
 
 
 void CtdlDestroyNetprocHooks(void);
@@ -199,5 +130,10 @@ void CtdlDestroySearchHooks(void);
 void CtdlDestroyFixedOutputHooks(void);
 int PerformFixedOutputHooks(char *, char *, int);
 
+void CtdlRegisterDebugFlagHook(const char *Name, long len, CtdlDbgFunction F, const int *);
+void CtdlSetDebugLogFacilities(const char **Str, long n);
+void CtdlDestroyDebugTable(void);
+
+void netcfg_keyname(char *keybuf, long roomnum);
 
 #endif /* SERV_EXTENSIONS_H */