struct SessionFunctionHook *SessionHookTable = NULL;
struct UserFunctionHook *UserHookTable = NULL;
-struct ProtoFunctionHook
-{
- void (*handler)(char *cmdbuf);
- char *cmd;
- char *desc;
- struct ProtoFunctionHook *next;
+struct ProtoFunctionHook {
+ void (*handler) (char *cmdbuf);
+ char *cmd;
+ char *desc;
+ struct ProtoFunctionHook *next;
} *ProtoHookList = NULL;
-void CtdlRegisterProtoHook(void (*handler)(char *), char *cmd, char *desc)
+void CtdlRegisterProtoHook(void (*handler) (char *), char *cmd, char *desc)
{
- struct ProtoFunctionHook *p = mallok(sizeof *p);
-
- if (p == NULL)
- {
- fprintf(stderr, "can't malloc new ProtoFunctionHook\n");
- exit(EXIT_FAILURE);
- }
-
- p->handler = handler;
- p->cmd = cmd;
- p->desc = desc;
- p->next = ProtoHookList;
- ProtoHookList = p;
+ struct ProtoFunctionHook *p = mallok(sizeof *p);
+
+ if (p == NULL) {
+ fprintf(stderr, "can't malloc new ProtoFunctionHook\n");
+ exit(EXIT_FAILURE);
+ }
+ p->handler = handler;
+ p->cmd = cmd;
+ p->desc = desc;
+ p->next = ProtoHookList;
+ ProtoHookList = p;
}
int DLoader_Exec_Cmd(char *cmdbuf)
{
- struct ProtoFunctionHook *p;
-
- for (p = ProtoHookList; p; p = p->next)
- {
- if (!strncasecmp(cmdbuf, p->cmd, 4))
- {
- p->handler(&cmdbuf[5]);
- return 1;
+ struct ProtoFunctionHook *p;
+
+ for (p = ProtoHookList; p; p = p->next) {
+ if (!strncasecmp(cmdbuf, p->cmd, 4)) {
+ p->handler(&cmdbuf[5]);
+ return 1;
+ }
}
- }
- return 0;
+ return 0;
}
void DLoader_Init(char *pathname)
{
- void *fcn_handle;
- const char *dl_error;
- DIR *dir;
- struct dirent *dptr;
- struct DLModule_Info* (*h_init_fcn)(void);
- struct DLModule_Info *dl_info;
-
- char pathbuf[PATH_MAX];
-
- if ((dir = opendir(pathname))==NULL)
- {
- perror("opendir");
- exit(1);
- }
-
- while ((dptr=readdir(dir))!= NULL)
- {
- if (dptr->d_name[0] == '.')
- continue;
-
- snprintf(pathbuf, PATH_MAX, "%s/%s", pathname, dptr->d_name);
+ void *fcn_handle;
+ const char *dl_error;
+ DIR *dir;
+ struct dirent *dptr;
+ struct DLModule_Info *(*h_init_fcn) (void);
+ struct DLModule_Info *dl_info;
+
+ char pathbuf[PATH_MAX];
+
+ if ((dir = opendir(pathname)) == NULL) {
+ perror("opendir");
+ exit(1);
+ }
+ while ((dptr = readdir(dir)) != NULL) {
+ if (dptr->d_name[0] == '.')
+ continue;
+
+ snprintf(pathbuf, PATH_MAX, "%s/%s", pathname, dptr->d_name);
#ifdef RTLD_NOW
- if (!(fcn_handle = dlopen(pathbuf, RTLD_NOW)))
-#else /* OpenBSD */
- if (!(fcn_handle = dlopen(pathbuf, DL_LAZY)))
+ if (!(fcn_handle = dlopen(pathbuf, RTLD_NOW)))
+#else /* OpenBSD */
+ if (!(fcn_handle = dlopen(pathbuf, DL_LAZY)))
#endif
- {
- dl_error = dlerror();
- fprintf(stderr, "DLoader_Init dlopen failed (%s)\n", dl_error);
- continue;
- }
-
- h_init_fcn = (struct DLModule_Info * (*)(void))
+ {
+ /* dl_error = dlerror(); */
+ fprintf(stderr, "DLoader_Init dlopen failed\n");
+ continue;
+ }
+ h_init_fcn = (struct DLModule_Info * (*)(void))
#ifndef __OpenBSD__
- dlsym(fcn_handle, "Dynamic_Module_Init");
+ dlsym(fcn_handle, "Dynamic_Module_Init");
#else
- dlsym(fcn_handle, "_Dynamic_Module_Init");
+ dlsym(fcn_handle, "_Dynamic_Module_Init");
#endif
- if ((dl_error = dlerror()) != NULL)
- {
- fprintf(stderr,"DLoader_Init dlsym failed (%s)\n", dl_error);
- continue;
- }
-
- dl_info = h_init_fcn();
-
- printf("Loaded module %s v%d.%d\nBy %s (%s)\n", dl_info->module_name,
- dl_info->major_version, dl_info->minor_version,
- dl_info->module_author, dl_info->module_author_email);
- } /* While */
+ if ((dl_error = dlerror()) != NULL) {
+ fprintf(stderr, "DLoader_Init dlsym failed (%s)\n", dl_error);
+ continue;
+ }
+ dl_info = h_init_fcn();
+
+ printf("Loaded module: %s v%d.%d\nBy %s (%s)\n", dl_info->module_name,
+ dl_info->major_version, dl_info->minor_version,
+ dl_info->module_author, dl_info->module_author_email);
+ } /* While */
}
-void CtdlRegisterLogHook(void (*fcn_ptr)(char *), int loglevel) {
+void CtdlRegisterLogHook(void (*fcn_ptr) (char *), int loglevel)
+{
struct LogFunctionHook *newfcn;
newfcn = (struct LogFunctionHook *)
- mallok(sizeof(struct LogFunctionHook));
+ mallok(sizeof(struct LogFunctionHook));
newfcn->next = LogHookTable;
newfcn->h_function_pointer = fcn_ptr;
newfcn->loglevel = loglevel;
LogHookTable = newfcn;
lprintf(5, "Registered a new logging function\n");
- }
+}
-void CtdlRegisterCleanupHook(void (*fcn_ptr)(void)) {
+void CtdlRegisterCleanupHook(void (*fcn_ptr) (void))
+{
struct CleanupFunctionHook *newfcn;
newfcn = (struct CleanupFunctionHook *)
- mallok(sizeof(struct CleanupFunctionHook));
+ mallok(sizeof(struct CleanupFunctionHook));
newfcn->next = CleanupHookTable;
newfcn->h_function_pointer = fcn_ptr;
CleanupHookTable = newfcn;
lprintf(5, "Registered a new cleanup function\n");
- }
+}
-void CtdlRegisterSessionHook(void (*fcn_ptr)(void), int EventType) {
+void CtdlRegisterSessionHook(void (*fcn_ptr) (void), int EventType)
+{
struct SessionFunctionHook *newfcn;
newfcn = (struct SessionFunctionHook *)
- mallok(sizeof(struct SessionFunctionHook));
+ mallok(sizeof(struct SessionFunctionHook));
newfcn->next = SessionHookTable;
newfcn->h_function_pointer = fcn_ptr;
newfcn->eventtype = EventType;
SessionHookTable = newfcn;
- lprintf(5, "Registered a new session function (type %d)\n",
+ lprintf(5, "Registered a new session function (type %d)\n",
EventType);
- }
+}
-void CtdlRegisterUserHook(void (*fcn_ptr)(char*, long), int EventType) {
+void CtdlRegisterUserHook(void (*fcn_ptr) (char *, long), int EventType)
+{
struct UserFunctionHook *newfcn;
newfcn = (struct UserFunctionHook *)
- mallok(sizeof(struct UserFunctionHook));
+ mallok(sizeof(struct UserFunctionHook));
newfcn->next = UserHookTable;
newfcn->h_function_pointer = fcn_ptr;
newfcn->eventtype = EventType;
UserHookTable = newfcn;
- lprintf(5, "Registered a new user function (type %d)\n",
+ lprintf(5, "Registered a new user function (type %d)\n",
EventType);
- }
+}
-void PerformSessionHooks(int EventType) {
+void PerformSessionHooks(int EventType)
+{
struct SessionFunctionHook *fcn;
- for (fcn = SessionHookTable; fcn != NULL; fcn = fcn->next) {
+ for (fcn = SessionHookTable; fcn != NULL; fcn = fcn->next) {
if (fcn->eventtype == EventType) {
- (*fcn->h_function_pointer)();
- }
- }
+ (*fcn->h_function_pointer) ();
+ }
}
+}
-void PerformLogHooks(int loglevel, char *logmsg) {
+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);
- }
+ (*fcn->h_function_pointer) (logmsg);
}
}
+}
-void PerformUserHooks(char *username, long usernum, int EventType) {
+void PerformUserHooks(char *username, long usernum, int EventType)
+{
struct UserFunctionHook *fcn;
- for (fcn = UserHookTable; fcn != NULL; fcn = fcn->next) {
+ for (fcn = UserHookTable; fcn != NULL; fcn = fcn->next) {
if (fcn->eventtype == EventType) {
- (*fcn->h_function_pointer)(username, usernum);
- }
- }
+ (*fcn->h_function_pointer) (username, usernum);
+ }
}
-
+}
};
/*
- * For the time being, all known userdata symbols are defined here.
+ * Static user data symbol types
*/
-#define SYM_DESIRED_SECTION 0x00000001
+enum {
+ SYM_DESIRED_SECTION, /* Used by the MIME parser */
+ SYM_MAX
+};
/*
char lastcmdname[5]; /* name of last command executed */
unsigned cs_flags; /* miscellaneous flags */
- /* feeping creaturisms... */
+ /* feeping creaturisms... */
int cs_clientdev; /* client developer ID */
int cs_clienttyp; /* client type code */
int cs_clientver; /* client version number */
char fake_username[32]; /* Fake username <bc> */
char fake_postname[32]; /* Fake postname <bc> */
char fake_hostname[25]; /* Name of the fake hostname <bc> */
- char fake_roomname[ROOMNAMELEN]; /* Name of the fake room <bc> */
+ char fake_roomname[ROOMNAMELEN]; /* Name of the fake room <bc> */
- int FloorBeingSearched; /* This is used by cmd_lrms() etc. */
+ int FloorBeingSearched; /* This is used by cmd_lrms() etc. */
struct CtdlSessData *FirstSessData;
};
/*
* Various things we need to lock and unlock
*/
-#define S_USERSUPP 0
-#define S_USER_TRANS 1
-#define S_QUICKROOM 2
-#define S_MSGMAIN 3
-#define S_CALLLOG 4
-#define S_SESSION_TABLE 5
-#define S_FLOORTAB 6
-#define S_CHATQUEUE 7
-#define S_CONTROL 8
-#define S_HOUSEKEEPING 9
-#define S_DATABASE 10
-#define S_NETDB 11
-#define MAX_SEMAPHORES 12
+enum {
+ S_USERSUPP,
+ S_USER_TRANS,
+ S_QUICKROOM,
+ S_MSGMAIN,
+ S_CALLLOG,
+ S_SESSION_TABLE,
+ S_FLOORTAB,
+ S_CHATQUEUE,
+ S_CONTROL,
+ S_HOUSEKEEPING,
+ S_DATABASE,
+ S_NETDB,
+ MAX_SEMAPHORES
+};
/*
/*
* message transfer formats
*/
-#define MT_CITADEL 0 /* Citadel proprietary */
-#define MT_DATE 1 /* We're only looking for the date */
-#define MT_RFC822 2 /* RFC822 */
-#define MT_RAW 3 /* IGnet raw format */
-#define MT_MIME 4 /* MIME-formatted message */
-#define MT_DOWNLOAD 5 /* Download a component */
+enum {
+ MT_CITADEL, /* Citadel proprietary */
+ MT_DATE, /* We're only looking for the date */
+ MT_RFC822, /* RFC822 */
+ MT_RAW, /* IGnet raw format */
+ MT_MIME, /* MIME-formatted message */
+ MT_DOWNLOAD /* Download a component */
+};
/*
* Citadel DataBases (define one for each cdb we need to open)
*/
-#define CDB_MSGMAIN 0 /* message base */
-#define CDB_USERSUPP 1 /* user file */
-#define CDB_QUICKROOM 2 /* room index */
-#define CDB_FLOORTAB 3 /* floor index */
-#define CDB_MSGLISTS 4 /* room message lists */
-#define CDB_VISIT 5 /* user/room relationships */
-#define MAXCDB 6 /* total number of CDB's defined */
+enum {
+ CDB_MSGMAIN, /* message base */
+ CDB_USERSUPP, /* user file */
+ CDB_QUICKROOM, /* room index */
+ CDB_FLOORTAB, /* floor index */
+ CDB_MSGLISTS, /* room message lists */
+ CDB_VISIT, /* user/room relationships */
+ MAXCDB /* total number of CDB's defined */
+};
struct cdbdata {
size_t len;
};
extern struct SessionFunctionHook *SessionHookTable;
+/*
+ * Event types can't be enum'ed, because they must remain consistent between
+ * builds (to allow for binary modules built somewhere else)
+ */
#define EVT_STOP 0 /* Session is terminating */
#define EVT_START 1 /* Session is starting */
#define EVT_LOGIN 2 /* A user is logging in */