/*
- * 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.
#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
*/
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;
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;
}
-void CtdlRegisterMessageHook(int (*handler)(struct CtdlMessage *),
+void CtdlRegisterMessageHook(int (*handler)(struct CtdlMessage *, recptypes *),
int EventType)
{
}
-void CtdlUnregisterMessageHook(int (*handler)(struct CtdlMessage *),
+void CtdlUnregisterMessageHook(int (*handler)(struct CtdlMessage *, recptypes *),
int EventType)
{
MessageFunctionHook *cur, *p, *last;
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 */
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) {
}
}
-int PerformMessageHooks(struct CtdlMessage *msg, int EventType)
+int PerformMessageHooks(struct CtdlMessage *msg, recptypes *recps, int EventType)
{
MessageFunctionHook *fcn = NULL;
int total_retval = 0;
*/
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);
}
}
{
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";
}