From d830658a2f15ef25917d6d39347206644455bc3a Mon Sep 17 00:00:00 2001 From: Dave West Date: Tue, 20 Nov 2007 20:03:22 +0000 Subject: [PATCH] Source clean up. Moved all hook code into serv_extensions.c and serv_extensions.h since this is more logical --- citadel/serv_extensions.c | 28 +++---- citadel/serv_extensions.h | 157 +++++++++++++++++++++++++++++++++++++- citadel/server.h | 143 ---------------------------------- 3 files changed, 168 insertions(+), 160 deletions(-) diff --git a/citadel/serv_extensions.c b/citadel/serv_extensions.c index e248d50a1..5f65dbc7b 100644 --- a/citadel/serv_extensions.c +++ b/citadel/serv_extensions.c @@ -190,6 +190,20 @@ void AddPortError(char *Port, char *ErrorMessage) } +int DLoader_Exec_Cmd(char *cmdbuf) +{ + struct ProtoFunctionHook *p; + + for (p = ProtoHookList; p; p = p->next) { + if (!strncasecmp(cmdbuf, p->cmd, 4)) { + p->handler(&cmdbuf[5]); + return 1; + } + } + return 0; +} + + void CtdlRegisterProtoHook(void (*handler) (char *), char *cmd, char *desc) { struct ProtoFunctionHook *p; @@ -257,20 +271,6 @@ void CtdlDestroyProtoHooks(void) } -int DLoader_Exec_Cmd(char *cmdbuf) -{ - struct ProtoFunctionHook *p; - - for (p = ProtoHookList; p; p = p->next) { - if (!strncasecmp(cmdbuf, p->cmd, 4)) { - p->handler(&cmdbuf[5]); - return 1; - } - } - return 0; -} - - void CtdlRegisterCleanupHook(void (*fcn_ptr) (void)) { diff --git a/citadel/serv_extensions.h b/citadel/serv_extensions.h index 0d18582bc..a9e150b97 100644 --- a/citadel/serv_extensions.h +++ b/citadel/serv_extensions.h @@ -10,12 +10,163 @@ * We'll probably start moving these to a more sane location in the near * future. For now, this just shuts up the compiler. */ -void serv_calendar_destroy(void); -char *serv_test_init(void); -char *serv_postfix_tcpdict(void); +//void serv_calendar_destroy(void); +//char *serv_test_init(void); +//char *serv_postfix_tcpdict(void); /* */ + + +/* + * 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; + + + +/* + * 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; + + +/* + * 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 *); + int order; +}; +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. + */ +struct ServiceFunctionHook { + struct ServiceFunctionHook *next; + int tcp_port; + char *sockpath; + void (*h_greeting_function) (void) ; + void (*h_command_function) (void) ; + void (*h_async_function) (void) ; + int msock; + const char* ServiceName; /* this is just for debugging and logging purposes. */ +}; +extern struct 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 *); +}; +extern struct RoomFunctionHook *RoomHookTable; + + +struct MaintenanceThreadHook { + struct MaintenanceThreadHook *next; + char *name; + void *(*fcn_ptr) (void *arg); + pthread_t MaintenanceThread_tid; +}; +extern struct MaintenanceThreadHook *MaintenanceThreadHookTable; + + +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); diff --git a/citadel/server.h b/citadel/server.h index bcc38014b..02b0de9c7 100644 --- a/citadel/server.h +++ b/citadel/server.h @@ -297,44 +297,6 @@ struct cdbdata { }; - -/* Structures and declarations for function hooks of various types */ - -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; - - - -/* - * 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; - /* * Event types can't be enum'ed, because they must remain consistent between * builds (to allow for binary modules built somewhere else) @@ -352,73 +314,14 @@ extern struct SessionFunctionHook *SessionHookTable; #define EVT_TIMER 50 /* Timer events are called once per minute and are not tied to any session */ #define EVT_HOUSE 51 /* as needed houskeeping stuff */ -/* - * 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; #define EVT_PURGEUSER 100 /* Deleting a user */ #define EVT_NEWUSER 102 /* Creating a user */ -/* - * 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; - #define EVT_BEFOREREAD 200 #define EVT_BEFORESAVE 201 #define EVT_AFTERSAVE 202 #define EVT_SMTPSCAN 203 /* called before submitting a msg from SMTP */ - - -/* - * 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 *); - int order; -}; -extern struct XmsgFunctionHook *XmsgHookTable; - /* Priority levels for paging functions (lower is better) */ enum { XMSG_PRI_LOCAL, /* Other users on -this- server */ @@ -428,52 +331,6 @@ enum { }; - -/* - * ServiceFunctionHook extensions are used for hooks which implement various - * protocols (either on TCP or on unix domain sockets) directly in the Citadel server. - */ -struct ServiceFunctionHook { - struct ServiceFunctionHook *next; - int tcp_port; - char *sockpath; - void (*h_greeting_function) (void) ; - void (*h_command_function) (void) ; - void (*h_async_function) (void) ; - int msock; - const char* ServiceName; /* this is just for debugging and logging purposes. */ -}; -extern struct 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 *); -}; -extern struct RoomFunctionHook *RoomHookTable; - - -struct MaintenanceThreadHook { - struct MaintenanceThreadHook *next; - char *name; - void *(*fcn_ptr) (void *arg); - pthread_t MaintenanceThread_tid; -}; -extern struct MaintenanceThreadHook *MaintenanceThreadHookTable; - - -struct SearchFunctionHook { - struct SearchFunctionHook *next; - void (*fcn_ptr) (int *, long **, char *); - char *name; -}; -extern struct SearchFunctionHook *SearchFunctionHookTable; - - /* Defines the relationship of a user to a particular room */ struct visit { long v_roomnum; -- 2.30.2