* give all commands their own function
authorWilfried Göesgens <willi@citadel.org>
Fri, 17 Apr 2009 00:44:52 +0000 (00:44 +0000)
committerWilfried Göesgens <willi@citadel.org>
Fri, 17 Apr 2009 00:44:52 +0000 (00:44 +0000)
* evade rumpelstilskin-lookup in favour of module registration commands
* replace linked list of commands by 4-char-hash.

18 files changed:
citadel/citserver.c
citadel/citserver.h
citadel/control.c
citadel/euidindex.c
citadel/file_ops.c
citadel/file_ops.h
citadel/include/ctdl_module.h
citadel/mk_module_init.sh
citadel/modules/calendar/serv_calendar.c
citadel/modules/crypto/serv_crypto.c
citadel/msgbase.c
citadel/msgbase.h
citadel/policy.c
citadel/room_ops.c
citadel/room_ops.h
citadel/serv_extensions.c
citadel/user_ops.c
citadel/user_ops.h

index d4bb9cc66969f76fc30b9357f1d4768a257d44e5..df75a28a0d06c4f7c8e0d546d56134ef09ab1439 100644 (file)
@@ -343,7 +343,7 @@ char CtdlCheckExpress(void) {
        }
 }
 
-void cmd_time(void)
+void cmd_time(char *argbuf)
 {
    time_t tv;
    struct tm tmp;
@@ -781,7 +781,7 @@ void cmd_term(char *cmdbuf)
 /* 
  * get the paginator prompt
  */
-void cmd_more(void) {
+void cmd_more(char *argbuf) {
        cprintf("%d %s\n", CIT_OK, config.c_moreprompt);
 }
 
@@ -863,7 +863,7 @@ void cmd_down(char *argbuf) {
 /*
  * Halt the server without exiting the server process.
  */
-void cmd_halt(void) {
+void cmd_halt(char *argbuf) {
 
        if (CtdlAccessCheck(ac_aide)) return;
 
@@ -1016,6 +1016,28 @@ void citproto_begin_session() {
 
 
 
+void cmd_noop(char *argbuf)
+{
+       cprintf("%d%cok\n", CIT_OK, CtdlCheckExpress() );
+}
+
+void cmd_qnop(char *argbuf)
+{
+       /* do nothing, this command returns no response */
+}
+
+void cmd_quit(char *argbuf)
+{
+       cprintf("%d Goodbye.\n", CIT_OK);
+       CC->kill_me = 1;
+}
+
+void cmd_lout(char *argbuf)
+{
+       if (CC->logged_in) 
+               logout();
+       cprintf("%d logged out.\n", CIT_OK);
+}
 
 /*
  * This loop recognizes all server commands.
@@ -1070,363 +1092,9 @@ void do_command_loop(void) {
           CC->cs_flags &= ~CS_POSTING;
        }
                   
-       if (!strncasecmp(cmdbuf, "NOOP", 4)) {
-               cprintf("%d%cok\n", CIT_OK, CtdlCheckExpress() );
-       }
-       
-       else if (!strncasecmp(cmdbuf, "QNOP", 4)) {
-               /* do nothing, this command returns no response */
-       }
-
-       else if (!strncasecmp(cmdbuf,"QUIT",4)) {
-               cprintf("%d Goodbye.\n", CIT_OK);
-               CC->kill_me = 1;
-       }
-
-       else if (!strncasecmp(cmdbuf,"ASYN",4)) {
-               cmd_asyn(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"LOUT",4)) {
-               if (CC->logged_in) logout();
-               cprintf("%d logged out.\n", CIT_OK);
-       }
-
-       else if (!strncasecmp(cmdbuf,"USER",4)) {
-               cmd_user(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"PASS",4)) {
-               cmd_pass(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"NEWU",4)) {
-               cmd_newu(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"CREU",4)) {
-               cmd_creu(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"SETP",4)) {
-               cmd_setp(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"LRMS",4)) {
-               cmd_lrms(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"LKRA",4)) {
-               cmd_lkra(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"LKRN",4)) {
-               cmd_lkrn(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"LKRO",4)) {
-               cmd_lkro(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"LZRM",4)) {
-               cmd_lzrm(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"LPRM",4)) {
-               cmd_lprm(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"GETU",4)) {
-               cmd_getu(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"SETU",4)) {
-               cmd_setu(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"GOTO",4)) {
-               cmd_goto(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"MSGS",4)) {
-               cmd_msgs(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"WHOK",4)) {
-               cmd_whok(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"RDIR",4)) {
-               cmd_rdir(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"EUID",4)) {
-               cmd_euid(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"MSG0",4)) {
-               cmd_msg0(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"MSG2",4)) {
-               cmd_msg2(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"MSG3",4)) {
-               cmd_msg3(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"MSG4",4)) {
-               cmd_msg4(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"MSGP",4)) {
-               cmd_msgp(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"OPNA",4)) {
-               cmd_opna(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"DLAT",4)) {
-               cmd_dlat(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"INFO",4)) {
-               cmd_info(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"SLRP",4)) {
-               cmd_slrp(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"INVT",4)) {
-               cmd_invt_kick(&cmdbuf[5], 1);
-       }
-
-       else if (!strncasecmp(cmdbuf,"KICK",4)) {
-               cmd_invt_kick(&cmdbuf[5], 0);
-       }
-
-       else if (!strncasecmp(cmdbuf,"GETR",4)) {
-               cmd_getr(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"SETR",4)) {
-               cmd_setr(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"GETA",4)) {
-               cmd_geta(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"SETA",4)) {
-               cmd_seta(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"ENT0",4)) {
-               cmd_ent0(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"RINF",4)) {
-               cmd_rinf();
-       }
-
-       else if (!strncasecmp(cmdbuf,"DELE",4)) {
-               cmd_dele(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"KILL",4)) {
-               cmd_kill(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"CRE8",4)) {
-               cmd_cre8(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"MOVE",4)) {
-               cmd_move(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"FORG",4)) {
-               cmd_forg();
-       }
-
-       else if (!strncasecmp(cmdbuf,"MESG",4)) {
-               cmd_mesg(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"EMSG",4)) {
-               cmd_emsg(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"GNUR",4)) {
-               cmd_gnur();
-       }
-
-       else if (!strncasecmp(cmdbuf,"VALI",4)) {
-               cmd_vali(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"EINF",4)) {
-               cmd_einf(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"LIST",4)) {
-               cmd_list(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"CHEK",4)) {
-               cmd_chek();
-       }
-
-       else if (!strncasecmp(cmdbuf,"DELF",4)) {
-               cmd_delf(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"MOVF",4)) {
-               cmd_movf(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"OPEN",4)) {
-               cmd_open(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"CLOS",4)) {
-               cmd_clos();
-       }
-
-       else if (!strncasecmp(cmdbuf,"UOPN",4)) {
-               cmd_uopn(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"UCLS",4)) {
-               cmd_ucls(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"READ",4)) {
-               cmd_read(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"WRIT",4)) {
-               cmd_writ(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"QUSR",4)) {
-               cmd_qusr(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"ECHO",4)) {
-               cmd_echo(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"OIMG",4)) {
-               cmd_oimg(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"MORE",4)) {
-               cmd_more();
-       }
-
-       else if (!strncasecmp(cmdbuf,"NDOP",4)) {
-               cmd_ndop(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"NUOP",4)) {
-               cmd_nuop(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"LFLR",4)) {
-               cmd_lflr();
-       }
-
-       else if (!strncasecmp(cmdbuf,"CFLR",4)) {
-               cmd_cflr(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"KFLR",4)) {
-               cmd_kflr(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"EFLR",4)) {
-               cmd_eflr(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"IDEN",4)) {
-               cmd_iden(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"IPGM",4)) {
-               cmd_ipgm(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"TERM",4)) {
-               cmd_term(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"DOWN",4)) {
-               cmd_down(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf,"HALT",4)) {
-               cmd_halt();
-       }
-
-       else if (!strncasecmp(cmdbuf,"SCDN",4)) {
-               cmd_scdn(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf, "UIMG", 4)) {
-               cmd_uimg(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf, "TIME", 4)) {
-               cmd_time();
-       }
-
-       else if (!strncasecmp(cmdbuf, "AGUP", 4)) {
-               cmd_agup(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf, "ASUP", 4)) {
-               cmd_asup(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf, "GPEX", 4)) {
-               cmd_gpex(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf, "SPEX", 4)) {
-               cmd_spex(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf, "CONF", 4)) {
-               cmd_conf(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf, "SEEN", 4)) {
-               cmd_seen(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf, "GTSN", 4)) {
-               cmd_gtsn(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf, "VIEW", 4)) {
-               cmd_view(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf, "ISME", 4)) {
-               cmd_isme(&cmdbuf[5]);
-       }
-
-       else if (!strncasecmp(cmdbuf, "RENU", 4)) {
-               cmd_renu(&cmdbuf[5]);
-       }
-
-       else if (!DLoader_Exec_Cmd(cmdbuf)) {
+       if (!DLoader_Exec_Cmd(cmdbuf)) {
                cprintf("%d Unrecognized or unsupported command.\n", ERROR + CMD_NOT_SUPPORTED);
-       }
+       }       
 
        unbuffer_output();
 
@@ -1442,3 +1110,36 @@ void do_command_loop(void) {
 void do_async_loop(void) {
        PerformSessionHooks(EVT_ASYNC);
 }
+
+
+
+
+
+
+
+/*****************************************************************************/
+/*                      MODULE INITIALIZATION STUFF                          */
+/*****************************************************************************/
+
+CTDL_MODULE_INIT(citserver)
+{
+       CtdlRegisterProtoHook(cmd_noop, "NOOP", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_qnop, "QNOP", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_quit, "QUIT", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_lout, "LOUT", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_asyn, "ASYN", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_info, "INFO", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_mesg, "MESG", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_emsg, "EMSG", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_echo, "ECHO", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_more, "MORE", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_iden, "IDEN", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_ipgm, "IPGM", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_term, "TERM", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_down, "DOWN", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_halt, "HALT", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_scdn, "SCDN", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_time, "TIME", "Autoconverted. TODO: document me.");
+        /* return our Subversion id for the Log */
+       return "$Id$";
+}
index 5b08b7863ec04caab0235cb43bfe371d803e1a21..59586a44ba8a5d7354ce3912ac479a07474c8cf5 100644 (file)
@@ -19,19 +19,6 @@ void master_cleanup (int exitcode);
 void RemoveContext (struct CitContext *);
 void set_wtmpsupp (char *newtext);
 void set_wtmpsupp_to_current_room(void);
-void cmd_info (char *cmdbuf);
-void cmd_time (void);
-void cmd_iden (char *argbuf);
-void cmd_mesg (char *mname);
-void cmd_emsg (char *mname);
-void cmd_term (char *cmdbuf);
-void cmd_more (void);
-void cmd_echo (char *etext);
-void cmd_ipgm (char *argbuf);
-void cmd_down (char *argbuf);
-void cmd_halt (void);
-void cmd_scdn (char *argbuf);
-void cmd_extn (char *argbuf);
 void do_command_loop(void);
 void do_async_loop(void);
 void begin_session(struct CitContext *con);
@@ -57,3 +44,4 @@ enum {
 
 
 extern time_t server_startup_time;
+
index 03ffa7c75d09917455cd31fdf42cf427ba146414..85bef8f3bae92201f367a2f514188e924b2c73e1 100644 (file)
@@ -47,6 +47,8 @@
 #include "snprintf.h"
 #endif
 
+#include "ctdl_module.h"
+
 struct CitControl CitControl;
 extern struct config config;
 FILE *control_fp = NULL;
@@ -696,3 +698,16 @@ void cmd_conf(char *argbuf)
                        ERROR + ILLEGAL_VALUE);
        }
 }
+
+
+/*****************************************************************************/
+/*                      MODULE INITIALIZATION STUFF                          */
+/*****************************************************************************/
+
+
+CTDL_MODULE_INIT(control)
+{
+       CtdlRegisterProtoHook(cmd_conf, "CONF", "Autoconverted. TODO: document me.");
+       /* return our Subversion id for the Log */
+       return "$Id$";
+}
index ce9ebd350d1f22ae4b14772c7570b675d0b704e0..2dac3730fd79a66e1e509d4f8164fe73abc20303 100644 (file)
@@ -44,6 +44,8 @@
 #include "control.h"
 #include "euidindex.h"
 
+#include "ctdl_module.h"
+
 /*
  * The structure of an euidindex record *key* is:
  *
@@ -250,4 +252,9 @@ void cmd_euid(char *cmdbuf) {
        cprintf("%d not found\n", ERROR + MESSAGE_NOT_FOUND);
 }
 
-
+CTDL_MODULE_INIT(euidindex)
+{
+       CtdlRegisterProtoHook(cmd_euid, "EUID", "Autoconverted. TODO: document me.");
+       /* return our Subversion id for the Log */
+       return "$Id$";
+}
index 1424e33e18aec2b64572befe4cf276502d6b9dcf..8fcc068bfd88bf2e1a555c839a6e9de920995603 100644 (file)
@@ -45,6 +45,8 @@
 #include "snprintf.h"
 #endif
 
+#include "ctdl_module.h"
+
 /*
  * network_talking_to()  --  concurrency checker
  */
@@ -516,7 +518,7 @@ void cmd_uimg(char *cmdbuf)
 /*
  * close the download file
  */
-void cmd_clos(void)
+void cmd_clos(char *cmdbuf)
 {
        char buf[256];
 
@@ -769,3 +771,26 @@ void cmd_nuop(char *cmdbuf)
        CC->upload_type = UPL_NET;
        cprintf("%d Ok\n", CIT_OK);
 }
+
+
+/*****************************************************************************/
+/*                      MODULE INITIALIZATION STUFF                          */
+/*****************************************************************************/
+
+CTDL_MODULE_INIT(file_ops)
+{
+       CtdlRegisterProtoHook(cmd_delf, "DELF", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_movf, "MOVF", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_open, "OPEN", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_clos, "CLOS", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_uopn, "UOPN", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_ucls, "UCLS", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_read, "READ", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_writ, "WRIT", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_oimg, "OIMG", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_ndop, "NDOP", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_nuop, "NUOP", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_uimg, "UIMG", "Autoconverted. TODO: document me.");
+        /* return our Subversion id for the Log */
+       return "$Id$";
+}
index f2110caab8d96a1dfd9eb3e4c92572a4f2aa0325..6f95c1374444bda216df159856334300d4ed22f1 100644 (file)
@@ -1,19 +1,7 @@
 /* $Id$ */
-void cmd_delf (char *filename);
-void cmd_movf (char *cmdbuf);
-void cmd_netf (char *cmdbuf);
 void OpenCmdResult (char *, const char *);
-void cmd_open (char *cmdbuf);
-void cmd_oimg (char *cmdbuf);
-void cmd_uopn (char *cmdbuf);
-void cmd_uimg (char *cmdbuf);
-void cmd_clos (void);
 void abort_upl (struct CitContext *who);
-void cmd_ucls (char *cmd);
-void cmd_read (char *cmdbuf);
-void cmd_writ (char *cmdbuf);
-void cmd_ndop (char *cmdbuf);
-void cmd_nuop (char *cmdbuf);
+
 int network_talking_to(char *nodename, int operation);
 
 /*
index 754b2e146eab08670361a379e4a3767b33ac53d3..e7a9510e91958a2b6ff25ea4ca37948b9ae887dc 100644 (file)
@@ -64,7 +64,6 @@ void CtdlRegisterCleanupHook(void (*fcn_ptr)(void));
 void CtdlUnregisterCleanupHook(void (*fcn_ptr)(void));
 
 void CtdlRegisterProtoHook(void (*handler)(char *), char *cmd, char *desc);
-void CtdlUnregisterProtoHook(void (*handler)(char *), char *cmd);
 
 void CtdlRegisterServiceHook(int tcp_port,
                             char *sockpath,
index 4969208d57340435469df0ed6d66bf66f75b9b64..4bc379affed6527d5b43f71b6e077db454bce61f 100755 (executable)
@@ -121,6 +121,17 @@ void initialise_modules (int threading)
         CtdlLogPrintf (CTDL_INFO, "Initialise modules, CtdlThreads enabled.\n");
     else
         CtdlLogPrintf (CTDL_INFO, "Initialise modules, CtdlThreads not yet enabled.\n");
+/* static server initialization: */
+        CtdlLogPrintf (CTDL_INFO, "%s\n", CTDL_INIT_CALL(citserver));
+        CtdlLogPrintf (CTDL_INFO, "%s\n", CTDL_INIT_CALL(control));
+        CtdlLogPrintf (CTDL_INFO, "%s\n", CTDL_INIT_CALL(euidindex));
+        CtdlLogPrintf (CTDL_INFO, "%s\n", CTDL_INIT_CALL(file_ops));
+        CtdlLogPrintf (CTDL_INFO, "%s\n", CTDL_INIT_CALL(msgbase));
+        CtdlLogPrintf (CTDL_INFO, "%s\n", CTDL_INIT_CALL(policy));
+        CtdlLogPrintf (CTDL_INFO, "%s\n", CTDL_INIT_CALL(room_ops));
+        CtdlLogPrintf (CTDL_INFO, "%s\n", CTDL_INIT_CALL(user_ops));
+/* dynamic modules: */
+
 EOF
 
 
@@ -138,6 +149,15 @@ cat <<EOF > $H_FILE
 extern size_t nSizErrmsg;
 void initialise_modules (int threading);
 void upgrade_modules(void);
+
+       CTDL_MODULE_INIT(citserver);
+       CTDL_MODULE_INIT(control);
+       CTDL_MODULE_INIT(euidindex);
+       CTDL_MODULE_INIT(file_ops);
+       CTDL_MODULE_INIT(msgbase);
+       CTDL_MODULE_INIT(policy);
+       CTDL_MODULE_INIT(room_ops);
+       CTDL_MODULE_INIT(user_ops);
 EOF
 
 for i in serv_*.c
index 7e51606319fbe265b2a04d8ada354a2a4ab558db..094ab130809a73167e56a0990a5e4414d8926706 100644 (file)
@@ -1988,9 +1988,9 @@ void ical_send_out_invitations(icalcomponent *top_level_cal, icalcomponent *cal)
        size_t reqsize;
        icalproperty *p;
        struct icaltimetype t;
-       icaltimezone *attached_zones[5] = { NULL, NULL, NULL, NULL, NULL };
+       const icaltimezone *attached_zones[5] = { NULL, NULL, NULL, NULL, NULL };
        int i;
-       icaltimezone *z;
+       const icaltimezone *z;
        int num_zones_attached = 0;
        int zone_already_attached;
 
index 0fbf272828796a89cb9dcb891b0d0794da0182e4..70d9aab9473ce7577fdafa051a4dbf4ddb957150 100644 (file)
@@ -56,8 +56,6 @@ static unsigned long id_callback(void)
 void destruct_ssl(void)
 {
        int a;
-       CtdlUnregisterProtoHook(cmd_stls, "STLS");
-       CtdlUnregisterProtoHook(cmd_gtls, "GTLS");
        for (a = 0; a < CRYPTO_num_locks(); a++) 
                free(SSLCritters[a]);
        free (SSLCritters);
index 2a4a8b1091f8488ddffa543142b8a096685d9bf6..cde4e1eca24b78bd12eff2eb30ced1489059cd9a 100644 (file)
@@ -54,6 +54,8 @@
 #include "serv_network.h"
 #include "threads.h"
 
+#include "ctdl_module.h"
+
 long config_msgnum;
 struct addresses_to_be_filed *atbf = NULL;
 
@@ -4694,3 +4696,26 @@ void cmd_isme(char *argbuf) {
        }
 
 }
+
+
+/*****************************************************************************/
+/*                      MODULE INITIALIZATION STUFF                          */
+/*****************************************************************************/
+
+CTDL_MODULE_INIT(msgbase)
+{
+       CtdlRegisterProtoHook(cmd_msgs, "MSGS", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_msg0, "MSG0", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_msg2, "MSG2", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_msg3, "MSG3", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_msg4, "MSG4", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_msgp, "MSGP", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_opna, "OPNA", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_dlat, "DLAT", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_ent0, "ENT0", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_dele, "DELE", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_move, "MOVE", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_isme, "ISME", "Autoconverted. TODO: document me.");
+        /* return our Subversion id for the Log */
+       return "$Id$";
+}
index 60993254c7683277f3c078b41e0a3157fa6caae9..9786cfd3f16edc65dae67300b7b596833b15279c 100644 (file)
@@ -3,7 +3,7 @@
 #ifndef MSGBASE_H
 #define MSGBASE_H
 
-#define aide_message(text, subject)      quickie_message("Citadel",NULL,NULL,AIDEROOM,text,0,subject)
+#define aide_message(text, subject)      quickie_message("Citadel",NULL,NULL,AIDEROOM,text,FMT_CITADEL,subject)
 
 enum {
        MSGS_ALL,
index 226e985dc58e0eb61516af618a380c457f369062..dd1b7994b726508ec17f85208ee383e28d3b3e72 100644 (file)
@@ -35,6 +35,7 @@
 #include "msgbase.h"
 #include "citserver.h"
 
+#include "ctdl_module.h"
 
 /*
  * Retrieve the applicable expire policy for a specific room
@@ -178,4 +179,14 @@ void cmd_spex(char *argbuf) {
 
 }
 
+/*****************************************************************************/
+/*                      MODULE INITIALIZATION STUFF                          */
+/*****************************************************************************/
 
+CTDL_MODULE_INIT(policy)
+{
+       CtdlRegisterProtoHook(cmd_gpex, "GPEX", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_spex, "SPEX", "Autoconverted. TODO: document me.");
+        /* return our Subversion id for the Log */
+       return "$Id$";
+}
index eeaf10d9682d289b2933d1fd7e6a6f3bdb5eff61..c97beb1c24a125edaa5a606e94a650ccabdde55d 100644 (file)
@@ -42,6 +42,8 @@
 #include "citadel_dirs.h"
 #include "threads.h"
 
+#include "ctdl_module.h"
+
 struct floor *floorcache[MAXFLOORS];
 
 /*
@@ -1559,7 +1561,7 @@ void cmd_seta(char *new_ra)
 /* 
  * retrieve info file for this room
  */
-void cmd_rinf(void)
+void cmd_rinf(char *gargs)
 {
        char filename[128];
        char buf[SIZ];
@@ -2000,7 +2002,7 @@ void cmd_einf(char *ok)
 /* 
  * cmd_lflr()   -  List all known floors
  */
-void cmd_lflr(void)
+void cmd_lflr(char *gargs)
 {
        int a;
        struct floor flbuf;
@@ -2157,3 +2159,35 @@ void cmd_eflr(char *argbuf)
 
        cprintf("%d Ok\n", CIT_OK);
 }
+
+
+/*****************************************************************************/
+/*                      MODULE INITIALIZATION STUFF                          */
+/*****************************************************************************/
+
+CTDL_MODULE_INIT(room_ops)
+{
+       CtdlRegisterProtoHook(cmd_lrms, "LRMS", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_lkra, "LKRA", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_lkrn, "LKRN", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_lkro, "LKRO", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_lzrm, "LZRM", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_lprm, "LPRM", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_goto, "GOTO", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_whok, "WHOK", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_rdir, "RDIR", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_getr, "GETR", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_setr, "SETR", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_geta, "GETA", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_seta, "SETA", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_rinf, "RINF", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_kill, "KILL", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_cre8, "CRE8", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_einf, "EINF", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_lflr, "LFLR", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_cflr, "CFLR", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_kflr, "KFLR", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_eflr, "EFLR", "Autoconverted. TODO: document me.");
+        /* return our Subversion id for the Log */
+       return "$Id$";
+}
index 71e8dac064ddf7b41279c449940860331b9d886c..d099459c108d521cbe414066de7ceab84a57f093 100644 (file)
@@ -17,23 +17,8 @@ void lgetfloor (struct floor *flbuf, int floor_num);
 void putfloor (struct floor *flbuf, int floor_num);
 void lputfloor (struct floor *flbuf, int floor_num);
 int sort_msglist (long int *listptrs, int oldcount);
-void cmd_lrms (char *argbuf);
-void cmd_lkra (char *argbuf);
-void cmd_lkrn (char *argbuf);
-void cmd_lkro (char *argbuf);
-void cmd_lzrm (char *argbuf);
-void cmd_lprm (char *argbuf);
 void usergoto (char *where, int display_result, int transiently,
                        int *msgs, int *new);
-void cmd_goto (char *gargs);
-void cmd_whok (char *cmdbuf);
-void cmd_rdir (char *cmdbuf);
-void cmd_getr (char *cmdbuf);
-void cmd_setr (char *args);
-void cmd_geta (char *cmdbuf);
-void cmd_seta (char *new_ra);
-void cmd_rinf (void);
-void cmd_kill (char *argbuf);
 unsigned create_room(char *new_room_name,
                        int new_room_type,
                        char *new_room_pass,
@@ -41,12 +26,6 @@ unsigned create_room(char *new_room_name,
                        int really_create,
                        int avoid_access,
                        int new_room_view);
-void cmd_cre8 (char *args);
-void cmd_einf (char *ok);
-void cmd_lflr (void);
-void cmd_cflr (char *argbuf);
-void cmd_kflr (char *argbuf);
-void cmd_eflr (char *argbuf);
 void ForEachRoom(void (*CallBack)(struct ctdlroom *EachRoom, void *out_data),
        void *in_data);
 void schedule_room_for_deletion(struct ctdlroom *qrbuf);
@@ -70,3 +49,5 @@ enum {
        crr_invalid_floor,              /* target floor does not exist */
        crr_access_denied               /* not allowed to edit this room */
 };
+
+
index 0c4c4dc0fb055c66d4dcff7bbd31f0da0ca3cc41..115b6769b32d98bf70e53940be8818cd810ed23f 100644 (file)
@@ -46,10 +46,11 @@ struct SearchFunctionHook *SearchFunctionHookTable = NULL;
 
 struct ProtoFunctionHook {
        void (*handler) (char *cmdbuf);
-       char *cmd;
-       char *desc;
-       struct ProtoFunctionHook *next;
-} *ProtoHookList = NULL;
+       const char *cmd;
+       const char *desc;
+};
+
+HashList *ProtoHookList = NULL;
 
 
 struct DirectoryServiceHook {
@@ -193,22 +194,37 @@ void AddPortError(char *Port, char *ErrorMessage)
 
 int DLoader_Exec_Cmd(char *cmdbuf)
 {
+       void *vP;
        struct ProtoFunctionHook *p;
 
-       for (p = ProtoHookList; p; p = p->next) {
-               if (!strncasecmp(cmdbuf, p->cmd, 4)) {
-                       p->handler(&cmdbuf[5]);
-                       return 1;
-               }
+       if (GetHash(ProtoHookList, cmdbuf, 4, &vP) && (vP != NULL)) {
+               p = (struct ProtoFunctionHook*) vP;
+               p->handler(&cmdbuf[5]);
+               return 1;
        }
        return 0;
 }
 
+int 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;
+
+       return ret;
+}
 
 void CtdlRegisterProtoHook(void (*handler) (char *), char *cmd, char *desc)
 {
        struct ProtoFunctionHook *p;
 
+       if (ProtoHookList == NULL)
+               ProtoHookList = NewHash (1, FourHash);
+
+
        p = (struct ProtoFunctionHook *)
                malloc(sizeof(struct ProtoFunctionHook));
 
@@ -219,56 +235,15 @@ void CtdlRegisterProtoHook(void (*handler) (char *), char *cmd, char *desc)
        p->handler = handler;
        p->cmd = cmd;
        p->desc = desc;
-       p->next = ProtoHookList;
-       ProtoHookList = p;
-       CtdlLogPrintf(CTDL_INFO, "Registered server command %s (%s)\n", cmd, desc);
-}
-
 
-void CtdlUnregisterProtoHook(void (*handler) (char *), char *cmd)
-{
-       struct ProtoFunctionHook *cur = NULL;
-       struct ProtoFunctionHook *p = NULL;
-       struct ProtoFunctionHook *lastcur = NULL;
-
-       for (cur = ProtoHookList; 
-            cur != NULL; 
-            cur = (cur != NULL)? cur->next: NULL) {
-               /* This will also remove duplicates if any */
-               while (cur != NULL &&
-                               handler == cur->handler &&
-                               !strcmp(cmd, cur->cmd)) {
-                       CtdlLogPrintf(CTDL_INFO, "Unregistered server command %s (%s)\n",
-                                       cmd, cur->desc);
-                       p = cur->next;
-                       if (cur == ProtoHookList) {
-                               ProtoHookList = p;
-                       }
-                       else if (lastcur != NULL)
-                       {
-                               lastcur->next = p;
-                       }
-                       free(cur);
-                       cur = p;
-               }
-               lastcur = cur;
-       }
+       Put(ProtoHookList, cmd, 4, p, NULL);
+       CtdlLogPrintf(CTDL_INFO, "Registered server command %s (%s)\n", cmd, desc);
 }
 
 void CtdlDestroyProtoHooks(void)
 {
-       struct ProtoFunctionHook *cur, *p;
 
-       cur = ProtoHookList; 
-       while (cur != NULL)
-       {
-               CtdlLogPrintf(CTDL_INFO, "Destroyed server command %s (%s)\n",
-                       cur->cmd, cur->desc);
-               p = cur->next;
-               free(cur);
-               cur = p;
-       }
-       ProtoHookList = NULL;
+       DeleteHash(&ProtoHookList);
 }
 
 
index 8faf50f7e605cc503b3c8f662002fd8f84abd328..b61247d0c0b0b064426eabfc07c2bf7404e4ab16 100644 (file)
@@ -52,6 +52,8 @@
 #include "threads.h"
 #include "citadel_ldap.h"
 
+#include "ctdl_module.h"
+
 /* These pipes are used to talk to the chkpwd daemon, which is forked during startup */
 int chkpwd_write_pipe[2];
 int chkpwd_read_pipe[2];
@@ -1523,6 +1525,8 @@ void cmd_invt_kick(char *iuser, int op) {
        return;
 }
 
+void cmd_invt(char *iuser) {cmd_invt_kick(iuser, 1);}
+void cmd_kick(char *iuser) {cmd_invt_kick(iuser, 0);}
 
 /*
  * Forget (Zap) the current room (API call)
@@ -1556,7 +1560,7 @@ int CtdlForgetThisRoom(void) {
 /*
  * forget (Zap) the current room
  */
-void cmd_forg(void)
+void cmd_forg(char *argbuf)
 {
 
        if (CtdlAccessCheck(ac_logged_in)) {
@@ -1574,7 +1578,7 @@ void cmd_forg(void)
 /*
  * Get Next Unregistered User
  */
-void cmd_gnur(void)
+void cmd_gnur(char *argbuf)
 {
        struct cdbdata *cdbus;
        struct ctdluser usbuf;
@@ -1727,7 +1731,7 @@ void cmd_list(char *cmdbuf)
 /*
  * assorted info we need to check at login
  */
-void cmd_chek(void)
+void cmd_chek(char *argbuf)
 {
        int mail = 0;
        int regis = 0;
@@ -1997,3 +2001,38 @@ void cmd_renu(char *cmdbuf)
 
        cprintf("%d An unknown error occurred.\n", ERROR);
 }
+
+
+
+/*****************************************************************************/
+/*                      MODULE INITIALIZATION STUFF                          */
+/*****************************************************************************/
+
+
+CTDL_MODULE_INIT(user_ops)
+{
+       CtdlRegisterProtoHook(cmd_user, "USER", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_pass, "PASS", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_creu, "CREU", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_setp, "SETP", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_getu, "GETU", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_setu, "SETU", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_slrp, "SLRP", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_invt, "INVT", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_kick, "KICK", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_forg, "FORG", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_gnur, "GNUR", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_vali, "VALI", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_list, "LIST", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_chek, "CHEK", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_qusr, "QUSR", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_agup, "AGUP", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_asup, "ASUP", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_seen, "SEEN", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_gtsn, "GTSN", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_view, "VIEW", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_renu, "RENU", "Autoconverted. TODO: document me.");
+       CtdlRegisterProtoHook(cmd_newu, "NEWU", "Autoconverted. TODO: document me.");
+       /* return our Subversion id for the Log */
+       return "$Id$";
+}
index b516410f07a6eea32a9221a3bf953ad0bb3acdd1..6bf604175bb08bb6c180b5a01195d92e68d4dd71 100644 (file)
@@ -12,31 +12,13 @@ void cmd_user (char *cmdbuf);
 void session_startup (void);
 void logged_in_response(void);
 void logout (void);
-void cmd_pass (char *buf);
 int purge_user (char *pname);
 int create_user (char *newusername, int become_user);
 void do_login(void);
-void cmd_newu (char *cmdbuf);
-void cmd_creu (char *cmdbuf);
-void cmd_setp (char *new_pw);
-void cmd_getu (char *cmdbuf);
-void cmd_setu (char *new_parms);
-void cmd_slrp (char *new_ptr);
 int CtdlInvtKick(char *iuser, int op);
-void cmd_invt_kick (char *iuser, int op);
-void cmd_forg (void);
-void cmd_gnur (void);
-void cmd_vali (char *v_args);
 void ForEachUser(void (*CallBack)(struct ctdluser *EachUser, void *out_data),
        void *in_data);
 void ListThisUser(struct ctdluser *usbuf, void *data);
-void cmd_list (char *);
-void cmd_chek (void);
-void cmd_qusr (char *who);
-void cmd_agup (char *cmdbuf);
-void cmd_asup (char *cmdbuf);
-void cmd_view (char *cmdbuf);
-void cmd_renu (char *cmdbuf);
 int NewMailCount(void);
 int InitialMailCheck(void);
 void put_visit(struct visit *newvisit);
@@ -84,8 +66,8 @@ enum {
 
 
 int CtdlForgetThisRoom(void);
-void cmd_seen(char *argbuf);
-void cmd_gtsn(char *argbuf);
+
+void cmd_newu (char *cmdbuf);
 void BumpNewMailCounter(long);
 void start_chkpwd_daemon(void);