+/* $Id$ */
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <sys/time.h>
#include <sys/wait.h>
#include <string.h>
+#include <limits.h>
#include <pthread.h>
#include "citadel.h"
#include "server.h"
#include <syslog.h>
-#ifdef NEED_SELECT_H
+#ifdef HAVE_SYS_SELECT_H
#include <sys/select.h>
#endif
#include "serv_chat.h"
struct ChatLine *ChatQueue = NULL;
int ChatLastMsg = 0;
-symtab *My_Symtab = NULL; /* dyn */
extern struct CitContext *ContextList;
#define MODULE_NAME "Chat module"
#define MODULE_AUTHOR "Art Cancro"
-#define MODULE_EMAIL "ig@uncnsrd.mt-kisco.ny.us"
+#define MODULE_EMAIL "ajc@uncnsrd.mt-kisco.ny.us"
#define MAJOR_VERSION 0
-#define MINOR_VERSION 1
+#define MINOR_VERSION 2
-void Dynamic_Module_Init(struct DLModule_Info *info)
+static struct DLModule_Info info =
{
- add_symbol("cmd_chat", "CHAT", "Initiates a real-time chat session", &My_Symtab);
- add_symbol("cmd_pexp", "PEXP", "Poll for express messages", &My_Symtab);
- add_symbol("cmd_sexp", "SEXP", "Send an express message", &My_Symtab);
- strncpy(info->module_name, MODULE_NAME, 30);
- strncpy(info->module_author, MODULE_AUTHOR, 30);
- strncpy(info->module_author_email, MODULE_EMAIL, 30);
- info->major_version = MAJOR_VERSION;
- info->minor_version = MINOR_VERSION;
-}
-
-void Get_Symtab(symtab **the_symtab)
+ MODULE_NAME,
+ MODULE_AUTHOR,
+ MODULE_EMAIL,
+ MAJOR_VERSION,
+ MINOR_VERSION
+};
+
+struct DLModule_Info *Dynamic_Module_Init(void)
{
- (*the_symtab) = My_Symtab;
- return;
+ CtdlRegisterProtoHook(cmd_chat, "CHAT",
+ "Initiates a real-time chat session");
+ CtdlRegisterProtoHook(cmd_pexp, "PEXP", "Poll for express messages");
+ CtdlRegisterProtoHook(cmd_sexp, "SEXP", "Send an express message");
+ return &info;
}
void allwrite(char *cmdbuf, int flag, char *roomname, char *username)
}
clnew = (struct ChatLine *) malloc(sizeof(struct ChatLine));
- bzero(clnew, sizeof(struct ChatLine));
+ memset(clnew, 0, sizeof(struct ChatLine));
if (clnew == NULL) {
fprintf(stderr, "citserver: cannot alloc chat line: %s\n",
strerror(errno));
time(&now);
clnew->next = NULL;
clnew->chat_time = now;
- strncpy(clnew->chat_room, roomname, 19);
+ strncpy(clnew->chat_room, roomname, sizeof clnew->chat_room);
+ clnew->chat_room[sizeof clnew->chat_room - 1] = 0;
if (username)
- strncpy(clnew->chat_username, username, 31);
+ {
+ strncpy(clnew->chat_username, username,
+ sizeof clnew->chat_username);
+ clnew->chat_username[sizeof clnew->chat_username - 1] = 0;
+ }
else
clnew->chat_username[0] = '\0';
strcpy(clnew->chat_text, bcast);
char cmdbuf[256];
char *un;
char *strptr1;
- char hold_cs_room[20];
+ char hold_cs_room[ROOMNAMELEN];
int MyLastMsg, ThisLastMsg;
struct ChatLine *clptr;
struct CitContext *t_context;
strcpy(CC->chat_room, "Main room");
else
{
- strncpy(CC->chat_room, &cmdbuf[6], 20);
+ strncpy(CC->chat_room, &cmdbuf[6],
+ sizeof CC->chat_room);
+ CC->chat_room[sizeof CC->chat_room - 1] = 0;
}
allwrite("<joining room>",0, CC->chat_room, NULL);
cprintf("\n");
{
if ((clptr->chat_seq > MyLastMsg) && ((!clptr->chat_username[0]) || (!strncasecmp(un, clptr->chat_username, 32))))
{
- if ((!clptr->chat_room[0]) || (!strncasecmp(CC->chat_room, clptr->chat_room, 20)))
+ if ((!clptr->chat_room[0]) || (!strncasecmp(CC->chat_room, clptr->chat_room, ROOMNAMELEN)))
{
cprintf("%s\n", clptr->chat_text);
}
/*
* poll for express messages
*/
-void cmd_pexp(void) {
+void cmd_pexp(char *argbuf) /* arg unused */ {
struct ExpressMessage *emptr;
if (CC->FirstExpressMessage == NULL) {