* added a comment infront of the svn modifieable returns. Now it will be me listed...
authorWilfried Göesgens <willi@citadel.org>
Sun, 15 Jul 2007 21:14:10 +0000 (21:14 +0000)
committerWilfried Göesgens <willi@citadel.org>
Sun, 15 Jul 2007 21:14:10 +0000 (21:14 +0000)
31 files changed:
citadel/msgbase.c
citadel/serv_autocompletion.c
citadel/serv_bio.c
citadel/serv_calendar.c
citadel/serv_chat.c
citadel/serv_expire.c
citadel/serv_extensions.c
citadel/serv_extensions.h
citadel/serv_fulltext.c
citadel/serv_funambol.c
citadel/serv_imap.c
citadel/serv_inetcfg.c
citadel/serv_ldap.c
citadel/serv_listsub.c
citadel/serv_managesieve.c
citadel/serv_mrtg.c
citadel/serv_netfilter.c
citadel/serv_network.c
citadel/serv_newuser.c
citadel/serv_notes.c
citadel/serv_pas2.c
citadel/serv_pop3.c
citadel/serv_rwho.c
citadel/serv_sieve.c
citadel/serv_smtp.c
citadel/serv_spam.c
citadel/serv_test.c
citadel/serv_upgrade.c
citadel/serv_vandelay.c
citadel/serv_vcard.c
citadel/server.h

index 97397b52b7511c6ce7487678712dc7e3ad10085e..9e092a47b3177fbf258b381e7d8d75959527463e 100644 (file)
@@ -2143,15 +2143,22 @@ int CtdlSaveMsgPointersInRoom(char *roomname, long newmsgidlist[], int num_newms
                lprintf(CTDL_DEBUG, "CtdlSaveMsgPointerInRoom() skips repl checks\n");
        }
 
+#if 0
        /* Submit this room for net processing */
        network_queue_room(&CC->room, NULL);
+#endif
+
+       /* Submit this room for processing by hooks */
+       PerformRoomHooks(&CC->room);
 
+#if 0
 #ifdef HAVE_LIBSIEVE
        /* If this is someone's inbox, submit the room for sieve processing */
        if (!strcasecmp(&CC->room.QRname[11], MAILROOM)) {
                sieve_queue_room(&CC->room);
        }
 #endif /* HAVE_LIBSIEVE */
+#endif
 
        /* Go back to the room we were in before we wandered here... */
        getroom(&CC->room, hold_rm);
index 994b4e8339cf0ef03ffca39ffed698196d8b7876..239985c655b294cd9193f12c121b7546cb58a7b6 100644 (file)
@@ -252,5 +252,7 @@ void cmd_auto(char *argbuf) {
 
 char *serv_autocompletion_init(void) {
        CtdlRegisterProtoHook(cmd_auto, "AUTO", "Do recipient autocompletion");
+
+       /* return our Subversion id for the Log */
        return "$Id$";
 }
index a39e4e31deea76d4e033a75e3b012dcea7d3d986..19820a956090175d66801541fdce7de50bb55a79 100644 (file)
@@ -139,6 +139,8 @@ char *serv_bio_init(void)
         CtdlRegisterProtoHook(cmd_ebio, "EBIO", "Enter your bio");
         CtdlRegisterProtoHook(cmd_rbio, "RBIO", "Read a user's bio");
         CtdlRegisterProtoHook(cmd_lbio, "LBIO", "List users with bios");
+
+       /* return our Subversion id for the Log */
         return "$Id$";
 }
 
index 8fb05e78be7bc78e71ed6ff7f3c316d2d7d44deb..2171f381b173aa332c0e1c2fd6f94ee417bd8c7d 100644 (file)
@@ -2147,6 +2147,8 @@ char *serv_calendar_init(void)
        CtdlRegisterSessionHook(ical_session_shutdown, EVT_STOP);
        CtdlRegisterFixedOutputHook("text/calendar", ical_fixed_output);
 #endif
+
+       /* return our Subversion id for the Log */
        return "$Id$";
 }
 
