]> code.citadel.org Git - citadel.git/blobdiff - citadel/serv_extensions.c
* initiall sieve listing support. authentication works now, we at least answer with...
[citadel.git] / citadel / serv_extensions.c
index e62655e1e72f5cc82703b6e9759bf6a1d810e701..cb0618a61cdee24d3affd39ed8a2b499c30ce3af 100644 (file)
@@ -28,7 +28,6 @@
 #include "snprintf.h"
 #endif
 
-struct LogFunctionHook *LogHookTable = NULL;
 struct CleanupFunctionHook *CleanupHookTable = NULL;
 struct SessionFunctionHook *SessionHookTable = NULL;
 struct UserFunctionHook *UserHookTable = NULL;
@@ -37,6 +36,7 @@ struct MessageFunctionHook *MessageHookTable = NULL;
 struct NetprocFunctionHook *NetprocHookTable = NULL;
 struct DeleteFunctionHook *DeleteHookTable = NULL;
 struct ServiceFunctionHook *ServiceHookTable = NULL;
+struct FixedOutputHook *FixedOutputTable = NULL;
 
 struct ProtoFunctionHook {
        void (*handler) (char *cmdbuf);
@@ -102,68 +102,36 @@ int DLoader_Exec_Cmd(char *cmdbuf)
 
 void initialize_server_extensions(void)
 {
-       serv_bio_init();
-       serv_calendar_init();
-       serv_ldap_init();
-       serv_chat_init();
-       serv_expire_init();
-       serv_imap_init();
-       serv_inetcfg_init();
-       serv_listsub_init();
-       serv_mrtg_init();
-       serv_netfilter_init();
-       serv_network_init();
-       serv_newuser_init();
-       serv_pas2_init();
-       serv_pop3_init();
-       serv_rwho_init();
-       serv_smtp_init();
-       serv_spam_init();
-       /* serv_test_init(); */
-       serv_upgrade_init();
-       serv_vandelay_init();
-       serv_vcard_init();
+       lprintf(CTDL_INFO, "%s\n", serv_bio_init());
+       lprintf(CTDL_INFO, "%s\n", serv_calendar_init());
+       lprintf(CTDL_INFO, "%s\n", serv_notes_init());
+       lprintf(CTDL_INFO, "%s\n", serv_ldap_init());
+       lprintf(CTDL_INFO, "%s\n", serv_chat_init());
+       lprintf(CTDL_INFO, "%s\n", serv_expire_init());
+       lprintf(CTDL_INFO, "%s\n", serv_imap_init());
+       lprintf(CTDL_INFO, "%s\n", serv_upgrade_init());
+       lprintf(CTDL_INFO, "%s\n", serv_inetcfg_init());
+       lprintf(CTDL_INFO, "%s\n", serv_listsub_init());
+       lprintf(CTDL_INFO, "%s\n", serv_mrtg_init());
+       lprintf(CTDL_INFO, "%s\n", serv_netfilter_init());
+       lprintf(CTDL_INFO, "%s\n", serv_network_init());
+       lprintf(CTDL_INFO, "%s\n", serv_newuser_init());
+       lprintf(CTDL_INFO, "%s\n", serv_pas2_init());
+       lprintf(CTDL_INFO, "%s\n", serv_pop3_init());
+       lprintf(CTDL_INFO, "%s\n", serv_rwho_init());
+       lprintf(CTDL_INFO, "%s\n", serv_smtp_init());
+       lprintf(CTDL_INFO, "%s\n", serv_spam_init());
+       /* lprintf(CTDL_INFO, "%s\n", serv_test_init()); */
+       lprintf(CTDL_INFO, "%s\n", serv_vandelay_init());
+       lprintf(CTDL_INFO, "%s\n", serv_vcard_init());
+       lprintf(CTDL_INFO, "%s\n", serv_fulltext_init());
+       lprintf(CTDL_INFO, "%s\n", serv_autocompletion_init());
+       lprintf(CTDL_INFO, "%s\n", serv_postfix_tcpdict());
+       lprintf(CTDL_INFO, "%s\n", serv_managesieve_init());
 }
 
 
 
-void CtdlRegisterLogHook(void (*fcn_ptr) (char *), int loglevel)
-{
-
-       struct LogFunctionHook *newfcn;
-
-       newfcn = (struct LogFunctionHook *)
-           malloc(sizeof(struct LogFunctionHook));
-       newfcn->next = LogHookTable;
-       newfcn->h_function_pointer = fcn_ptr;
-       newfcn->loglevel = loglevel;
-       LogHookTable = newfcn;
-
-       lprintf(CTDL_INFO, "Registered a new logging function\n");
-}
-
-
-void CtdlUnregisterLogHook(void (*fcn_ptr) (char *), int loglevel)
-{
-       struct LogFunctionHook *cur, *p;
-
-       for (cur = LogHookTable; cur != NULL; cur = cur->next) {
-               /* This will also remove duplicates if any */
-               while (cur != NULL &&
-                               fcn_ptr == cur->h_function_pointer &&
-                               loglevel == cur->loglevel) {
-                       lprintf(CTDL_INFO, "Unregistered logging function\n");
-                       p = cur->next;
-                       if (cur == LogHookTable) {
-                               LogHookTable = p;
-                       }
-                       free(cur);
-                       cur = p;
-               }
-       }
-}
-
-
 void CtdlRegisterCleanupHook(void (*fcn_ptr) (void))
 {
 
@@ -386,6 +354,59 @@ void CtdlUnregisterDeleteHook(void (*handler)(char *, long) )
 }
 
 
+
+
+void CtdlRegisterFixedOutputHook(char *content_type, void (*handler)(char *, int) )
+{
+       struct FixedOutputHook *newfcn;
+
+       newfcn = (struct FixedOutputHook *)
+           malloc(sizeof(struct FixedOutputHook));
+       newfcn->next = FixedOutputTable;
+       newfcn->h_function_pointer = handler;
+       safestrncpy(newfcn->content_type, content_type, sizeof newfcn->content_type);
+       FixedOutputTable = newfcn;
+
+       lprintf(CTDL_INFO, "Registered a new fixed output function for %s\n", newfcn->content_type);
+}
+
+
+void CtdlUnregisterFixedOutputHook(char *content_type)
+{
+       struct FixedOutputHook *cur, *p;
+
+       for (cur = FixedOutputTable; cur != NULL; cur = cur->next) {
+               /* This will also remove duplicates if any */
+               while (cur != NULL && (!strcasecmp(content_type, cur->content_type))) {
+                       lprintf(CTDL_INFO, "Unregistered fixed output function for %s\n", content_type);
+                       p = cur->next;
+                       if (cur == FixedOutputTable) {
+                               FixedOutputTable = p;
+                       }
+                       free(cur);
+                       cur = p;
+               }
+       }
+}
+
+/* returns nonzero if we found a hook and used it */
+int PerformFixedOutputHooks(char *content_type, char *content, int content_length)
+{
+       struct FixedOutputHook *fcn;
+
+       for (fcn = FixedOutputTable; fcn != NULL; fcn = fcn->next) {
+               if (!strcasecmp(content_type, fcn->content_type)) {
+                       (*fcn->h_function_pointer) (content, content_length);
+                       return(1);
+               }
+       }
+       return(0);
+}
+
+
+
+
+
 void CtdlRegisterXmsgHook(int (*fcn_ptr) (char *, char *, char *), int order)
 {
 
@@ -452,7 +473,8 @@ void CtdlRegisterServiceHook(int tcp_port,
                return;
        }
        else {
-               newfcn->msock = ig_tcp_server(NULL, tcp_port,
+               newfcn->msock = ig_tcp_server(config.c_ip_addr,
+                                       tcp_port,
                                        config.c_maxsessions);
                snprintf(message, sizeof message, "TCP port %d: ", tcp_port);
        }
@@ -518,17 +540,6 @@ void PerformSessionHooks(int EventType)
        }
 }
 
-void PerformLogHooks(int loglevel, char *logmsg)
-{
-       struct LogFunctionHook *fcn;
-
-       for (fcn = LogHookTable; fcn != NULL; fcn = fcn->next) {
-               if (fcn->loglevel >= loglevel) {
-                       (*fcn->h_function_pointer) (logmsg);
-               }
-       }
-}
-
 void PerformUserHooks(struct ctdluser *usbuf, int EventType)
 {
        struct UserFunctionHook *fcn;
@@ -601,6 +612,8 @@ void PerformDeleteHooks(char *room, long msgnum)
 
 
 
+
+
 int PerformXmsgHooks(char *sender, char *recp, char *msg)
 {
        struct XmsgFunctionHook *fcn;