Finished chatserver, bumped to version 0.37.3

This commit is contained in:
Michiel Broek 2003-04-09 19:38:06 +00:00
parent 03f3cb1c12
commit cad87472f1
4 changed files with 1551 additions and 884 deletions

View File

@ -5,7 +5,10 @@ $Id$
All other users on Intel machines (99,9% I think) can use this version. All other users on Intel machines (99,9% I think) can use this version.
v0.37.2 23-Feb-2003. v0.37.3 09-Apr-2003.
v0.37.2 23-Feb-2003 - 09-Apr-2003
general: general:
System prepared for setting the official FTSC product code, System prepared for setting the official FTSC product code,
@ -14,6 +17,8 @@ v0.37.2 23-Feb-2003.
chat stuff that is of no use anymore. The sysop shows his chat stuff that is of no use anymore. The sysop shows his
presence by running mbmon. The mbchat program is obsolete. presence by running mbmon. The mbchat program is obsolete.
Menu item 22 is added, this is user chat session. Menu item 22 is added, this is user chat session.
For chat (and sysop/user paging chat) works now using the
mbtask daemon.
common.a: common.a:
New function to get the real case of a filename. New function to get the real case of a filename.
@ -83,9 +88,9 @@ v0.37.2 23-Feb-2003.
Added CPAG command to page the sysop. Added CPAG command to page the sysop.
Added CCAN command to cancel the sysop page. Added CCAN command to cancel the sysop page.
Added CCKP command to check for a page. Added CCKP command to check for a page.
Added CCON, CCLO, CPUT and CGET commands for chatserver. The Added CCON, CCLO, CPUT and CGET commands for chatserver.
chatserver commands will be added and are in development. Implemented a chatserver, this looks like a simple IRC server
Basic chatting now works. to the users.
lang: lang:
Changed language prompts 15, 16 and 152. Changed language prompts 15, 16 and 152.

2293
configure vendored

File diff suppressed because it is too large Load Diff

View File

@ -11,7 +11,7 @@ dnl After changeing the version number, run autoconf!
PACKAGE="mbsebbs" PACKAGE="mbsebbs"
MAJOR="0" MAJOR="0"
MINOR="37" MINOR="37"
REVISION="2" REVISION="3"
VERSION="$MAJOR.$MINOR.$REVISION" VERSION="$MAJOR.$MINOR.$REVISION"
COPYRIGHT="Copyright (C) 1997-2003 Michiel Broek, All Rights Reserved" COPYRIGHT="Copyright (C) 1997-2003 Michiel Broek, All Rights Reserved"
SHORTRIGHT="Copyright (C) 1997-2003 M. Broek" SHORTRIGHT="Copyright (C) 1997-2003 M. Broek"

View File