index cc42c278db015e2c043262126cff0e3f1792b878..765d486d9a51d347d71f142a4b3f5d5f0034afac 100644 (file)
@@ -821,6 +821,8 @@ char *serv_chat_init(void)
        CtdlRegisterSessionHook(cmd_gexp_async, EVT_ASYNC);
        CtdlRegisterSessionHook(delete_instant_messages, EVT_STOP);
        CtdlRegisterXmsgHook(send_instant_message, XMSG_PRI_LOCAL);
+
+       /* return our Subversion id for the Log */
        return "$Id$";
 }
 
index 6e6306e99a74fda0e0bc0f0e136163a9b98c1871..ab0a95214663a0b1bec10de98dec894a75d1aa53 100644 (file)
@@ -840,5 +840,7 @@ char *serv_expire_init(void)
 {
        CtdlRegisterSessionHook(purge_databases, EVT_TIMER);
        CtdlRegisterProtoHook(cmd_fsck, "FSCK", "Check message ref counts");
+
+       /* return our Subversion id for the Log */
        return "$Id$";
 }
index e6ae83f7067e10ffa59cb002e1fabe5cea541952..173ee6f68dba7b439c09935d891736a02115f3f4 100644 (file)
@@ -37,6 +37,8 @@ struct NetprocFunctionHook *NetprocHookTable = NULL;
 struct DeleteFunctionHook *DeleteHookTable = NULL;
 struct ServiceFunctionHook *ServiceHookTable = NULL;
 struct FixedOutputHook *FixedOutputTable = NULL;
+struct RoomFunctionHook *RoomHookTable = NULL;
+
 
 struct ProtoFunctionHook {
        void (*handler) (char *cmdbuf);
@@ -502,6 +504,53 @@ void CtdlDestroyMessageHook(void)
 }
 
 
+void CtdlRegisterRoomHook(int (*fcn_ptr)(struct ctdlroom *))
+{
+       struct RoomFunctionHook *newfcn;
+
+       newfcn = (struct RoomFunctionHook *)
+           malloc(sizeof(struct RoomFunctionHook));
+       newfcn->next = RoomHookTable;
+       newfcn->fcn_ptr = fcn_ptr;
+       RoomHookTable = newfcn;
+
+       lprintf(CTDL_INFO, "Registered a new room function\n");
+}
+
+
+void CtdlUnregisterRoomHook(int (*fcn_ptr)(struct ctdlroom *))
+{
+       struct RoomFunctionHook *cur, *p;
+
+       for (cur = RoomHookTable; cur != NULL; cur = cur->next) {
+               while (cur != NULL && fcn_ptr == cur->fcn_ptr) {
+                       lprintf(CTDL_INFO, "Unregistered room function\n");
+                       p = cur->next;
+                       if (cur == RoomHookTable) {
+                               RoomHookTable = p;
+                       }
+                       free(cur);
+                       cur = p;
+               }
+       }
+}
+
+
+void CtdlDestroyRoomHooks(void)
+{
+       struct RoomFunctionHook *cur, *p;
+
+       cur = RoomHookTable;
+       while (cur != NULL)
+       {
+               lprintf(CTDL_INFO, "Unregistered room function\n");
+               p = cur->next;
+               free(cur);
+               cur = p;
+       }
+       RoomHookTable = NULL;
+}
+
 void CtdlRegisterNetprocHook(int (*handler)(struct CtdlMessage *, char *) )
 {
        struct NetprocFunctionHook *newfcn;
@@ -894,6 +943,23 @@ int PerformMessageHooks(struct CtdlMessage *msg, int EventType)
 }
 
 
