+Sun Jul 18 14:53:16 EDT 1999 Art Cancro <ajc@uncnsrd.mt-kisco.ny.us>
+ * Changes to dynloader et al to handle ICQ module being written
+
1999-07-17 Nathan Bryant <bryant@cs.usm.maine.edu>
* chkpwd.c: DELETED CVS REVISION 1.3 (backed out Art's last change)
use 'cvs update -r 1.2 chkpwd.c; cvs update -A chkpwd.c' NOW to
struct CitContext *ContextList = NULL;
int ScheduledShutdown = 0;
int do_defrag = 0;
+int (*CtdlSendExpressMessageFunc) (char *, char *, char *) = NULL;
/*
* Various things that need to be initialized at startup
ERROR);
}
+ /* Run any after-each-command outines registered by modules */
+ PerformSessionHooks(EVT_CMD);
+
} while(strncasecmp(cmdbuf, "QUIT", 4));
cleanup(EXIT_NORMAL);
int CtdlGetDynamicSymbol(void);
extern int do_defrag;
+int (*CtdlSendExpressMessageFunc) (char *, char *, char *);
#include <pthread.h>
#endif
#include <limits.h>
+#include <ctype.h>
#include "dynloader.h"
#include "citadel.h"
#include "server.h"
#include "sysdep_decls.h"
+#include "tools.h"
#ifndef HAVE_SNPRINTF
#include <stdarg.h>
void DLoader_Init(char *pathname)
{
void *fcn_handle;
- const char *dl_error;
+ char dl_error[256];
DIR *dir;
+ int i;
struct dirent *dptr;
struct DLModule_Info *(*h_init_fcn) (void);
struct DLModule_Info *dl_info;
while ((dptr = readdir(dir)) != NULL) {
if (dptr->d_name[0] == '.')
continue;
+ lprintf(9, "Attempting to load %s\n", dptr->d_name);
snprintf(pathbuf, PATH_MAX, "%s/%s", pathname, dptr->d_name);
#ifdef RTLD_NOW
if (!(fcn_handle = dlopen(pathbuf, DL_LAZY)))
#endif
{
- /* dl_error = dlerror(); */
- fprintf(stderr, "DLoader_Init dlopen failed\n");
+ safestrncpy(dl_error, dlerror(), sizeof dl_error);
+ for (i=0; i<strlen(dl_error); ++i)
+ if (!isprint(dl_error[i]))
+ dl_error[i]='.';
+ fprintf(stderr, "DLoader_Init dlopen failed: %s\n",
+ dl_error);
continue;
}
h_init_fcn = (struct DLModule_Info * (*)(void))
dlsym(fcn_handle, "_Dynamic_Module_Init");
#endif
- if ((dl_error = dlerror()) != NULL) {
- fprintf(stderr, "DLoader_Init dlsym failed (%s)\n", dl_error);
+ if (dlerror() != NULL) {
+ fprintf(stderr, "DLoader_Init dlsym failed\n");
continue;
}
dl_info = h_init_fcn();
struct DLModule_Info *Dynamic_Module_Init(void)
{
+ CtdlSendExpressMessageFunc = send_express_message;
+
CtdlRegisterProtoHook(cmd_chat, "CHAT", "Begin real-time chat");
CtdlRegisterProtoHook(cmd_pexp, "PEXP", "Poll for express messages");
CtdlRegisterProtoHook(cmd_gexp, "GEXP", "Get express messages");
void cmd_sexp (char *argbuf);
void delete_express_messages(void);
void cmd_gexp(char *);
+int send_express_message(char *, char *, char *);
#define EVT_NEWROOM 3 /* Changing rooms */
#define EVT_LOGOUT 4 /* A user is logging out */
#define EVT_SETPASS 5 /* Setting or changing password */
+#define EVT_CMD 6 /* Called after each server command */
/*