X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fserv_extensions.c;h=86037aa5d107672f95d02a846b81da7452af8fdb;hb=5c39ca8a3c875df98163fed8923c258f21bb3f66;hp=568d9a3ae0275032f977296793b288dabe8aa912;hpb=0475c981817d12900332693297a77a9ae7168129;p=citadel.git diff --git a/citadel/serv_extensions.c b/citadel/serv_extensions.c index 568d9a3ae..86037aa5d 100644 --- a/citadel/serv_extensions.c +++ b/citadel/serv_extensions.c @@ -2,7 +2,7 @@ * Citadel Extension Loader * Written by Brian Costello * - * Copyright (c) 1987-2015 by the citadel.org team + * Copyright (c) 1987-2017 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. @@ -13,19 +13,22 @@ * GNU General Public License for more details. */ +#include +#include #include +#include #include - #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 */ @@ -51,19 +54,6 @@ FixedOutputHook *FixedOutputTable = NULL; -/* - * TDAPVetoHookFunctionHook extensions are used for any type of hook for which - * may prevent the autopurger to run for this specific data class. - * the function should at least LOG_INFO that it does so. - */ -typedef struct TDAPVetoHookFunctionHook TDAPVetoHookFunctionHook; -struct TDAPVetoHookFunctionHook { - TDAPVetoHookFunctionHook *next; - int Priority; - int (*h_function_pointer) (StrBuf *); - int eventtype; -}; -TDAPVetoHookFunctionHook *TDAPVetoHookTable = NULL; @@ -257,8 +247,8 @@ void LogPrintMessages(long err) StrBufAppendBufPlain(Message, HKEY("\n\n"), 0); StrBufAppendBufPlain(Message, CKEY(ErrGeneral[3]), 0); - MOD_syslog(LOG_EMERG, "%s", ChrPtr(Message)); - MOD_syslog(LOG_EMERG, "%s", ErrSubject); + syslog(LOG_EMERG, "extensions: %s", ChrPtr(Message)); + syslog(LOG_EMERG, "extensions: %s", ErrSubject); quickie_message("Citadel", NULL, NULL, AIDEROOM, ChrPtr(Message), FMT_FIXED, ErrSubject); FreeStrBuf(&Message); @@ -299,22 +289,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; @@ -400,7 +374,7 @@ void CtdlRegisterProtoHook(void (*handler) (char *), char *cmd, char *desc) p->desc = desc; Put(ProtoHookList, cmd, 4, p, NULL); - MOD_syslog(LOG_DEBUG, "Registered server command %s (%s)\n", cmd, desc); + syslog(LOG_DEBUG, "extensions: registered server command %s (%s)", cmd, desc); } void CtdlDestroyProtoHooks(void) @@ -421,7 +395,7 @@ void CtdlRegisterCleanupHook(void (*fcn_ptr) (void)) newfcn->h_function_pointer = fcn_ptr; CleanupHookTable = newfcn; - MODM_syslog(LOG_DEBUG, "Registered a new cleanup function\n"); + syslog(LOG_DEBUG, "extensions: registered a new cleanup function"); } @@ -434,7 +408,7 @@ void CtdlUnregisterCleanupHook(void (*fcn_ptr) (void)) { if (fcn_ptr == cur->h_function_pointer) { - MODM_syslog(LOG_DEBUG, "Unregistered cleanup function\n"); + syslog(LOG_DEBUG, "extensions: unregistered cleanup function"); p = cur->next; free(cur); @@ -461,7 +435,7 @@ void CtdlDestroyCleanupHooks(void) cur = CleanupHookTable; while (cur != NULL) { - MODM_syslog(LOG_DEBUG, "Destroyed cleanup function\n"); + syslog(LOG_DEBUG, "extensions: destroyed cleanup function"); p = cur->next; free(cur); cur = p; @@ -480,7 +454,7 @@ void CtdlRegisterEVCleanupHook(void (*fcn_ptr) (void)) newfcn->h_function_pointer = fcn_ptr; EVCleanupHookTable = newfcn; - MODM_syslog(LOG_DEBUG, "Registered a new cleanup function\n"); + syslog(LOG_DEBUG, "extensions: registered a new cleanup function"); } @@ -493,7 +467,7 @@ void CtdlUnregisterEVCleanupHook(void (*fcn_ptr) (void)) { if (fcn_ptr == cur->h_function_pointer) { - MODM_syslog(LOG_DEBUG, "Unregistered cleanup function\n"); + syslog(LOG_DEBUG, "extensions: unregistered cleanup function"); p = cur->next; free(cur); @@ -520,7 +494,7 @@ void CtdlDestroyEVCleanupHooks(void) cur = EVCleanupHookTable; while (cur != NULL) { - MODM_syslog(LOG_DEBUG, "Destroyed cleanup function\n"); + syslog(LOG_DEBUG, "extensions: destroyed cleanup function"); p = cur->next; cur->h_function_pointer(); free(cur); @@ -529,74 +503,7 @@ void CtdlDestroyEVCleanupHooks(void) EVCleanupHookTable = NULL; } -void CtdlRegisterTDAPVetoHook(int (*fcn_ptr) (StrBuf*), int EventType, int Priority) -{ - TDAPVetoHookFunctionHook *newfcn; - - newfcn = (TDAPVetoHookFunctionHook *) - malloc(sizeof(TDAPVetoHookFunctionHook)); - newfcn->Priority = Priority; - newfcn->h_function_pointer = fcn_ptr; - newfcn->eventtype = EventType; - - TDAPVetoHookFunctionHook **pfcn; - pfcn = &TDAPVetoHookTable; - while ((*pfcn != NULL) && - ((*pfcn)->Priority < newfcn->Priority) && - ((*pfcn)->next != NULL)) - pfcn = &(*pfcn)->next; - - newfcn->next = *pfcn; - *pfcn = newfcn; - - MOD_syslog(LOG_DEBUG, "Registered a new TDAP Veto function (type %d Priority %d)\n", - EventType, Priority); -} - -void CtdlUnregisterTDAPVetoHook(int (*fcn_ptr) (StrBuf*), int EventType) -{ - TDAPVetoHookFunctionHook *cur, *p, *last; - last = NULL; - cur = TDAPVetoHookTable; - while (cur != NULL) { - if ((fcn_ptr == cur->h_function_pointer) && - (EventType == cur->eventtype)) - { - MOD_syslog(LOG_DEBUG, "Unregistered TDAP Veto function (type %d)\n", - EventType); - p = cur->next; - - free(cur); - cur = NULL; - - if (last != NULL) - last->next = p; - else - TDAPVetoHookTable = p; - cur = p; - } - else { - last = cur; - cur = cur->next; - } - } -} - -void CtdlDestroyTDAPVetoHooks(void) -{ - TDAPVetoHookFunctionHook *cur, *p; - - cur = TDAPVetoHookTable; - while (cur != NULL) - { - MODM_syslog(LOG_DEBUG, "Destroyed TDAP Veto function\n"); - p = cur->next; - free(cur); - cur = p; - } - TDAPVetoHookTable = NULL; -} void CtdlRegisterSessionHook(void (*fcn_ptr) (void), int EventType, int Priority) @@ -619,8 +526,7 @@ void CtdlRegisterSessionHook(void (*fcn_ptr) (void), int EventType, int Priority newfcn->next = *pfcn; *pfcn = newfcn; - MOD_syslog(LOG_DEBUG, "Registered a new session function (type %d Priority %d)\n", - EventType, Priority); + syslog(LOG_DEBUG, "extensions: registered a new session function (type %d Priority %d)", EventType, Priority); } @@ -633,8 +539,7 @@ void CtdlUnregisterSessionHook(void (*fcn_ptr) (void), int EventType) if ((fcn_ptr == cur->h_function_pointer) && (EventType == cur->eventtype)) { - MOD_syslog(LOG_DEBUG, "Unregistered session function (type %d)\n", - EventType); + syslog(LOG_DEBUG, "extensions: unregistered session function (type %d)", EventType); p = cur->next; free(cur); @@ -660,7 +565,7 @@ void CtdlDestroySessionHooks(void) cur = SessionHookTable; while (cur != NULL) { - MODM_syslog(LOG_DEBUG, "Destroyed session function\n"); + syslog(LOG_DEBUG, "extensions: destroyed session function"); p = cur->next; free(cur); cur = p; @@ -681,7 +586,7 @@ void CtdlRegisterUserHook(void (*fcn_ptr) (ctdluser *), int EventType) newfcn->eventtype = EventType; UserHookTable = newfcn; - MOD_syslog(LOG_DEBUG, "Registered a new user function (type %d)\n", + syslog(LOG_DEBUG, "extensions: registered a new user function (type %d)", EventType); } @@ -695,8 +600,7 @@ void CtdlUnregisterUserHook(void (*fcn_ptr) (struct ctdluser *), int EventType) if ((fcn_ptr == cur->h_function_pointer) && (EventType == cur->eventtype)) { - MOD_syslog(LOG_DEBUG, "Unregistered user function (type %d)\n", - EventType); + syslog(LOG_DEBUG, "extensions: unregistered user function (type %d)", EventType); p = cur->next; free(cur); @@ -722,7 +626,7 @@ void CtdlDestroyUserHooks(void) cur = UserHookTable; while (cur != NULL) { - MODM_syslog(LOG_DEBUG, "Destroyed user function \n"); + syslog(LOG_DEBUG, "extensions: destroyed user function"); p = cur->next; free(cur); cur = p; @@ -744,8 +648,7 @@ void CtdlRegisterMessageHook(int (*handler)(struct CtdlMessage *, recptypes *), newfcn->eventtype = EventType; MessageHookTable = newfcn; - MOD_syslog(LOG_DEBUG, "Registered a new message function (type %d)\n", - EventType); + syslog(LOG_DEBUG, "extensions: registered a new message function (type %d)", EventType); } @@ -759,8 +662,7 @@ void CtdlUnregisterMessageHook(int (*handler)(struct CtdlMessage *, recptypes *) if ((handler == cur->h_function_pointer) && (EventType == cur->eventtype)) { - MOD_syslog(LOG_DEBUG, "Unregistered message function (type %d)\n", - EventType); + syslog(LOG_DEBUG, "extensions: unregistered message function (type %d)", EventType); p = cur->next; free(cur); cur = NULL; @@ -785,7 +687,7 @@ void CtdlDestroyMessageHook(void) cur = MessageHookTable; while (cur != NULL) { - MOD_syslog(LOG_DEBUG, "Destroyed message function (type %d)\n", cur->eventtype); + syslog(LOG_DEBUG, "extensions: destroyed message function (type %d)", cur->eventtype); p = cur->next; free(cur); cur = p; @@ -804,7 +706,7 @@ void CtdlRegisterRoomHook(int (*fcn_ptr)(struct ctdlroom *)) newfcn->fcn_ptr = fcn_ptr; RoomHookTable = newfcn; - MODM_syslog(LOG_DEBUG, "Registered a new room function\n"); + syslog(LOG_DEBUG, "extensions: registered a new room function"); } @@ -816,7 +718,7 @@ void CtdlUnregisterRoomHook(int (*fcn_ptr)(struct ctdlroom *)) while (cur != NULL) { if (fcn_ptr == cur->fcn_ptr) { - MODM_syslog(LOG_DEBUG, "Unregistered room function\n"); + syslog(LOG_DEBUG, "extensions: unregistered room function"); p = cur->next; free(cur); @@ -843,7 +745,7 @@ void CtdlDestroyRoomHooks(void) cur = RoomHookTable; while (cur != NULL) { - MODM_syslog(LOG_DEBUG, "Destroyed room function\n"); + syslog(LOG_DEBUG, "extensions: destroyed room function"); p = cur->next; free(cur); cur = p; @@ -861,7 +763,7 @@ void CtdlRegisterNetprocHook(int (*handler)(struct CtdlMessage *, char *) ) newfcn->h_function_pointer = handler; NetprocHookTable = newfcn; - MODM_syslog(LOG_DEBUG, "Registered a new netproc function\n"); + syslog(LOG_DEBUG, "extensions: registered a new netproc function"); } @@ -875,7 +777,7 @@ void CtdlUnregisterNetprocHook(int (*handler)(struct CtdlMessage *, char *) ) while (cur != NULL) { if (handler == cur->h_function_pointer) { - MODM_syslog(LOG_DEBUG, "Unregistered netproc function\n"); + syslog(LOG_DEBUG, "extensions: unregistered netproc function"); p = cur->next; free(cur); if (last != NULL) { @@ -900,7 +802,7 @@ void CtdlDestroyNetprocHooks(void) cur = NetprocHookTable; while (cur != NULL) { - MODM_syslog(LOG_DEBUG, "Destroyed netproc function\n"); + syslog(LOG_DEBUG, "extensions: destroyed netproc function"); p = cur->next; free(cur); cur = p; @@ -919,7 +821,7 @@ void CtdlRegisterDeleteHook(void (*handler)(char *, long) ) newfcn->h_function_pointer = handler; DeleteHookTable = newfcn; - MODM_syslog(LOG_DEBUG, "Registered a new delete function\n"); + syslog(LOG_DEBUG, "extensions: registered a new delete function"); } @@ -932,7 +834,7 @@ void CtdlUnregisterDeleteHook(void (*handler)(char *, long) ) while (cur != NULL) { if (handler == cur->h_function_pointer ) { - MODM_syslog(LOG_DEBUG, "Unregistered delete function\n"); + syslog(LOG_DEBUG, "extensions: unregistered delete function"); p = cur->next; free(cur); @@ -949,6 +851,8 @@ void CtdlUnregisterDeleteHook(void (*handler)(char *, long) ) } } } + + void CtdlDestroyDeleteHooks(void) { DeleteFunctionHook *cur, *p; @@ -956,7 +860,7 @@ void CtdlDestroyDeleteHooks(void) cur = DeleteHookTable; while (cur != NULL) { - MODM_syslog(LOG_DEBUG, "Destroyed delete function\n"); + syslog(LOG_DEBUG, "extensions: destroyed delete function"); p = cur->next; free(cur); cur = p; @@ -965,8 +869,6 @@ void CtdlDestroyDeleteHooks(void) } - - void CtdlRegisterFixedOutputHook(char *content_type, void (*handler)(char *, int) ) { FixedOutputHook *newfcn; @@ -978,7 +880,7 @@ void CtdlRegisterFixedOutputHook(char *content_type, void (*handler)(char *, int safestrncpy(newfcn->content_type, content_type, sizeof newfcn->content_type); FixedOutputTable = newfcn; - MOD_syslog(LOG_DEBUG, "Registered a new fixed output function for %s\n", newfcn->content_type); + syslog(LOG_DEBUG, "extensions: registered a new fixed output function for %s", newfcn->content_type); } @@ -991,10 +893,7 @@ void CtdlUnregisterFixedOutputHook(char *content_type) while (cur != NULL) { /* This will also remove duplicates if any */ if (!strcasecmp(content_type, cur->content_type)) { - MOD_syslog(LOG_DEBUG, - "Unregistered fixed output function for %s\n", - content_type); - + syslog(LOG_DEBUG, "extensions: unregistered fixed output function for %s", content_type); p = cur->next; free(cur); @@ -1020,7 +919,7 @@ void CtdlDestroyFixedOutputHooks(void) cur = FixedOutputTable; while (cur != NULL) { - MOD_syslog(LOG_DEBUG, "Destroyed fixed output function for %s\n", cur->content_type); + syslog(LOG_DEBUG, "extensions: destroyed fixed output function for %s", cur->content_type); p = cur->next; free(cur); cur = p; @@ -1044,9 +943,6 @@ int PerformFixedOutputHooks(char *content_type, char *content, int content_lengt } - - - void CtdlRegisterXmsgHook(int (*fcn_ptr) (char *, char *, char *, char *), int order) { @@ -1057,7 +953,7 @@ void CtdlRegisterXmsgHook(int (*fcn_ptr) (char *, char *, char *, char *), int o newfcn->order = order; newfcn->h_function_pointer = fcn_ptr; XmsgHookTable = newfcn; - MOD_syslog(LOG_DEBUG, "Registered a new x-msg function (priority %d)\n", order); + syslog(LOG_DEBUG, "extensions: registered a new x-msg function (priority %d)", order); } @@ -1071,16 +967,16 @@ void CtdlUnregisterXmsgHook(int (*fcn_ptr) (char *, char *, char *, char *), int /* This will also remove duplicates if any */ if (fcn_ptr == cur->h_function_pointer && order == cur->order) { - MOD_syslog(LOG_DEBUG, "Unregistered x-msg function " - "(priority %d)\n", order); + syslog(LOG_DEBUG, "extensions: unregistered x-msg function (priority %d)", order); p = cur->next; free(cur); - if (last != NULL) + if (last != NULL) { last->next = p; - else + } + else { XmsgHookTable = p; - + } cur = p; } else { @@ -1090,6 +986,7 @@ void CtdlUnregisterXmsgHook(int (*fcn_ptr) (char *, char *, char *, char *), int } } + void CtdlDestroyXmsgHooks(void) { XmsgFunctionHook *cur, *p; @@ -1097,10 +994,8 @@ void CtdlDestroyXmsgHooks(void) cur = XmsgHookTable; while (cur != NULL) { - MOD_syslog(LOG_DEBUG, "Destroyed x-msg function " - "(priority %d)\n", cur->order); + syslog(LOG_DEBUG, "extensions: destroyed x-msg function (priority %d)", cur->order); p = cur->next; - free(cur); cur = p; } @@ -1133,10 +1028,10 @@ void CtdlRegisterServiceHook(int tcp_port, if (sockpath != NULL) { newfcn->msock = ctdl_uds_server(sockpath, CtdlGetConfigInt("c_maxsessions"), error); - snprintf(message, SIZ, "Unix domain socket '%s': ", sockpath); + snprintf(message, SIZ, "extensions: unix domain socket '%s': ", sockpath); } else if (tcp_port <= 0) { /* port -1 to disable */ - MOD_syslog(LOG_INFO, "Service %s has been manually disabled, skipping\n", ServiceName); + syslog(LOG_INFO, "extensions: service %s has been manually disabled, skipping", ServiceName); free (message); free(newfcn); return; @@ -1146,19 +1041,19 @@ void CtdlRegisterServiceHook(int tcp_port, tcp_port, CtdlGetConfigInt("c_maxsessions"), error); - snprintf(message, SIZ, "TCP port %s:%d: (%s) ", + snprintf(message, SIZ, "extensions: TCP port %s:%d: (%s) ", CtdlGetConfigStr("c_ip_addr"), tcp_port, ServiceName); } if (newfcn->msock > 0) { ServiceHookTable = newfcn; strcat(message, "registered."); - MOD_syslog(LOG_INFO, "%s\n", message); + syslog(LOG_INFO, "%s", message); } else { AddPortError(message, error); strcat(message, "FAILED."); - MOD_syslog(LOG_CRIT, "%s\n", message); + syslog(LOG_ERR, "%s", message); free(newfcn); } free(message); @@ -1186,13 +1081,12 @@ void CtdlUnregisterServiceHook(int tcp_port, char *sockpath, if (cur->msock > 0) close(cur->msock); if (sockpath) { - MOD_syslog(LOG_INFO, "Closed UNIX domain socket %s\n", - sockpath); + syslog(LOG_INFO, "extensions: closed UNIX domain socket %s", sockpath); unlink(sockpath); } else if (tcp_port) { - MOD_syslog(LOG_INFO, "Closed TCP port %d\n", tcp_port); + syslog(LOG_INFO, "extensions: closed TCP port %d", tcp_port); } else { - MOD_syslog(LOG_INFO, "Unregistered service \"%s\"\n", cur->ServiceName); + syslog(LOG_INFO, "extensions: unregistered service \"%s\"", cur->ServiceName); } p = cur->next; free(cur); @@ -1223,19 +1117,17 @@ void CtdlShutdownServiceHooks(void) close(cur->msock); cur->msock = -1; if (cur->sockpath != NULL){ - MOD_syslog(LOG_INFO, "[%s] Closed UNIX domain socket %s\n", - cur->ServiceName, - cur->sockpath); + syslog(LOG_INFO, "extensions: [%s] Closed UNIX domain socket %s", cur->ServiceName, cur->sockpath); unlink(cur->sockpath); } else { - MOD_syslog(LOG_INFO, "[%s] closing service\n", - cur->ServiceName); + syslog(LOG_INFO, "extensions: [%s] closing service", cur->ServiceName); } } cur = cur->next; } } + void CtdlDestroyServiceHook(void) { const char *Text; @@ -1255,14 +1147,12 @@ void CtdlDestroyServiceHook(void) } if (cur->sockpath) { - MOD_syslog(LOG_INFO, "%s UNIX domain socket %s\n", - Text, - cur->sockpath); + syslog(LOG_INFO, "extensions: %s UNIX domain socket %s", Text, cur->sockpath); unlink(cur->sockpath); } else if (cur->tcp_port) { - MOD_syslog(LOG_INFO, "%s TCP port %d\n", Text, cur->tcp_port); + syslog(LOG_INFO, "extensions: %s TCP port %d", Text, cur->tcp_port); } else { - MOD_syslog(LOG_INFO, "Destroyed service \"%s\"\n", cur->ServiceName); + syslog(LOG_INFO, "extensions: destroyed service \"%s\"", cur->ServiceName); } p = cur->next; free(cur); @@ -1286,7 +1176,7 @@ void CtdlRegisterSearchFuncHook(void (*fcn_ptr)(int *, long **, const char *), c newfcn->fcn_ptr = fcn_ptr; SearchFunctionHookTable = newfcn; - MOD_syslog(LOG_DEBUG, "Registered a new search function (%s)\n", name); + syslog(LOG_DEBUG, "extensions: registered a new search function (%s)", name); } void CtdlUnregisterSearchFuncHook(void (*fcn_ptr)(int *, long **, const char *), char *name) @@ -1300,7 +1190,7 @@ void CtdlUnregisterSearchFuncHook(void (*fcn_ptr)(int *, long **, const char *), (cur->fcn_ptr == fcn_ptr) && name && !strcmp(name, cur->name)) { - MOD_syslog(LOG_DEBUG, "Unregistered search function(%s)\n", name); + syslog(LOG_DEBUG, "extensions: unregistered search function(%s)", name); p = cur->next; free (cur); if (last != NULL) @@ -1342,18 +1232,6 @@ void CtdlModuleDoSearch(int *num_msgs, long **search_msgs, const char *search_st *num_msgs = 0; } -int CheckTDAPVeto (int DBType, StrBuf *ErrMsg) -{ - int Result = 0; - TDAPVetoHookFunctionHook *fcn = NULL; - - for (fcn = TDAPVetoHookTable; (fcn != NULL) && (Result == 0); fcn = fcn->next) { - if (fcn->eventtype == DBType) { - Result = (*fcn->h_function_pointer) (ErrMsg); - } - } - return Result; -} void PerformSessionHooks(int EventType) { @@ -1387,10 +1265,8 @@ int PerformMessageHooks(struct CtdlMessage *msg, recptypes *recps, int EventType /* Other code may elect to protect this message from server-side * handlers; if this is the case, don't do anything. - MOD_syslog(LOG_DEBUG, "** Event type is %d, flags are %d\n", EventType, msg->cm_flags); */ if (msg->cm_flags & CM_SKIP_HOOKS) { - MODM_syslog(LOG_DEBUG, "Skipping hooks\n"); return(0); } @@ -1415,7 +1291,7 @@ int PerformRoomHooks(struct ctdlroom *target_room) RoomFunctionHook *fcn; int total_retval = 0; - MOD_syslog(LOG_DEBUG, "Performing room hooks for <%s>\n", target_room->QRname); + syslog(LOG_DEBUG, "extensions: performing room hooks for <%s>", target_room->QRname); for (fcn = RoomHookTable; fcn != NULL; fcn = fcn->next) { total_retval = total_retval + (*fcn->fcn_ptr) (target_room); @@ -1496,10 +1372,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"; }