+int PerformRoomHooks(struct ctdlroom *target_room)
+{
+       struct RoomFunctionHook *fcn;
+       int total_retval = 0;
+
+       lprintf(CTDL_DEBUG, "Performing room hooks\n");
+
+       for (fcn = RoomHookTable; fcn != NULL; fcn = fcn->next) {
+               total_retval = total_retval +
+                       (*fcn->fcn_ptr) (target_room);
+       }
+
+       /* Return the sum of the return codes from the hook functions.
+        */
+       return total_retval;
+}
+
 
 int PerformNetprocHooks(struct CtdlMessage *msg, char *target_room)
 {
index 4ed2b5369d26992b31fa0e4aab56613f35326866..ccdd95979ca5c58d42fb9f96a20382d41cffd264 100644 (file)
@@ -76,6 +76,12 @@ void CtdlUnregisterNetprocHook(int (*handler)(struct CtdlMessage *, char *) );
 void CtdlDestroyNetprocHooks(void);
 int PerformNetprocHooks(struct CtdlMessage *, char *);
 
+void CtdlRegisterRoomHook(int (*fcn_ptr)(struct ctdlroom *) );
+void CtdlUnregisterRoomHook(int (*fnc_ptr)(struct ctdlroom *) );
+void CtdlDestroyRoomHooks(void);
+int PerformRoomHooks(struct ctdlroom *);
+
+
 void CtdlRegisterDeleteHook(void (*handler)(char *, long) );
 void CtdlUnregisterDeleteHook(void (*handler)(char *, long) );
 void CtdlDestroyDeleteHooks(void);
index 0626a77b0f3bf7a4adcf25a0d11d0bad1e42b47f..028f958680b5699f3174dde5f433b8140bea0be3 100644 (file)
@@ -471,5 +471,7 @@ char *serv_fulltext_init(void)
 {
        initialize_ft_cache();
        CtdlRegisterProtoHook(cmd_srch, "SRCH", "Full text search");
+
+       /* return our Subversion id for the Log */
        return "$Id$";
 }
index 271dc102f41bb49010feaa8103a41b224e563e99..9e0601246221ce93e21961fdc2c926ae3d8695c2 100644 (file)
@@ -223,5 +223,7 @@ char *serv_funambol_init(void)
 {
        create_notify_queue();
        CtdlRegisterSessionHook(do_notify_queue, EVT_TIMER);
-        return "$Id: serv_funambol.c $";
+
+       /* return our Subversion id for the Log */
+        return "$Id$";
 }
index b91800a872ff8705de05fcf7bcd88716e9e18e21..9599d19ed16b450cc1f5d100bebaa2fb055a0147 100644 (file)
@@ -1596,5 +1596,7 @@ char *serv_imap_init(void)
                                NULL, imaps_greeting, imap_command_loop, NULL);
 #endif
        CtdlRegisterSessionHook(imap_cleanup_function, EVT_STOP);
+
+       /* return our Subversion id for the Log */
        return "$Id$";
 }
index 5d49d5fa8951c645e2a412ff49debf74457fa390..d5623d989a60a0c8835b6426fff0ff7a10e3d165 100644 (file)
@@ -181,6 +181,8 @@ char *serv_inetcfg_init(void)
 {
        CtdlRegisterMessageHook(inetcfg_aftersave, EVT_AFTERSAVE);
        inetcfg_init();
+
+       /* return our Subversion id for the Log */
        return "$Id$";
 }
 
index c54ac792697b2f0985fbb78b60979926906be486..6d8acc1f77156adea325f90114ce3670456f20d8 100644 (file)
@@ -597,5 +597,7 @@ char *serv_ldap_init(void)
        }
 
 #endif                         /* HAVE_LDAP */
+
+       /* return our Subversion id for the Log */
        return "$Id$";
 }