@ -183,17 +183,17 @@ void chat_help(pid_t pid)
system_msg(pid, (char *)" Help topics available:"); system_msg(pid, (char *)" Help topics available:");
system_msg(pid, (char *)""); system_msg(pid, (char *)"");
system_msg(pid, (char *)" /BYE - Exit from chatserver"); system_msg(pid, (char *)" /BYE - Exit from chatserver");
// system_msg(pid, (char *)" /ECHO <message> - Echo message to yourself"); system_msg(pid, (char *)" /ECHO <message> - Echo message to yourself");
system_msg(pid, (char *)" /EXIT - Exit from chatserver"); system_msg(pid, (char *)" /EXIT - Exit from chatserver");
system_msg(pid, (char *)" /JOIN #channel - Join or create a channel"); system_msg(pid, (char *)" /JOIN #channel - Join or create a channel");
system_msg(pid, (char *)" /J #channel - Join or create a channel"); system_msg(pid, (char *)" /J #channel - Join or create a channel");
// system_msg(pid, (char *)" /KICK <nick> - Kick nick out of the channel"); // system_msg(pid, (char *)" /KICK <nick> - Kick nick out of the channel");
system_msg(pid, (char *)" /LIST - List active channels"); system_msg(pid, (char *)" /LIST - List active channels");
// system_msg(pid, (char *)" /NAMES - List nicks in current channel"); system_msg(pid, (char *)" /NAMES - List nicks in current channel");
system_msg(pid, (char *)" /NICK <name> - Set new nickname"); system_msg(pid, (char *)" /NICK <name> - Set new nickname");
system_msg(pid, (char *)" /PART - Leave current channel"); system_msg(pid, (char *)" /PART - Leave current channel");
system_msg(pid, (char *)" /QUIT - Exit from chatserver"); system_msg(pid, (char *)" /QUIT - Exit from chatserver");
// system_msg(pid, (char *)" /TOPIC <topic> - Set topic for current channel"); system_msg(pid, (char *)" /TOPIC <topic> - Set topic for current channel");
system_msg(pid, (char *)""); system_msg(pid, (char *)"");
system_msg(pid, (char *)" All other input (without a starting /) is sent to the channel."); system_msg(pid, (char *)" All other input (without a starting /) is sent to the channel.");
} }
@ -328,7 +328,11 @@ int part(pid_t pid, char *reason)
void chat_init(void) void chat_init(void)
{ {
int i;
memset(&chat_users, 0, sizeof(chat_users)); memset(&chat_users, 0, sizeof(chat_users));
for (i = 0; i < MAXCLIENT; i++)
chat_users[i].channel = -1;
memset(&chat_messages, 0, sizeof(chat_messages)); memset(&chat_messages, 0, sizeof(chat_messages));
memset(&chat_channels, 0, sizeof(chat_channels)); memset(&chat_channels, 0, sizeof(chat_channels));
} }
@ -453,6 +457,7 @@ char *chat_close(char *data)
if (chat_users[i].pid == atoi(pid)) { if (chat_users[i].pid == atoi(pid)) {
Syslog('-', "Closing chat for pid %s, slot %d", pid, i); Syslog('-', "Closing chat for pid %s, slot %d", pid, i);
memset(&chat_users[i], 0, sizeof(_chat_users)); memset(&chat_users[i], 0, sizeof(_chat_users));
chat_users[i].channel = -1;
sprintf(buf, "100:0;"); sprintf(buf, "100:0;");
return buf; return buf;
} }
@ -468,7 +473,7 @@ char *chat_put(char *data)
{ {
static char buf[200]; static char buf[200];
char *pid, *msg, *cmd; char *pid, *msg, *cmd;
int i, j, first; int i, j, first, count;
Syslog('-', "CPUT:%s", data); Syslog('-', "CPUT:%s", data);
memset(&buf, 0, sizeof(buf)); memset(&buf, 0, sizeof(buf));
@ -497,6 +502,10 @@ char *chat_put(char *data)
if (strncasecmp(msg, "/help", 5) == 0) { if (strncasecmp(msg, "/help", 5) == 0) {
chat_help(atoi(pid)); chat_help(atoi(pid));
goto ack; goto ack;
} else if (strncasecmp(msg, "/echo", 5) == 0) {
sprintf(buf, "%s", msg);
system_msg(chat_users[i].pid, buf);
goto ack;
} else if ((strncasecmp(msg, "/exit", 5) == 0) || } else if ((strncasecmp(msg, "/exit", 5) == 0) ||
(strncasecmp(msg, "/quit", 5) == 0) || (strncasecmp(msg, "/quit", 5) == 0) ||
(strncasecmp(msg, "/bye", 4) == 0)) { (strncasecmp(msg, "/bye", 4) == 0)) {
@ -511,10 +520,10 @@ char *chat_put(char *data)
cmd = strtok(NULL, "\0"); cmd = strtok(NULL, "\0");
Syslog('-', "\"%s\"", cmd); Syslog('-', "\"%s\"", cmd);
if ((cmd == NULL) || (cmd[0] != '#') || (strcmp(cmd, "#") == 0)) { if ((cmd == NULL) || (cmd[0] != '#') || (strcmp(cmd, "#") == 0)) {
sprintf(buf, "Try /join #channel"); sprintf(buf, "** Try /join #channel");
system_msg(chat_users[i].pid, buf); system_msg(chat_users[i].pid, buf);
} else if (chat_users[i].channel != -1) { } else if (chat_users[i].channel != -1) {
sprintf(buf, "Cannot join while in a channel"); sprintf(buf, "** Cannot join while in a channel");
system_msg(chat_users[i].pid, buf); system_msg(chat_users[i].pid, buf);
} else { } else {
Syslog('-', "Trying to join channel %s", cmd); Syslog('-', "Trying to join channel %s", cmd);
@ -542,11 +551,31 @@ char *chat_put(char *data)
system_msg(chat_users[i].pid, buf); system_msg(chat_users[i].pid, buf);
} }
goto ack; goto ack;
} else if (strncasecmp(msg, "/names", 6) == 0) {
if (chat_users[i].channel != -1) {
sprintf(buf, "Present in this channel:");
system_msg(chat_users[i].pid, buf);
count = 0;
for (j = 0; j < MAXCLIENT; j++) {
if ((chat_users[j].channel == chat_users[i].channel) && chat_users[j].pid) {
sprintf(buf, "%s %s", chat_users[j].name,
chat_users[j].chanop ?"(chanop)": chat_users[j].sysop ?"(sysop)":"");
system_msg(chat_users[i].pid, buf);
count++;
}
}
sprintf(buf, "%d user%s in this channel", count, (count == 1) ?"":"s");
system_msg(chat_users[i].pid, buf);
} else {
sprintf(buf, "** Not in a channel");
system_msg(chat_users[i].pid, buf);
}
goto ack;
} else if (strncasecmp(msg, "/nick", 5) == 0) { } else if (strncasecmp(msg, "/nick", 5) == 0) {
cmd = strtok(msg, " \0"); cmd = strtok(msg, " \0");
cmd = strtok(NULL, "\0"); cmd = strtok(NULL, "\0");
if ((cmd == NULL) || (strlen(cmd) == 0) || (strlen(cmd) > 36)) { if ((cmd == NULL) || (strlen(cmd) == 0) || (strlen(cmd) > 36)) {
sprintf(buf, "Nickname must be between 1 and 36 characters"); sprintf(buf, "** Nickname must be between 1 and 36 characters");
} else { } else {
strncpy(chat_users[i].name, cmd, 36); strncpy(chat_users[i].name, cmd, 36);
sprintf(buf, "Nick set to \"%s\"", cmd); sprintf(buf, "Nick set to \"%s\"", cmd);
@ -560,11 +589,31 @@ char *chat_put(char *data)
cmd = strtok(NULL, "\0"); cmd = strtok(NULL, "\0");
Syslog('-', "\"%s\"", cmd); Syslog('-', "\"%s\"", cmd);
if (part(chat_users[i].pid, cmd) == FALSE) { if (part(chat_users[i].pid, cmd) == FALSE) {
sprintf(buf, "Not in a channel"); sprintf(buf, "** Not in a channel");
system_msg(chat_users[i].pid, buf); system_msg(chat_users[i].pid, buf);
} }
chat_dump(); chat_dump();
goto ack; goto ack;
} else if (strncasecmp(msg, "/topic", 6) == 0) {
if (chat_users[i].channel != -1) {
if (chat_channels[chat_users[i].channel].owner == chat_users[i].pid) {
cmd = strtok(msg, " \0");
cmd = strtok(NULL, "\0");
if ((cmd == NULL) || (strlen(cmd) == 0) || (strlen(cmd) > 36)) {
sprintf(buf, "** Topic must be between 1 and 54 characters");
} else {
strncpy(chat_channels[chat_users[i].channel].topic, cmd, 54);
sprintf(buf, "Topic set to \"%s\"", cmd);
}
} else {
sprintf(buf, "** You are not the channel owner");
}
} else {
sprintf(buf, "** Not in a channel");
}
system_msg(chat_users[i].pid, buf);
chat_dump();
goto ack;
} else { } else {
/* /*
* If still here, the command was not recognized. * If still here, the command was not recognized.
@ -579,7 +628,7 @@ char *chat_put(char *data)
/* /*
* Trying messages while not in a channel * Trying messages while not in a channel
*/ */
sprintf(buf, "No channel joined. Try /join #channel"); sprintf(buf, "** No channel joined. Try /join #channel");
system_msg(chat_users[i].pid, buf); system_msg(chat_users[i].pid, buf);
chat_dump(); chat_dump();
goto ack; goto ack;