* Citadel Extension Loader
* Originally written by Brian Costello <btx@calyx.net>
*
- * Copyright (c) 1987-2019 by the citadel.org team
+ * Copyright (c) 1987-2021 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.
/*
* RoomFunctionHook extensions are used for hooks which impliment room
- * processing functions when new messages are added EG. SIEVE.
+ * processing functions when new messages are added.
*/
typedef struct RoomFunctionHook RoomFunctionHook;
struct RoomFunctionHook {
};
SearchFunctionHook *SearchFunctionHookTable = NULL;
-CleanupFunctionHook *CleanupHookTable = NULL;
-CleanupFunctionHook *EVCleanupHookTable = NULL;
-
ServiceFunctionHook *ServiceHookTable = NULL;
typedef struct ProtoFunctionHook ProtoFunctionHook;
syslog(LOG_DEBUG, "extensions: registered server command %s (%s)", cmd, desc);
}
-void CtdlDestroyProtoHooks(void)
-{
-
- DeleteHash(&ProtoHookList);
-}
-
-
-void CtdlRegisterCleanupHook(void (*fcn_ptr) (void))
-{
-
- CleanupFunctionHook *newfcn;
-
- newfcn = (CleanupFunctionHook *)
- malloc(sizeof(CleanupFunctionHook));
- newfcn->next = CleanupHookTable;
- newfcn->h_function_pointer = fcn_ptr;
- CleanupHookTable = newfcn;
-
- syslog(LOG_DEBUG, "extensions: registered a new cleanup function");
-}
-
-
-void CtdlUnregisterCleanupHook(void (*fcn_ptr) (void))
-{
- CleanupFunctionHook *cur, *p, *last;
- last = NULL;
- cur = CleanupHookTable;
- while (cur != NULL)
- {
- if (fcn_ptr == cur->h_function_pointer)
- {
- syslog(LOG_DEBUG, "extensions: unregistered cleanup function");
- p = cur->next;
-
- free(cur);
- cur = NULL;
-
- if (last != NULL)
- last->next = p;
- else
- CleanupHookTable = p;
- cur = p;
- }
- else {
- last = cur;
- cur = cur->next;
- }
- }
-}
-
-
-void CtdlDestroyCleanupHooks(void)
-{
- CleanupFunctionHook *cur, *p;
-
- cur = CleanupHookTable;
- while (cur != NULL)
- {
- syslog(LOG_DEBUG, "extensions: destroyed cleanup function");
- p = cur->next;
- free(cur);
- cur = p;
- }
- CleanupHookTable = NULL;
-}
-
-void CtdlRegisterEVCleanupHook(void (*fcn_ptr) (void))
-{
-
- CleanupFunctionHook *newfcn;
-
- newfcn = (CleanupFunctionHook *)
- malloc(sizeof(CleanupFunctionHook));
- newfcn->next = EVCleanupHookTable;
- newfcn->h_function_pointer = fcn_ptr;
- EVCleanupHookTable = newfcn;
-
- syslog(LOG_DEBUG, "extensions: registered a new cleanup function");
-}
-
-
-void CtdlUnregisterEVCleanupHook(void (*fcn_ptr) (void))
-{
- CleanupFunctionHook *cur, *p, *last;
- last = NULL;
- cur = EVCleanupHookTable;
- while (cur != NULL)
- {
- if (fcn_ptr == cur->h_function_pointer)
- {
- syslog(LOG_DEBUG, "extensions: unregistered cleanup function");
- p = cur->next;
-
- free(cur);
- cur = NULL;
-
- if (last != NULL)
- last->next = p;
- else
- EVCleanupHookTable = p;
- cur = p;
- }
- else {
- last = cur;
- cur = cur->next;
- }
- }
-}
-
-
-void CtdlDestroyEVCleanupHooks(void)
-{
- CleanupFunctionHook *cur, *p;
-
- cur = EVCleanupHookTable;
- while (cur != NULL)
- {
- syslog(LOG_DEBUG, "extensions: destroyed cleanup function");
- p = cur->next;
- cur->h_function_pointer();
- free(cur);
- cur = p;
- }
- EVCleanupHookTable = NULL;
-}
-
-
-
void CtdlRegisterSessionHook(void (*fcn_ptr) (void), int EventType, int Priority)
{
}
}
-void CtdlDestroySessionHooks(void)
-{
- SessionFunctionHook *cur, *p;
-
- cur = SessionHookTable;
- while (cur != NULL)
- {
- syslog(LOG_DEBUG, "extensions: destroyed session function");
- p = cur->next;
- free(cur);
- cur = p;
- }
- SessionHookTable = NULL;
-}
-
void CtdlRegisterUserHook(void (*fcn_ptr) (ctdluser *), int EventType)
{
}
}
-void CtdlDestroyUserHooks(void)
-{
- UserFunctionHook *cur, *p;
-
- cur = UserHookTable;
- while (cur != NULL)
- {
- syslog(LOG_DEBUG, "extensions: destroyed user function");
- p = cur->next;
- free(cur);
- cur = p;
- }
- UserHookTable = NULL;
-}
-
void CtdlRegisterMessageHook(int (*handler)(struct CtdlMessage *, recptypes *), int EventType)
{
}
}
-void CtdlDestroyMessageHook(void)
-{
- MessageFunctionHook *cur, *p;
-
- cur = MessageHookTable;
- while (cur != NULL)
- {
- syslog(LOG_DEBUG, "extensions: destroyed message function (type %d)", cur->eventtype);
- p = cur->next;
- free(cur);
- cur = p;
- }
- MessageHookTable = NULL;
-}
-
void CtdlRegisterRoomHook(int (*fcn_ptr)(struct ctdlroom *))
{
}
-void CtdlDestroyRoomHooks(void)
-{
- RoomFunctionHook *cur, *p;
-
- cur = RoomHookTable;
- while (cur != NULL)
- {
- syslog(LOG_DEBUG, "extensions: destroyed room function");
- p = cur->next;
- free(cur);
- cur = p;
- }
- RoomHookTable = NULL;
-}
-
-
void CtdlRegisterDeleteHook(void (*handler)(char *, long) )
{
DeleteFunctionHook *newfcn;
}
-void CtdlDestroyDeleteHooks(void)
-{
- DeleteFunctionHook *cur, *p;
-
- cur = DeleteHookTable;
- while (cur != NULL)
- {
- syslog(LOG_DEBUG, "extensions: destroyed delete function");
- p = cur->next;
- free(cur);
- cur = p;
- }
- DeleteHookTable = NULL;
-}
-
-
void CtdlRegisterFixedOutputHook(char *content_type, void (*handler)(char *, int) )
{
FixedOutputHook *newfcn;
}
}
-void CtdlDestroyFixedOutputHooks(void)
-{
- FixedOutputHook *cur, *p;
-
- cur = FixedOutputTable;
- while (cur != NULL)
- {
- syslog(LOG_DEBUG, "extensions: destroyed fixed output function for %s", cur->content_type);
- p = cur->next;
- free(cur);
- cur = p;
-
- }
- FixedOutputTable = NULL;
-}
/* returns nonzero if we found a hook and used it */
int PerformFixedOutputHooks(char *content_type, char *content, int content_length)
}
-void CtdlDestroyXmsgHooks(void)
-{
- XmsgFunctionHook *cur, *p;
-
- cur = XmsgHookTable;
- while (cur != NULL)
- {
- syslog(LOG_DEBUG, "extensions: destroyed x-msg function (priority %d)", cur->order);
- p = cur->next;
- free(cur);
- cur = p;
- }
- XmsgHookTable = NULL;
-}
-
-
void CtdlRegisterServiceHook(int tcp_port,
char *sockpath,
void (*h_greeting_function) (void),
{
ServiceFunctionHook *newfcn;
char *message;
- char error[SIZ];
- strcpy(error, "");
newfcn = (ServiceFunctionHook *) malloc(sizeof(ServiceFunctionHook));
message = (char*) malloc (SIZ + SIZ);
newfcn->ServiceName = ServiceName;
if (sockpath != NULL) {
- newfcn->msock = ctdl_uds_server(sockpath, CtdlGetConfigInt("c_maxsessions"), error);
+ newfcn->msock = ctdl_uds_server(sockpath, CtdlGetConfigInt("c_maxsessions"));
snprintf(message, SIZ, "extensions: unix domain socket '%s': ", sockpath);
}
else if (tcp_port <= 0) { /* port -1 to disable */
return;
}
else {
- newfcn->msock = ctdl_tcp_server(CtdlGetConfigStr("c_ip_addr"),
- tcp_port,
- CtdlGetConfigInt("c_maxsessions"),
- error);
+ newfcn->msock = ctdl_tcp_server(CtdlGetConfigStr("c_ip_addr"), tcp_port, CtdlGetConfigInt("c_maxsessions"));
snprintf(message, SIZ, "extensions: TCP port %s:%d: (%s) ",
CtdlGetConfigStr("c_ip_addr"), tcp_port, ServiceName);
}
syslog(LOG_INFO, "%s", message);
}
else {
- AddPortError(message, error);
+ AddPortError(message, "failed");
strcat(message, "FAILED.");
syslog(LOG_ERR, "%s", message);
free(newfcn);
}
-void CtdlDestroyServiceHook(void)
-{
- const char *Text;
- ServiceFunctionHook *cur, *p;
-
- cur = ServiceHookTable;
- while (cur != NULL)
- {
- if (cur->msock != -1)
- {
- close(cur->msock);
- Text = "Closed";
- }
- else
- {
- Text = " Not closing again";
- }
-
- if (cur->sockpath) {
- syslog(LOG_INFO, "extensions: %s UNIX domain socket %s", Text, cur->sockpath);
- unlink(cur->sockpath);
- } else if (cur->tcp_port) {
- syslog(LOG_INFO, "extensions: %s TCP port %d", Text, cur->tcp_port);
- } else {
- syslog(LOG_INFO, "extensions: destroyed service \"%s\"", cur->ServiceName);
- }
- p = cur->next;
- free(cur);
- cur = p;
- }
- ServiceHookTable = NULL;
-}
-
void CtdlRegisterSearchFuncHook(void (*fcn_ptr)(int *, long **, const char *), char *name)
{
SearchFunctionHook *newfcn;
}
}
-void CtdlDestroySearchHooks(void)
-{
- SearchFunctionHook *cur, *p;
-
- cur = SearchFunctionHookTable;
- SearchFunctionHookTable = NULL;
- while (cur != NULL) {
- p = cur->next;
- free(cur);
- cur = p;
- }
-}
void CtdlModuleDoSearch(int *num_msgs, long **search_msgs, const char *search_string, const char *func_name)
{