index 16a0b963319b2e8c016aa316e4f364a63ac20bbf..be09537284153ecc86edd777125daac683dba5d9 100644 (file)
@@ -565,5 +565,7 @@ void cmd_subs(char *cmdbuf) {
 char *serv_listsub_init(void)
 {
        CtdlRegisterProtoHook(cmd_subs, "SUBS", "List subscribe/unsubscribe");
+
+       /* return our Subversion id for the Log */
        return "$Id$";
 }
index 11ad9da42129a2c8fd5a1e5598ae50ab6d720cbb..9b53968e13cc4c09ef41d5c394ec4a8f3e60a76c 100644 (file)
@@ -589,6 +589,8 @@ char *serv_managesieve_init(void)
 char *serv_managesieve_init(void)
 {
        lprintf(CTDL_INFO, "This server is missing libsieve.  Managesieve protocol is disabled..\n");
+
+       /* return our Subversion id for the Log */
        return "$Id$";
 }
 
index a28896cb1cc045c07f36751904624e3534616f1b..ec2493d767b0c60ffe6c9b6037df8d89b1499fa6 100644 (file)
@@ -130,5 +130,7 @@ void cmd_mrtg(char *argbuf) {
 char *serv_mrtg_init(void)
 {
         CtdlRegisterProtoHook(cmd_mrtg, "MRTG", "Supply stats to MRTG");
+
+       /* return our Subversion id for the Log */
         return "$Id$";
 }
index 9585ae524f9939f25e7fc07de1c996002c4e5ba6..4f6f53bd0b8647b7bf19ae075dcfd314d2e25526 100644 (file)
@@ -106,5 +106,7 @@ int filter_the_idiots(struct CtdlMessage *msg, char *target_room) {
 char *serv_netfilter_init(void)
 {
        CtdlRegisterNetprocHook(filter_the_idiots);
+
+       /* return our Subversion id for the Log */
        return "$Id$";
 }
index 1aaee9a32cbe2fc44559889871283d22535ee450..840ebd5088fc380f51ec2e97badf61384f12553f 100644 (file)
@@ -2055,6 +2055,12 @@ void cmd_netp(char *cmdbuf)
                CC->net_node);
 }
 
+int network_room_handler (struct ctdlroom *room)
+{
+       network_queue_room(room, NULL);
+       return 0;
+}
+
 /*
  * Module entry point
  */
@@ -2066,5 +2072,8 @@ char *serv_network_init(void)
        CtdlRegisterProtoHook(cmd_netp, "NETP", "Identify as network poller");
        CtdlRegisterProtoHook(cmd_nsyn, "NSYN", "Synchronize room to node");
        CtdlRegisterSessionHook(network_do_queue, EVT_TIMER);
+        CtdlRegisterRoomHook(network_room_handler);
+
+       /* return our Subversion id for the Log */
        return "$Id$";
 }
index b1dc2d5bfc993479be52b1d04bf62395bb22cdb2..ffde5e3b2f742f5f1c12b887c5539f664e5fa03d 100644 (file)
@@ -95,5 +95,7 @@ void CopyNewUserGreetings(void) {
 char *serv_newuser_init(void)
 {
    CtdlRegisterSessionHook(CopyNewUserGreetings, EVT_LOGIN);
+
+   /* return our Subversion id for the Log */
    return "$Id$";
 }
index be07912d80b58f8a27b3b3b934ce4751c507c684..23a8d583230f7f44b71ce72a2ed85745bbf0bfa4 100644 (file)
@@ -105,5 +105,7 @@ int serv_notes_beforesave(struct CtdlMessage *msg)
 char *serv_notes_init(void)
 {
        CtdlRegisterMessageHook(serv_notes_beforesave, EVT_BEFORESAVE);
+
+       /* return our Subversion id for the Log */
        return "$Id$";
 }
index 0de1a66ee24549f7c91883585186106b37aedc0c..f2bc4e62f2b8f15afe4ee66c3b749e4f6f30cc4d 100644 (file)
@@ -88,5 +88,7 @@ void cmd_pas2(char *argbuf)
 char *serv_pas2_init(void)
 {
         CtdlRegisterProtoHook(cmd_pas2, "PAS2", "APOP-based login");
+
+       /* return our Subversion id for the Log */
         return "$Id$";
 }
index 5880b97e97a3be81b336f818aa5db84ee17ac7a2..a03c6ee6ed1b410ce739211af450066f77af81c5 100644 (file)
@@ -725,5 +725,7 @@ char *serv_pop3_init(void)
                                NULL);
 #endif
        CtdlRegisterSessionHook(pop3_cleanup_function, EVT_STOP);
+
+       /* return our Subversion id for the Log */
        return "$Id$";
 }
index 0123145f0bbff2b01ad2460f03497dc6a3ed6748..6af26ab09043a3ea4fc6debfce39bed6f9b51299 100644 (file)
@@ -260,5 +260,7 @@ char *serv_rwho_init(void)
         CtdlRegisterProtoHook(cmd_rchg, "RCHG", "Masquerade roomname");
         CtdlRegisterProtoHook(cmd_uchg, "UCHG", "Masquerade username");
         CtdlRegisterProtoHook(cmd_stel, "STEL", "Enter/exit stealth mode");
+
+       /* return our Subversion id for the Log */
         return "$Id$";
 }
