]> code.citadel.org Git - citadel.git/blobdiff - citadel/serv_extensions.c
Wait longer (30 seconds instead of 10) to connect to Citadel server when running...
[citadel.git] / citadel / serv_extensions.c
index 425564f19e67e160108ae18d3a7eb4bffa2388ff..f4a963cf7bf9ad2c124449ad8e7b9103dbaffafe 100644 (file)
@@ -1,8 +1,8 @@
 /*
- * Citadel Dynamic Loading Module
+ * Citadel Extension Loader
  * Written by Brian Costello <btx@calyx.net>
  *
- * Copyright (c) 1987-2011 by the citadel.org team
+ * Copyright (c) 1987-2015 by the citadel.org team
  *
  * This program is open source software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License, version 3.
  * GNU General Public License for more details.
  */
 
-#include "sysdep.h"
 #include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <dirent.h>
-#include <string.h>
-#include <limits.h>
-#include <ctype.h>
-#include <syslog.h>
 #include <libcitadel.h>
-#include "citadel.h"
-#include "server.h"
-#include "serv_extensions.h"
-#include "sysdep_decls.h"
-#include "msgbase.h"
-#include "config.h"
 
+#include "sysdep_decls.h"
 #include "modules/crypto/serv_crypto.h"        /* Needed until a universal crypto startup hook is implimented for CtdlStartTLS */
 
+#include "serv_extensions.h"
 #include "ctdl_module.h"
+#include "config.h"
 
 
 int DebugModules = 0;
+int EnableMarkers = 0;
+int EnableCtlProto = 0;
+
 /*
  * Structure defentitions for hook tables
  */
@@ -114,7 +104,7 @@ UserFunctionHook *UserHookTable = NULL;
 typedef struct MessageFunctionHook MessageFunctionHook;
 struct MessageFunctionHook {
        MessageFunctionHook *next;
-       int (*h_function_pointer) (struct CtdlMessage *msg);
+       int (*h_function_pointer) (struct CtdlMessage *msg, recptypes *recps);
        int eventtype;
 };
 MessageFunctionHook *MessageHookTable = NULL;
@@ -311,22 +301,6 @@ int DLoader_Exec_Cmd(char *cmdbuf)
        return 0;
 }
 
-long FourHash(const char *key, long length) 
-{
-       int i;
-       int ret = 0;
-       const unsigned char *ptr = (const unsigned char*)key;
-
-       for (i = 0; i < 4; i++, ptr ++) 
-               ret = (ret << 8) | 
-                       ( ((*ptr >= 'a') &&
-                          (*ptr <= 'z'))? 
-                         *ptr - 'a' + 'A': 
-                         *ptr);
-
-       return ret;
-}
-
 void CtdlRegisterDebugFlagHook(const char *Name, long Len, CtdlDbgFunction F, const int *LogP)
 {
        LogDebugEntry *E;
@@ -743,7 +717,7 @@ void CtdlDestroyUserHooks(void)
 }
 
 
-void CtdlRegisterMessageHook(int (*handler)(struct CtdlMessage *),
+void CtdlRegisterMessageHook(int (*handler)(struct CtdlMessage *, recptypes *),
                                int EventType)
 {
 
@@ -761,7 +735,7 @@ void CtdlRegisterMessageHook(int (*handler)(struct CtdlMessage *),
 }
 
 
-void CtdlUnregisterMessageHook(int (*handler)(struct CtdlMessage *),
+void CtdlUnregisterMessageHook(int (*handler)(struct CtdlMessage *, recptypes *),
                int EventType)
 {
        MessageFunctionHook *cur, *p, *last;
@@ -1144,7 +1118,7 @@ void CtdlRegisterServiceHook(int tcp_port,
        newfcn->ServiceName = ServiceName;
 
        if (sockpath != NULL) {
-               newfcn->msock = ctdl_uds_server(sockpath, config.c_maxsessions, error);
+               newfcn->msock = ctdl_uds_server(sockpath, CtdlGetConfigInt("c_maxsessions"), error);
                snprintf(message, SIZ, "Unix domain socket '%s': ", sockpath);
        }
        else if (tcp_port <= 0) {       /* port -1 to disable */
@@ -1154,12 +1128,12 @@ void CtdlRegisterServiceHook(int tcp_port,
                return;
        }
        else {
-               newfcn->msock = ctdl_tcp_server(config.c_ip_addr,
+               newfcn->msock = ctdl_tcp_server(CtdlGetConfigStr("c_ip_addr"),
                                              tcp_port,
-                                             config.c_maxsessions
+                                             CtdlGetConfigInt("c_maxsessions")
                                              error);
                snprintf(message, SIZ, "TCP port %s:%d: (%s) ", 
-                        config.c_ip_addr, tcp_port, ServiceName);
+                        CtdlGetConfigStr("c_ip_addr"), tcp_port, ServiceName);
        }
 
        if (newfcn->msock > 0) {
@@ -1392,7 +1366,7 @@ void PerformUserHooks(ctdluser *usbuf, int EventType)
        }
 }
 
-int PerformMessageHooks(struct CtdlMessage *msg, int EventType)
+int PerformMessageHooks(struct CtdlMessage *msg, recptypes *recps, int EventType)
 {
        MessageFunctionHook *fcn = NULL;
        int total_retval = 0;
@@ -1410,7 +1384,7 @@ int PerformMessageHooks(struct CtdlMessage *msg, int EventType)
         */
        for (fcn = MessageHookTable; fcn != NULL; fcn = fcn->next) {
                if (fcn->eventtype == EventType) {
-                       total_retval = total_retval + (*fcn->h_function_pointer) (msg);
+                       total_retval = total_retval + (*fcn->h_function_pointer) (msg, recps);
                }
        }
 
@@ -1508,10 +1482,21 @@ void DebugModulesEnable(const int n)
 {
        DebugModules = n;
 }
+void MarkersEnable(const int n)
+{
+       EnableMarkers = n;
+}
+void DebugCitadelProtoEnable(const int n)
+{
+       EnableCtlProto = n;
+}
+
 CTDL_MODULE_INIT(modules)
 {
        if (!threading) {
                CtdlRegisterDebugFlagHook(HKEY("modules"), DebugModulesEnable, &DebugModules);
+               CtdlRegisterDebugFlagHook(HKEY("periodicmarkers"), MarkersEnable, &EnableMarkers);
+               CtdlRegisterDebugFlagHook(HKEY("citadelprotocol"), DebugCitadelProtoEnable, &EnableCtlProto);
        }
        return "modules";
 }