index 3418ab8d9f52c8c29f18119b4be7334f69b4f642..a07218a158127d91116f56fc58bd92b4172ca3e9 100644 (file)
@@ -1225,6 +1225,16 @@ BAIL:    res = sieve2_free(&sieve2_context);
 
 }
 
+int serv_sieve_room(struct ctdlroom *room)
+{
+      if (!strcasecmp(&room->QRname[11], MAILROOM)) {
+              sieve_queue_room(room);
+/*
+              return 1;
+*/
+      }
+      return 0;
+}
 
 
 char *serv_sieve_init(void)
@@ -1239,6 +1249,9 @@ char *serv_sieve_init(void)
 char *serv_sieve_init(void)
 {
        lprintf(CTDL_INFO, "This server is missing libsieve.  Mailbox filtering will be disabled.\n");
+        CtdlRegisterRoomHook(serv_sieve_room);
+
+       /* return our Subversion id for the Log */
        return "$Id$";
 }
 
index 91aa236467ae1670d69e27b2c59586a2dac619fb..65476a9f4515d1c5fc2e6cc4baa7f12001da25f3 100644 (file)
@@ -1849,5 +1849,7 @@ char *serv_smtp_init(void)
        CtdlRegisterSessionHook(smtp_do_queue, EVT_TIMER);
        CtdlRegisterSessionHook(smtp_cleanup_function, EVT_STOP);
        CtdlRegisterProtoHook(cmd_smtp, "SMTP", "SMTP utility commands");
+
+       /* return our Subversion id for the Log */
        return "$Id$";
 }
index 9d7c46471e0f71e4994a29b37681dc9b838c6899..468a09737a2421886277b58352750aedb152458c 100644 (file)
@@ -148,5 +148,7 @@ bail:       close(sock);
 char *serv_spam_init(void)
 {
        CtdlRegisterMessageHook(spam_assassin, EVT_SMTPSCAN);
+
+       /* return our Subversion id for the Log */
         return "$Id$";
 }
index f3bf3c59cdb12f2c8d0133ad260fb2d4d1934f0a..c79e6aace2f60098956ed0db00df166148867691 100644 (file)
@@ -72,5 +72,7 @@ char *serv_test_init(void)
    CtdlRegisterSessionHook(SessionStartTest, EVT_START);
    CtdlRegisterSessionHook(SessionStopTest, EVT_STOP);
    CtdlRegisterSessionHook(LoginTest, EVT_LOGIN);
+
+   /* return our Subversion id for the Log */
    return "$Id$";
 }
index c54117e0f38e54754507766dcf6a8ac1e8ea8634..1c3012a512b1159d1b4b4646765f154b35066d1c 100644 (file)
@@ -229,5 +229,7 @@ void check_server_upgrades(void) {
 char *serv_upgrade_init(void)
 {
        check_server_upgrades();
+
+       /* return our Subversion id for the Log */
        return "$Id$";
 }
index 288c04fb0bf26137d2c4d39671da076fcf160cba..f5451a5557368f1d6d50dddc520b36b1861e76a5 100644 (file)
@@ -729,5 +729,7 @@ void cmd_artv(char *cmdbuf) {
 char *serv_vandelay_init(void)
 {
        CtdlRegisterProtoHook(cmd_artv, "ARTV", "import/export data store");
+
+       /* return our Subversion id for the Log */
        return "$Id$";
 }
index fe20b40af31751c2a7e8517db8365d93df23535b..b8f7a4a0cdab66d4dacf1eff047fc9dc3e34760b 100644 (file)
@@ -1384,5 +1384,6 @@ char *serv_vcard_init(void)
                chown(filename, CTDLUID, (-1));
        }
 
+       /* return our Subversion id for the Log */
        return "$Id$";
 }
index 46702117bcf1db56eeca161c85299cf639e872a3..96949ed154266375faeab30a5a7d673df70a786e 100644 (file)
@@ -379,7 +379,6 @@ extern struct MessageFunctionHook *MessageHookTable;
 #define EVT_SMTPSCAN   203     /* called before submitting a msg from SMTP */
 
 
-
 /*
  * NetprocFunctionHook extensions are used for hooks which implement handlers
  * for incoming network messages.
@@ -441,6 +440,17 @@ struct ServiceFunctionHook {
 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;
+
+
 
 /* Defines the relationship of a user to a particular room */
 struct visit {