Added sysop page commands
This commit is contained in:
parent
0fc8c478f4
commit
0cf00e1716
11
ChangeLog
11
ChangeLog
@ -4,6 +4,8 @@ $Id$
|
|||||||
menus do not work.
|
menus do not work.
|
||||||
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.
|
||||||
|
|
||||||
|
WARNING, sysop chat doesn't work right now.
|
||||||
|
|
||||||
|
|
||||||
v0.37.2 23-Feb-2003.
|
v0.37.2 23-Feb-2003.
|
||||||
|
|
||||||
@ -49,10 +51,14 @@ v0.37.2 23-Feb-2003.
|
|||||||
Added email reply when reading new (e)mail.
|
Added email reply when reading new (e)mail.
|
||||||
With the CIPM and CSPM mbtask commands added the parameter for
|
With the CIPM and CSPM mbtask commands added the parameter for
|
||||||
the chat channel.
|
the chat channel.
|
||||||
|
To page the sysop, the CPAG and CCAN commands to mbtask are now
|
||||||
|
used.
|
||||||
|
|
||||||
mbmon:
|
mbmon:
|
||||||
Reports sysop available or left the system when mbmon starts
|
Reports sysop available or left the system when mbmon starts
|
||||||
or stops.
|
or stops.
|
||||||
|
Reports a page from a user in row 3 of the screen (but doesn't
|
||||||
|
do chat right now).
|
||||||
|
|
||||||
mbtask:
|
mbtask:
|
||||||
Safer logging of user log messages.
|
Safer logging of user log messages.
|
||||||
@ -61,9 +67,12 @@ v0.37.2 23-Feb-2003.
|
|||||||
In personal message text the text after a ; character is not
|
In personal message text the text after a ; character is not
|
||||||
ignored anymore.
|
ignored anymore.
|
||||||
Added CSYS command to report if sysop is available.
|
Added CSYS command to report if sysop is available.
|
||||||
|
Added CPAG command to page the sysop.
|
||||||
|
Added CCAN command to cancel the sysop page.
|
||||||
|
Added CCKP command to check for a page.
|
||||||
|
|
||||||
lang:
|
lang:
|
||||||
Changed language prompts 15 and 16.
|
Changed language prompts 15, 16 and 152.
|
||||||
|
|
||||||
|
|
||||||
v0.37.1 14-Jan-2003 - 23-Feb-2003
|
v0.37.1 14-Jan-2003 - 23-Feb-2003
|
||||||
|
@ -150,9 +150,9 @@
|
|||||||
149 newuser.c |User name already exists
|
149 newuser.c |User name already exists
|
||||||
150 mail.c |Checking your mail box ...
|
150 mail.c |Checking your mail box ...
|
||||||
151 page.c | MBSE BBS Chat
|
151 page.c | MBSE BBS Chat
|
||||||
152 page.c |The SysOp is currently speaking to somebody else on
|
152 page.c |The SysOp is currently speaking to somebody else.
|
||||||
153 page.c |Try paging him again in a few minutes ...
|
153 page.c |Try paging him again in a few minutes ...
|
||||||
154 page.c ||You have paged the Sysop the maximum times allowed.
|
154 page.c |You have paged the Sysop the maximum times allowed.
|
||||||
155 page.c |Sysop currently is not available ... please leave a comment
|
155 page.c |Sysop currently is not available ... please leave a comment
|
||||||
156 mail.c |Posting message in area:
|
156 mail.c |Posting message in area:
|
||||||
157 mail.c |From :
|
157 mail.c |From :
|
||||||
|
@ -150,7 +150,7 @@ JN|berichten, nu de post lezen? [J/n]:
|
|||||||
|Gebruikersnaam bestaat al
|
|Gebruikersnaam bestaat al
|
||||||
|Even in Uw postbus kijken ...
|
|Even in Uw postbus kijken ...
|
||||||
| MBSE BBS Kletsen
|
| MBSE BBS Kletsen
|
||||||
|De Sysop is nu even met iemand anders in gesprek op
|
|De Sysop is nu even met iemand anders in gesprek.
|
||||||
|Probeer het opnieuw in enkele minuten ...
|
|Probeer het opnieuw in enkele minuten ...
|
||||||
|U heeft de Sysop meer dan het maximaal aantal keren geroepen.
|
|U heeft de Sysop meer dan het maximaal aantal keren geroepen.
|
||||||
|De Sysop is niet aanwezig ... laat een bericht achter
|
|De Sysop is niet aanwezig ... laat een bericht achter
|
||||||
|
@ -150,7 +150,7 @@ YN|messages, read your mail now? [Y/n]:
|
|||||||
|User name already exists
|
|User name already exists
|
||||||
|Checking your mail box ...
|
|Checking your mail box ...
|
||||||
| MBSE BBS Chat
|
| MBSE BBS Chat
|
||||||
|The SysOp is currently speaking to somebody else on
|
|The SysOp is currently speaking to somebody else.
|
||||||
|Try paging him again in a few minutes ...
|
|Try paging him again in a few minutes ...
|
||||||
|You have paged the Sysop the maximum times allowed.
|
|You have paged the Sysop the maximum times allowed.
|
||||||
|Sysop currently is not available ... please leave a comment
|
|Sysop currently is not available ... please leave a comment
|
||||||
|
@ -150,7 +150,7 @@ SN|mensaxes,
|
|||||||
|O nome xa existe
|
|O nome xa existe
|
||||||
|Buscando correo novo ...
|
|Buscando correo novo ...
|
||||||
| Charla de MBSE BBS
|
| Charla de MBSE BBS
|
||||||
|O Sysop est falando con outro usuario en
|
|O Sysop est falando con outro usuario.
|
||||||
|Intenta chamalo de novo dentro de un pouco ...
|
|Intenta chamalo de novo dentro de un pouco ...
|
||||||
|Xa chamacves moitas veces.
|
|Xa chamacves moitas veces.
|
||||||
|O SysOp non est ... ¨por que non lle deixas unha mensaxe?
|
|O SysOp non est ... ¨por que non lle deixas unha mensaxe?
|
||||||
|
@ -150,7 +150,7 @@ JN|Mitteilungen, moechten Sie jetzt Ihre Post lesen? [J/n]:
|
|||||||
|Dieser Benutzername existiert bereits
|
|Dieser Benutzername existiert bereits
|
||||||
|Suchen nach persoenlichen Mitteilungen, bitte warten ...
|
|Suchen nach persoenlichen Mitteilungen, bitte warten ...
|
||||||
| MBSE BBS Chat
|
| MBSE BBS Chat
|
||||||
|Der SysOp spricht gerade mit einem anderen User auf
|
|Der SysOp spricht gerade mit einem anderen User.
|
||||||
|Bitte versuchen Sie es in einigen Minuten nochmals ...
|
|Bitte versuchen Sie es in einigen Minuten nochmals ...
|
||||||
|Ihre maximale Anzahl von Sysop-Anrufen ist erreicht.
|
|Ihre maximale Anzahl von Sysop-Anrufen ist erreicht.
|
||||||
|Sysop ist zurzeit nicht erreichbar. Bitte hinterlassen Sie eine Mitteilung...
|
|Sysop ist zurzeit nicht erreichbar. Bitte hinterlassen Sie eine Mitteilung...
|
||||||
|
@ -150,7 +150,7 @@ SN|nuovi messaggi, vuoi leggere la posta ora? [S/n]:
|
|||||||
|Nome utente gia' in uso
|
|Nome utente gia' in uso
|
||||||
|Sto controllando la tua mail box ...
|
|Sto controllando la tua mail box ...
|
||||||
| MBSE BBS Chat
|
| MBSE BBS Chat
|
||||||
|Il SysOp sta parlando con un altro utente su
|
|Il SysOp sta parlando con un altro utente.
|
||||||
|Prova a chiamarlo di nuovo fra pochi minuti ...
|
|Prova a chiamarlo di nuovo fra pochi minuti ...
|
||||||
|Hai gia' chiamato il SysOp per il massimo numero di volte consentito.
|
|Hai gia' chiamato il SysOp per il massimo numero di volte consentito.
|
||||||
|Il SysOp non e' al momento disponibile ... lascia un messaggio
|
|Il SysOp non e' al momento disponibile ... lascia un messaggio
|
||||||
|
@ -150,7 +150,7 @@ SN|mensajes,
|
|||||||
|El nombre ya existe
|
|El nombre ya existe
|
||||||
|Buscando correo nuevo ...
|
|Buscando correo nuevo ...
|
||||||
| Charla de mbsebbs
|
| Charla de mbsebbs
|
||||||
|El Sysop est hablando con otro usuario en
|
|El Sysop est hablando con otro usuario.
|
||||||
|Intenta llamarlo de nuevo dentro de un rato ...
|
|Intenta llamarlo de nuevo dentro de un rato ...
|
||||||
|Ya has llamado muchas veces.
|
|Ya has llamado muchas veces.
|
||||||
|El SysOp no est ... ¨por que no le dejas un mensaje?
|
|El SysOp no est ... ¨por que no le dejas un mensaje?
|
||||||
|
167
mbmon/mutil.c
167
mbmon/mutil.c
@ -41,39 +41,39 @@ int bbs_free;
|
|||||||
|
|
||||||
unsigned char readkey(int y, int x, int fg, int bg)
|
unsigned char readkey(int y, int x, int fg, int bg)
|
||||||
{
|
{
|
||||||
int rc = -1, i;
|
int rc = -1, i;
|
||||||
unsigned char ch = 0;
|
unsigned char ch = 0;
|
||||||
|
|
||||||
if ((ttyfd = open("/dev/tty", O_RDWR|O_NONBLOCK)) < 0) {
|
if ((ttyfd = open("/dev/tty", O_RDWR|O_NONBLOCK)) < 0) {
|
||||||
perror("open /dev/tty");
|
perror("open /dev/tty");
|
||||||
exit(MBERR_TTYIO_ERROR);
|
exit(MBERR_TTYIO_ERROR);
|
||||||
}
|
}
|
||||||
Setraw();
|
Setraw();
|
||||||
|
|
||||||
i = 0;
|
i = 0;
|
||||||
while (rc == -1) {
|
while (rc == -1) {
|
||||||
if ((i % 10) == 0)
|
if ((i % 10) == 0)
|
||||||
show_date(fg, bg, 0, 0);
|
show_date(fg, bg, 0, 0);
|
||||||
|
|
||||||
locate(y, x);
|
locate(y, x);
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
rc = Waitchar(&ch, 5);
|
rc = Waitchar(&ch, 5);
|
||||||
if ((rc == 1) && (ch != KEY_ESCAPE))
|
if ((rc == 1) && (ch != KEY_ESCAPE))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if ((rc == 1) && (ch == KEY_ESCAPE))
|
if ((rc == 1) && (ch == KEY_ESCAPE))
|
||||||
rc = Escapechar(&ch);
|
rc = Escapechar(&ch);
|
||||||
|
|
||||||
if (rc == 1)
|
if (rc == 1)
|
||||||
break;
|
break;
|
||||||
i++;
|
i++;
|
||||||
Nopper();
|
Nopper();
|
||||||
}
|
}
|
||||||
|
|
||||||
Unsetraw();
|
Unsetraw();
|
||||||
close(ttyfd);
|
close(ttyfd);
|
||||||
|
|
||||||
return ch;
|
return ch;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -369,48 +369,79 @@ void set_color(int f, int b)
|
|||||||
static time_t lasttime;
|
static time_t lasttime;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Show the current date & time in the second status row
|
* Show the current date & time in the second status row.
|
||||||
|
* Show user paging status in third screen row.
|
||||||
*/
|
*/
|
||||||
void show_date(int fg, int bg, int y, int x)
|
void show_date(int fg, int bg, int y, int x)
|
||||||
{
|
{
|
||||||
time_t now;
|
time_t now;
|
||||||
char *p, buf[128];
|
char *p, buf[128], *pid, *page, *reason;
|
||||||
|
|
||||||
now = time(NULL);
|
now = time(NULL);
|
||||||
if (now != lasttime) {
|
if (now != lasttime) {
|
||||||
lasttime = now;
|
lasttime = now;
|
||||||
set_color(LIGHTGREEN, BLUE);
|
set_color(LIGHTGREEN, BLUE);
|
||||||
p = ctime(&now);
|
p = ctime(&now);
|
||||||
Striplf(p);
|
Striplf(p);
|
||||||
mvprintw(1, 44, (char *)"%s TZUTC %s", p, gmtoffset(now));
|
mvprintw(1, 44, (char *)"%s TZUTC %s", p, gmtoffset(now));
|
||||||
p = asctime(gmtime(&now));
|
p = asctime(gmtime(&now));
|
||||||
Striplf(p);
|
Striplf(p);
|
||||||
mvprintw(2, 44, (char *)"%s UTC", p);
|
mvprintw(2, 44, (char *)"%s UTC", p);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Indicator if bbs is free
|
* Indicator if bbs is free
|
||||||
*/
|
*/
|
||||||
strcpy(buf, SockR("SFRE:0;"));
|
strcpy(buf, SockR("SFRE:0;"));
|
||||||
if (strncmp(buf, "100:0;", 6) == 0) {
|
if (strncmp(buf, "100:0;", 6) == 0) {
|
||||||
strcpy(buf, SockR("SBBS:0;"));
|
strcpy(buf, SockR("SBBS:0;"));
|
||||||
if (strncmp(buf, "100:2,1", 7) == 0) {
|
if (strncmp(buf, "100:2,1", 7) == 0) {
|
||||||
set_color(WHITE, RED);
|
set_color(WHITE, RED);
|
||||||
mvprintw(2,74, (char *)" Down ");
|
mvprintw(2,74, (char *)" Down ");
|
||||||
} else {
|
} else {
|
||||||
set_color(WHITE, BLUE);
|
set_color(WHITE, BLUE);
|
||||||
mvprintw(2,74, (char *)" Free ");
|
mvprintw(2,74, (char *)" Free ");
|
||||||
}
|
}
|
||||||
bbs_free = TRUE;
|
bbs_free = TRUE;
|
||||||
} else {
|
} else {
|
||||||
set_color(WHITE, RED);
|
set_color(WHITE, RED);
|
||||||
mvprintw(2,74, (char *)" Busy ");
|
mvprintw(2,74, (char *)" Busy ");
|
||||||
bbs_free = FALSE;
|
bbs_free = FALSE;
|
||||||
}
|
|
||||||
|
|
||||||
if (y && x)
|
|
||||||
locate(y, x);
|
|
||||||
set_color(fg, bg);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Check paging status
|
||||||
|
*/
|
||||||
|
strcpy(buf, SockR("CCKP:0;"));
|
||||||
|
if (strcmp(buf, "100:0;") == 0) {
|
||||||
|
locate(3, 1);
|
||||||
|
set_color(LIGHTGRAY, BLACK);
|
||||||
|
clrtoeol();
|
||||||
|
} else {
|
||||||
|
pid = strtok(buf, ",");
|
||||||
|
pid = strtok(NULL, ",");
|
||||||
|
page = strtok(NULL, ",");
|
||||||
|
reason = strtok(NULL, "\0");
|
||||||
|
reason[strlen(reason)-1] = '\0';
|
||||||
|
if (strlen(reason) > 60)
|
||||||
|
reason[60] = '\0';
|
||||||
|
|
||||||
|
locate(3, 1);
|
||||||
|
if (strcmp(page, "1")) {
|
||||||
|
set_color(RED, BLACK);
|
||||||
|
mvprintw(3, 1, " Old page (%s) %-60s", pid, reason);
|
||||||
|
if ((now % 10) == 0) /* Every 10 seconds */
|
||||||
|
putchar(7);
|
||||||
|
} else {
|
||||||
|
set_color(LIGHTRED, BLACK);
|
||||||
|
mvprintw(3, 1, " Sysop page (%s) %-60s", pid, reason);
|
||||||
|
putchar(7); /* Each second */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (y && x)
|
||||||
|
locate(y, x);
|
||||||
|
set_color(fg, bg);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -528,13 +559,13 @@ void working(int txno, int y, int x)
|
|||||||
*/
|
*/
|
||||||
void clr_index()
|
void clr_index()
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
set_color(LIGHTGRAY, BLACK);
|
set_color(LIGHTGRAY, BLACK);
|
||||||
for (i = 3; i <= (LINES - 1); i++) {
|
for (i = 4; i <= (LINES - 1); i++) {
|
||||||
locate(i, 1);
|
locate(i, 1);
|
||||||
clrtoeol();
|
clrtoeol();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ SRCS = signature.c filesub.c language.c mbtoberep.c \
|
|||||||
bye.c funcs.c mail.c \
|
bye.c funcs.c mail.c \
|
||||||
newuser.c pinfo.c timecheck.c change.c \
|
newuser.c pinfo.c timecheck.c change.c \
|
||||||
exitinfo.c mball.c mbsebbs.c menu.c pop3.c lastcallers.c \
|
exitinfo.c mball.c mbsebbs.c menu.c pop3.c lastcallers.c \
|
||||||
timeout.c chat.c file.c mbchat.c mbstat.c misc.c \
|
timeout.c chat.c file.c mbstat.c misc.c \
|
||||||
offline.c user.c mbnewusr.c input.c whoson.c \
|
offline.c user.c mbnewusr.c input.c whoson.c \
|
||||||
door.c dispfile.c userlist.c timestats.c logentry.c
|
door.c dispfile.c userlist.c timestats.c logentry.c
|
||||||
HDRS = signature.h filesub.h language.h mbsebbs.h misc.h offline.h \
|
HDRS = signature.h filesub.h language.h mbsebbs.h misc.h offline.h \
|
||||||
@ -38,8 +38,6 @@ MBALL_OBJS = mball.o
|
|||||||
MBALL_LIBS = ../lib/libmemwatch.a ../lib/libclcomm.a ../lib/libcommon.a ../lib/libdbase.a
|
MBALL_LIBS = ../lib/libmemwatch.a ../lib/libclcomm.a ../lib/libcommon.a ../lib/libdbase.a
|
||||||
MBLANG_OBJS = mblang.o
|
MBLANG_OBJS = mblang.o
|
||||||
MBLANG_LIBS = ../lib/libmemwatch.a ../lib/libclcomm.a ../lib/libcommon.a ../lib/libdbase.a
|
MBLANG_LIBS = ../lib/libmemwatch.a ../lib/libclcomm.a ../lib/libcommon.a ../lib/libdbase.a
|
||||||
MBCHAT_OBJS = mbchat.o
|
|
||||||
MBCHAT_LIBS = ../lib/libmemwatch.a ../lib/libclcomm.a ../lib/libcommon.a ../lib/libdbase.a
|
|
||||||
MBSTAT_OBJS = mbstat.o
|
MBSTAT_OBJS = mbstat.o
|
||||||
MBSTAT_LIBS = ../lib/libmemwatch.a ../lib/libclcomm.a ../lib/libcommon.a ../lib/libdbase.a
|
MBSTAT_LIBS = ../lib/libmemwatch.a ../lib/libclcomm.a ../lib/libcommon.a ../lib/libdbase.a
|
||||||
MBTOBE_OBJS = mbtoberep.o
|
MBTOBE_OBJS = mbtoberep.o
|
||||||
@ -47,7 +45,7 @@ MBTOBE_LIBS = ../lib/libmemwatch.a ../lib/libclcomm.a ../lib/libcommon.a ../lib/
|
|||||||
MBUSER_OBJS = mbuser.o
|
MBUSER_OBJS = mbuser.o
|
||||||
MBUSER_LIBS = ../lib/libmemwatch.a ../lib/libclcomm.a ../lib/libcommon.a ../lib/libdbase.a
|
MBUSER_LIBS = ../lib/libmemwatch.a ../lib/libclcomm.a ../lib/libcommon.a ../lib/libdbase.a
|
||||||
OTHER = Makefile
|
OTHER = Makefile
|
||||||
TARGET = mbsebbs mbnewusr mball mblang mbchat mbstat mbtoberep mbuser
|
TARGET = mbsebbs mbnewusr mball mblang mbstat mbtoberep mbuser
|
||||||
|
|
||||||
#############################################################################################################
|
#############################################################################################################
|
||||||
|
|
||||||
@ -75,10 +73,6 @@ mblang: ${MBLANG_OBJS} ${MBLANG_LIBS}
|
|||||||
${CC} -o mblang ${MBLANG_OBJS} ${LIBS} ${MBLANG_LIBS}
|
${CC} -o mblang ${MBLANG_OBJS} ${LIBS} ${MBLANG_LIBS}
|
||||||
strip mblang
|
strip mblang
|
||||||
|
|
||||||
mbchat: ${MBCHAT_OBJS} ${MBCHAT_LIBS}
|
|
||||||
${CC} -o mbchat ${MBCHAT_OBJS} ${LIBS} ${MBCHAT_LIBS}
|
|
||||||
strip mbchat
|
|
||||||
|
|
||||||
mbstat: ${MBSTAT_OBJS} ${MBSTAT_LIBS}
|
mbstat: ${MBSTAT_OBJS} ${MBSTAT_LIBS}
|
||||||
${CC} -o mbstat ${MBSTAT_OBJS} ${LIBS} ${MBSTAT_LIBS}
|
${CC} -o mbstat ${MBSTAT_OBJS} ${LIBS} ${MBSTAT_LIBS}
|
||||||
strip mbstat
|
strip mbstat
|
||||||
@ -99,11 +93,10 @@ install: all
|
|||||||
${INSTALL} -c -s -o ${OWNER} -g ${GROUP} -m 6711 mbnewusr ${BINDIR}
|
${INSTALL} -c -s -o ${OWNER} -g ${GROUP} -m 6711 mbnewusr ${BINDIR}
|
||||||
${INSTALL} -c -s -o ${OWNER} -g ${GROUP} -m 0711 mball ${BINDIR}
|
${INSTALL} -c -s -o ${OWNER} -g ${GROUP} -m 0711 mball ${BINDIR}
|
||||||
${INSTALL} -c -s -o ${OWNER} -g ${GROUP} -m 0711 mblang ${BINDIR}
|
${INSTALL} -c -s -o ${OWNER} -g ${GROUP} -m 0711 mblang ${BINDIR}
|
||||||
${INSTALL} -c -s -o ${OWNER} -g ${GROUP} -m 0711 mbchat ${BINDIR}
|
|
||||||
${INSTALL} -c -s -o ${OWNER} -g ${GROUP} -m 0711 mbstat ${BINDIR}
|
${INSTALL} -c -s -o ${OWNER} -g ${GROUP} -m 0711 mbstat ${BINDIR}
|
||||||
${INSTALL} -c -s -o ${OWNER} -g ${GROUP} -m 0711 mbtoberep ${BINDIR}
|
${INSTALL} -c -s -o ${OWNER} -g ${GROUP} -m 0711 mbtoberep ${BINDIR}
|
||||||
${INSTALL} -c -s -o `id -un` -g `id -gn` -m 6711 mbuser ${BINDIR}
|
${INSTALL} -c -s -o `id -un` -g `id -gn` -m 6711 mbuser ${BINDIR}
|
||||||
@rm -f mbuseradd mbpasswd mblogin
|
@rm -f mbuseradd mbpasswd mblogin mbchat
|
||||||
|
|
||||||
filelist: Makefile
|
filelist: Makefile
|
||||||
BASE=`pwd`; \
|
BASE=`pwd`; \
|
||||||
@ -164,7 +157,6 @@ lastcallers.o: ../config.h ../lib/libs.h ../lib/memwatch.h ../lib/mbse.h ../lib/
|
|||||||
timeout.o: ../config.h ../lib/libs.h ../lib/memwatch.h ../lib/mbse.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/common.h ../lib/clcomm.h ../lib/msg.h timeout.h funcs.h bye.h filesub.h language.h
|
timeout.o: ../config.h ../lib/libs.h ../lib/memwatch.h ../lib/mbse.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/common.h ../lib/clcomm.h ../lib/msg.h timeout.h funcs.h bye.h filesub.h language.h
|
||||||
chat.o: ../config.h ../lib/libs.h ../lib/memwatch.h ../lib/mbse.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/common.h ../lib/clcomm.h chat.h funcs.h input.h language.h misc.h whoson.h
|
chat.o: ../config.h ../lib/libs.h ../lib/memwatch.h ../lib/mbse.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/common.h ../lib/clcomm.h chat.h funcs.h input.h language.h misc.h whoson.h
|
||||||
file.o: ../config.h ../lib/libs.h ../lib/memwatch.h ../lib/mbse.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/common.h ../lib/clcomm.h filesub.h file.h funcs.h input.h language.h misc.h timeout.h exitinfo.h whoson.h change.h
|
file.o: ../config.h ../lib/libs.h ../lib/memwatch.h ../lib/mbse.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/common.h ../lib/clcomm.h filesub.h file.h funcs.h input.h language.h misc.h timeout.h exitinfo.h whoson.h change.h
|
||||||
mbchat.o: ../config.h ../lib/libs.h ../lib/memwatch.h ../lib/structs.h ../lib/common.h ../lib/clcomm.h ../lib/mberrors.h
|
|
||||||
mbstat.o: ../config.h ../lib/libs.h ../lib/memwatch.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/common.h ../lib/clcomm.h ../lib/dbcfg.h ../lib/mberrors.h mbstat.h
|
mbstat.o: ../config.h ../lib/libs.h ../lib/memwatch.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/common.h ../lib/clcomm.h ../lib/dbcfg.h ../lib/mberrors.h mbstat.h
|
||||||
misc.o: ../config.h ../lib/libs.h ../lib/memwatch.h ../lib/mbse.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/clcomm.h ../lib/common.h ../lib/mberrors.h funcs.h input.h language.h misc.h timeout.h exitinfo.h
|
misc.o: ../config.h ../lib/libs.h ../lib/memwatch.h ../lib/mbse.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/clcomm.h ../lib/common.h ../lib/mberrors.h funcs.h input.h language.h misc.h timeout.h exitinfo.h
|
||||||
offline.o: ../config.h ../lib/libs.h ../lib/memwatch.h ../lib/structs.h ../lib/mbse.h ../lib/users.h ../lib/records.h ../lib/bluewave.h ../lib/common.h ../lib/clcomm.h ../lib/msgtext.h ../lib/msg.h mail.h funcs.h input.h language.h file.h filesub.h exitinfo.h timeout.h msgutil.h pop3.h offline.h whoson.h
|
offline.o: ../config.h ../lib/libs.h ../lib/memwatch.h ../lib/structs.h ../lib/mbse.h ../lib/users.h ../lib/records.h ../lib/bluewave.h ../lib/common.h ../lib/clcomm.h ../lib/msgtext.h ../lib/msg.h mail.h funcs.h input.h language.h file.h filesub.h exitinfo.h timeout.h msgutil.h pop3.h offline.h whoson.h
|
||||||
|
@ -49,9 +49,7 @@
|
|||||||
#define DEVICE "/tmp/chatdev"
|
#define DEVICE "/tmp/chatdev"
|
||||||
|
|
||||||
|
|
||||||
|
void Chat(int channel)
|
||||||
|
|
||||||
void Chat(void)
|
|
||||||
{
|
{
|
||||||
FILE *pGetDev, *pLog, *pBusy, *pChat;
|
FILE *pGetDev, *pLog, *pBusy, *pChat;
|
||||||
int ch;
|
int ch;
|
||||||
@ -60,7 +58,7 @@ void Chat(void)
|
|||||||
char *sLog = NULL;
|
char *sLog = NULL;
|
||||||
char temp[81] = "";
|
char temp[81] = "";
|
||||||
|
|
||||||
if(CFG.iAutoLog)
|
if (CFG.iAutoLog)
|
||||||
sLog = calloc(56, sizeof(char));
|
sLog = calloc(56, sizeof(char));
|
||||||
|
|
||||||
WhosDoingWhat(SYSOPCHAT);
|
WhosDoingWhat(SYSOPCHAT);
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
#ifndef _CHAT_H
|
#ifndef _CHAT_H
|
||||||
#define _CHAT_H
|
#define _CHAT_H
|
||||||
|
|
||||||
void Chat(void); /* Chat Function */
|
/* $Id$ */
|
||||||
|
|
||||||
|
void Chat(int); /* Chat Function */
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
259
mbsebbs/mbchat.c
259
mbsebbs/mbchat.c
@ -1,259 +0,0 @@
|
|||||||
/*****************************************************************************
|
|
||||||
*
|
|
||||||
* $Id$
|
|
||||||
* Purpose ...............: Sysop chat utility.
|
|
||||||
*
|
|
||||||
*****************************************************************************
|
|
||||||
* Copyright (C) 1997-2002
|
|
||||||
*
|
|
||||||
* Michiel Broek FIDO: 2:2801/2802
|
|
||||||
* Beekmansbos 10
|
|
||||||
* 1971 BV IJmuiden
|
|
||||||
* the Netherlands
|
|
||||||
*
|
|
||||||
* This file is part of MBSE BBS.
|
|
||||||
*
|
|
||||||
* This BBS is free software; you can redistribute it and/or modify it
|
|
||||||
* under the terms of the GNU General Public License as published by the
|
|
||||||
* Free Software Foundation; either version 2, or (at your option) any
|
|
||||||
* later version.
|
|
||||||
*
|
|
||||||
* MBSE BBS is distributed in the hope that it will be useful, but
|
|
||||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
* General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with MBSE BBS; see the file COPYING. If not, write to the Free
|
|
||||||
* Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
||||||
*****************************************************************************/
|
|
||||||
|
|
||||||
#include "../config.h"
|
|
||||||
#include "../lib/libs.h"
|
|
||||||
#include "../lib/memwatch.h"
|
|
||||||
#include "../lib/structs.h"
|
|
||||||
#include "../lib/common.h"
|
|
||||||
#include "../lib/clcomm.h"
|
|
||||||
#include "../lib/mberrors.h"
|
|
||||||
|
|
||||||
|
|
||||||
char *ttime2(void); /* Returns current time HH:MM */
|
|
||||||
|
|
||||||
struct sysconfig CFG;
|
|
||||||
|
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
|
||||||
{
|
|
||||||
FILE *fp1, *pChatDev, *pPid, *pLog;
|
|
||||||
FILE *pDataFile;
|
|
||||||
int ch;
|
|
||||||
int iLetter = 0;
|
|
||||||
short ipid;
|
|
||||||
char *tty;
|
|
||||||
char *sStr1= (char *)"";
|
|
||||||
char pid[81];
|
|
||||||
char pid1[20];
|
|
||||||
char sTTY[10];
|
|
||||||
char *sLog= (char *)"";
|
|
||||||
char *Config, *FileName, *LogName;
|
|
||||||
char *BBSpath;
|
|
||||||
|
|
||||||
#ifdef MEMWATCH
|
|
||||||
mwInit();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
FileName = calloc(PATH_MAX, sizeof(char));
|
|
||||||
Config = calloc(PATH_MAX, sizeof(char));
|
|
||||||
LogName = calloc(PATH_MAX, sizeof(char));
|
|
||||||
|
|
||||||
if ((BBSpath = getenv("MBSE_ROOT")) == NULL) {
|
|
||||||
printf("Could not get MBSE_ROOT environment variable\n");
|
|
||||||
printf("Please set the environment variable ie:\n\n");
|
|
||||||
printf("\"MBSE_ROOT=/usr/local/mbse;export MBSE_ROOT\"\n\n");
|
|
||||||
#ifdef MEMWATCH
|
|
||||||
mwTerm();
|
|
||||||
#endif
|
|
||||||
exit(MBERR_INIT_ERROR);
|
|
||||||
}
|
|
||||||
|
|
||||||
sprintf(FileName, "%s/etc/config.data", BBSpath);
|
|
||||||
|
|
||||||
if ((pDataFile = fopen(FileName, "rb")) == NULL) {
|
|
||||||
perror("\n\nFATAL ERROR: Can't open config.data for reading!!!");
|
|
||||||
printf("Please run mbsetup to create configuration file.\n");
|
|
||||||
printf("Or check that your MBSE_ROOT variable is set to the BBS Path!\n");
|
|
||||||
#ifdef MEMWATCH
|
|
||||||
mwTerm();
|
|
||||||
#endif
|
|
||||||
exit(MBERR_CONFIG_ERROR);
|
|
||||||
}
|
|
||||||
fread(&CFG, sizeof(CFG), 1, pDataFile);
|
|
||||||
fclose(pDataFile);
|
|
||||||
free(Config);
|
|
||||||
free(FileName);
|
|
||||||
|
|
||||||
if(CFG.iAutoLog)
|
|
||||||
sLog = calloc(56, sizeof(char));
|
|
||||||
|
|
||||||
if(argc != 2) {
|
|
||||||
printf("\nSCHAT: MBSE BBS %s Sysop chat facilty\n", VERSION);
|
|
||||||
printf(" %s\n", COPYRIGHT);
|
|
||||||
|
|
||||||
printf("\nCommand-line parameters:\n\n");
|
|
||||||
|
|
||||||
printf(" %s <device>", *(argv));
|
|
||||||
|
|
||||||
printf("\n");
|
|
||||||
#ifdef MEMWATCH
|
|
||||||
mwTerm();
|
|
||||||
#endif
|
|
||||||
exit(MBERR_COMMANDLINE);
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("\f");
|
|
||||||
|
|
||||||
if (strncmp( (tty = *(argv+1)), "/dev/", 5 ) == 0 ) {
|
|
||||||
tty+=5;
|
|
||||||
sprintf(pid,"%s/bbs/exitinfo", CFG.bbs_usersdir);
|
|
||||||
strcpy(sTTY,"");
|
|
||||||
} else {
|
|
||||||
sprintf(pid,"%s/bbs/exitinfo", CFG.bbs_usersdir);
|
|
||||||
strcpy(sTTY,"/dev/");
|
|
||||||
}
|
|
||||||
|
|
||||||
strcat(sTTY, *(argv + 1));
|
|
||||||
|
|
||||||
if(( fp1 = fopen(sTTY,"w")) == NULL)
|
|
||||||
perror("Error");
|
|
||||||
|
|
||||||
if(( pPid = fopen(pid,"r")) == NULL) {
|
|
||||||
printf("\nThere is no user on %s\n", pid);
|
|
||||||
#ifdef MEMWATCH
|
|
||||||
mwTerm();
|
|
||||||
#endif
|
|
||||||
exit(MBERR_COMMANDLINE);
|
|
||||||
} else {
|
|
||||||
fgets(pid1,19,pPid);
|
|
||||||
fclose(pPid);
|
|
||||||
}
|
|
||||||
|
|
||||||
ipid = atoi(pid1);
|
|
||||||
|
|
||||||
if(( pChatDev = fopen("/tmp/chatdev","w")) == NULL)
|
|
||||||
perror("Can't open file");
|
|
||||||
else {
|
|
||||||
sStr1=ttyname(1);
|
|
||||||
fprintf(pChatDev,"%s", sStr1);
|
|
||||||
fclose(pChatDev);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!CFG.iExternalChat || (strlen(CFG.sExternalChat) < 1) || \
|
|
||||||
(access(CFG.sExternalChat, X_OK) != 0)) {
|
|
||||||
printf("Users chatting device: %s\n", sTTY);
|
|
||||||
printf("Wait until the user is ready");
|
|
||||||
printf("Press ESC to exit chat\n\n");
|
|
||||||
|
|
||||||
umask(00000);
|
|
||||||
chmod("/tmp/chatdev", 00777);
|
|
||||||
chmod(sStr1, 00777);
|
|
||||||
|
|
||||||
sleep(2);
|
|
||||||
|
|
||||||
Setraw();
|
|
||||||
|
|
||||||
sleep(2);
|
|
||||||
|
|
||||||
while (1) {
|
|
||||||
ch = getc(stdin);
|
|
||||||
ch &= '\377';
|
|
||||||
if (ch == '\033')
|
|
||||||
break;
|
|
||||||
putchar(ch);
|
|
||||||
putc(ch, fp1);
|
|
||||||
|
|
||||||
if(CFG.iAutoLog) {
|
|
||||||
if(ch != '\b')
|
|
||||||
iLetter++; /* Count the letters user presses for logging */
|
|
||||||
sprintf(sLog, "%s%c", sLog, ch);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ch == '\n') {
|
|
||||||
ch = '\r';
|
|
||||||
putchar(ch);
|
|
||||||
putc(ch, fp1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ch == '\r') {
|
|
||||||
ch = '\n';
|
|
||||||
putchar(ch);
|
|
||||||
putc(ch, fp1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ch == '\b') {
|
|
||||||
ch = ' ';
|
|
||||||
putchar(ch);
|
|
||||||
putc(ch, fp1);
|
|
||||||
ch = '\b';
|
|
||||||
putchar(ch);
|
|
||||||
putc(ch, fp1);
|
|
||||||
|
|
||||||
if(CFG.iAutoLog)
|
|
||||||
sLog[--iLetter] = '\0';
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Check if log chat is on and if so log chat to disk */
|
|
||||||
if(CFG.iAutoLog) {
|
|
||||||
if(iLetter >= 55 || ch == '\n') {
|
|
||||||
iLetter = 0;
|
|
||||||
sprintf(LogName, "%s/log/chat.log", BBSpath);
|
|
||||||
if(( pLog = fopen(LogName, "a+")) != NULL) {
|
|
||||||
fflush(pLog);
|
|
||||||
fprintf(pLog, "%s [%s]: %s\n", CFG.sysop_name, ttime2(), sLog);
|
|
||||||
fclose(pLog);
|
|
||||||
strcpy(sLog, "");
|
|
||||||
} else
|
|
||||||
perror("\nCan't open chat.log");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} /* while chatting */
|
|
||||||
// fprintf(fp1, "The sysop ended the chat, press a key.\n");
|
|
||||||
} else {
|
|
||||||
system(CFG.sExternalChat);
|
|
||||||
printf("\n\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
fclose(fp1);
|
|
||||||
sleep(2);
|
|
||||||
Unsetraw();
|
|
||||||
sleep(2);
|
|
||||||
unlink("/tmp/chatdev");
|
|
||||||
unlink("/tmp/.BusyChatting");
|
|
||||||
fclose(fp1);
|
|
||||||
printf("Done chatting.\n");
|
|
||||||
#ifdef MEMWATCH
|
|
||||||
mwTerm();
|
|
||||||
#endif
|
|
||||||
exit(MBERR_OK);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This function returns the date for today, to test against other functions
|
|
||||||
* HH:MM (HOUR-MINUTE)
|
|
||||||
*/
|
|
||||||
char *ttime2()
|
|
||||||
{
|
|
||||||
struct tm *l_date; /* Structure for Date */
|
|
||||||
time_t Time_Now;
|
|
||||||
static char Ttime2[9];
|
|
||||||
|
|
||||||
Time_Now = time(NULL);
|
|
||||||
l_date = localtime(&Time_Now);
|
|
||||||
|
|
||||||
sprintf(Ttime2, "%02d:%02d", l_date->tm_hour,l_date->tm_min);
|
|
||||||
|
|
||||||
return(Ttime2);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
@ -196,8 +196,8 @@ void menu()
|
|||||||
* before calling chat(). Make sure if a second user
|
* before calling chat(). Make sure if a second user
|
||||||
* logs in, that .BusyChatting does exist.
|
* logs in, that .BusyChatting does exist.
|
||||||
*/
|
*/
|
||||||
if(CFG.iChatPromptChk && (access("/tmp/chatdev", R_OK) == 0) && (access("/tmp/.BusyChatting", F_OK) != 0))
|
if (CFG.iChatPromptChk && (access("/tmp/chatdev", R_OK) == 0) && (access("/tmp/.BusyChatting", F_OK) != 0))
|
||||||
Chat();
|
Chat(0);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check users timeleft
|
* Check users timeleft
|
||||||
|
153
mbsebbs/page.c
153
mbsebbs/page.c
@ -47,19 +47,22 @@
|
|||||||
#include "language.h"
|
#include "language.h"
|
||||||
|
|
||||||
|
|
||||||
|
extern pid_t mypid;
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Function to Page Sysop
|
* Function to Page Sysop
|
||||||
*/
|
*/
|
||||||
void Page_Sysop(char *String)
|
void Page_Sysop(char *String)
|
||||||
{
|
{
|
||||||
FILE *pWritingDevice;
|
int i;
|
||||||
int i, iOpenDevice = FALSE; /* Flag to check if you can write to CFG.sChatDevice */
|
char *Reason, temp[81];
|
||||||
char *Reason, temp[81];
|
static char buf[128];
|
||||||
|
|
||||||
Reason = calloc(81, sizeof(char));
|
Reason = calloc(81, sizeof(char));
|
||||||
|
|
||||||
clear();
|
clear();
|
||||||
colour(12, 0);
|
colour(LIGHTRED, BLACK);
|
||||||
/* MBSE BBS Chat */
|
/* MBSE BBS Chat */
|
||||||
Center((char *) Language(151));
|
Center((char *) Language(151));
|
||||||
|
|
||||||
@ -99,24 +102,10 @@ void Page_Sysop(char *String)
|
|||||||
|
|
||||||
Syslog('+', "Chat Reason: %s", temp);
|
Syslog('+', "Chat Reason: %s", temp);
|
||||||
strcpy(Reason, temp);
|
strcpy(Reason, temp);
|
||||||
|
} else {
|
||||||
|
sprintf(Reason, "User want's to chat");
|
||||||
}
|
}
|
||||||
|
|
||||||
// if (access("/tmp/.BusyChatting", F_OK) == 0) {
|
|
||||||
// if((pBusy = fopen("/tmp/.BusyChatting", "r")) == NULL)
|
|
||||||
// WriteError("Unable to open BusyChatting file", pTTY);
|
|
||||||
// else {
|
|
||||||
// fscanf(pBusy, "%10s", temp);
|
|
||||||
// fclose(pBusy);
|
|
||||||
// }
|
|
||||||
// colour(13, 0);
|
|
||||||
// printf("%s%s\n", (char *) Language(152), temp);
|
|
||||||
// pout(10, 0, (char *) Language(153));
|
|
||||||
// Enter(2);
|
|
||||||
// Syslog('+', "SysOp was busy chatting to user on %s", temp);
|
|
||||||
// Pause();
|
|
||||||
// free(Reason);
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
|
|
||||||
CFG.iMaxPageTimes--;
|
CFG.iMaxPageTimes--;
|
||||||
|
|
||||||
@ -124,70 +113,106 @@ void Page_Sysop(char *String)
|
|||||||
if (!DisplayFile((char *)"maxpage")) {
|
if (!DisplayFile((char *)"maxpage")) {
|
||||||
/* If i is FALSE display hard coded message */
|
/* If i is FALSE display hard coded message */
|
||||||
Enter(1);
|
Enter(1);
|
||||||
|
/* You have paged the Sysop the maximum times allowed. */
|
||||||
pout(WHITE, BLACK, (char *) Language(154));
|
pout(WHITE, BLACK, (char *) Language(154));
|
||||||
Enter(2);
|
Enter(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
Syslog('!', "Attempted to page Sysop, above maximum page limit.");
|
Syslog('!', "Attempted to page Sysop, above maximum page limit.");
|
||||||
Pause();
|
Pause();
|
||||||
} else {
|
free(Reason);
|
||||||
locate(14, ((80 - strlen(String) ) / 2 - 2));
|
return;
|
||||||
pout(WHITE, BLACK, (char *)"[");
|
}
|
||||||
pout(LIGHTGRAY, BLACK, String);
|
|
||||||
pout(WHITE, BLACK, (char *)"]");
|
|
||||||
|
|
||||||
locate(16, ((80 - CFG.iPageLength) / 2 - 2));
|
locate(14, ((80 - strlen(String) ) / 2 - 2));
|
||||||
pout(WHITE, BLACK, (char *)"[");
|
pout(WHITE, BLACK, (char *)"[");
|
||||||
colour(BLUE, BLACK);
|
pout(LIGHTGRAY, BLACK, String);
|
||||||
for (i = 0; i < CFG.iPageLength; i++)
|
pout(WHITE, BLACK, (char *)"]");
|
||||||
printf("%c", 176);
|
|
||||||
pout(WHITE, BLACK, (char *)"]");
|
|
||||||
|
|
||||||
locate(16, ((80 - CFG.iPageLength) / 2 - 2) + 1);
|
locate(16, ((80 - CFG.iPageLength) / 2 - 2));
|
||||||
|
pout(WHITE, BLACK, (char *)"[");
|
||||||
|
colour(BLUE, BLACK);
|
||||||
|
for (i = 0; i < CFG.iPageLength; i++)
|
||||||
|
printf("%c", 176);
|
||||||
|
pout(WHITE, BLACK, (char *)"]");
|
||||||
|
|
||||||
if ((pWritingDevice = fopen(CFG.sChatDevice, "w")) != NULL) {
|
locate(16, ((80 - CFG.iPageLength) / 2 - 2) + 1);
|
||||||
fprintf(pWritingDevice, "\n\n\n%s is trying to page you on %s.\n", \
|
|
||||||
usrconfig.sUserName, pTTY);
|
|
||||||
|
|
||||||
fprintf(pWritingDevice, "Type: '%s/bin/schat %s' to talk to him, you have", \
|
sprintf(buf, "CPAG:2,%d,%s;", mypid, Reason);
|
||||||
getenv("MBSE_ROOT"), pTTY);
|
if (socket_send(buf)) {
|
||||||
fprintf(pWritingDevice, "\n%d seconds to respond!\n\n", CFG.iPageLength);
|
Syslog('+', "Failed to send message to mbtask");
|
||||||
fprintf(pWritingDevice, "%s\n", temp);
|
free(Reason);
|
||||||
iOpenDevice = TRUE;
|
return;
|
||||||
}
|
}
|
||||||
|
strcpy(buf, socket_receive());
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Check if sysop is busy
|
||||||
|
*/
|
||||||
|
if (strcmp(buf, "100:1,1;") == 0) {
|
||||||
|
/* The SysOp is currently speaking to somebody else */
|
||||||
|
pout(LIGHTMAGENTA, BLACK, (char *) Language(152));
|
||||||
|
/* Try paging him again in a few minutes ... */
|
||||||
|
pout(LIGHTGREEN, BLACK, (char *) Language(153));
|
||||||
|
Enter(2);
|
||||||
|
Syslog('+', "SysOp was busy chatting with another user");
|
||||||
|
Pause();
|
||||||
|
free(Reason);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Check if sysop is not available
|
||||||
|
*/
|
||||||
|
if (strcmp(buf, "100:1,2;") == 0) {
|
||||||
|
Syslog('+', "Sysop is not available for chat");
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Check for other errors
|
||||||
|
*/
|
||||||
|
if (strcmp(buf, "100:1,3;") == 0) {
|
||||||
|
colour(LIGHTRED, BLACK);
|
||||||
|
printf("Internal system error, the sysop is informed");
|
||||||
|
Enter(2);
|
||||||
|
Syslog('!', "Got error on page sysop command");
|
||||||
|
Pause();
|
||||||
|
free(Reason);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strcmp(buf, "100:0;") == 0) {
|
||||||
|
/*
|
||||||
|
* Page accpeted, wait until sysop responds
|
||||||
|
*/
|
||||||
colour(LIGHTBLUE, BLACK);
|
colour(LIGHTBLUE, BLACK);
|
||||||
for (i = 0; i < CFG.iPageLength; i++) {
|
for (i = 0; i < CFG.iPageLength; i++) {
|
||||||
printf("\x07");
|
|
||||||
/* If there weren't any problems opening the writing device */
|
|
||||||
if (iOpenDevice) {
|
|
||||||
fprintf(pWritingDevice, "\x07");
|
|
||||||
fflush(pWritingDevice);
|
|
||||||
}
|
|
||||||
printf("%c", 219);
|
printf("%c", 219);
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
sleep(1);
|
sleep(1);
|
||||||
if (access("/tmp/chatdev", R_OK) == 0) {
|
|
||||||
fclose(pWritingDevice);
|
// if drop into chat
|
||||||
Chat();
|
// Chat();
|
||||||
free(Reason);
|
// free(Reason);
|
||||||
return;
|
// return;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (iOpenDevice) {
|
/*
|
||||||
fclose(pWritingDevice);
|
* Cancel page request
|
||||||
iOpenDevice = 0;
|
*/
|
||||||
}
|
sprintf(buf, "CCAN:1,%d", mypid);
|
||||||
PageReason();
|
socket_send(buf);
|
||||||
printf("\n\n\n");
|
strcpy(buf, socket_receive());
|
||||||
Pause();
|
|
||||||
if (strlen(Reason))
|
|
||||||
SysopComment(Reason);
|
|
||||||
else
|
|
||||||
SysopComment((char *)"Failed chat");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PageReason();
|
||||||
|
printf("\n\n\n");
|
||||||
|
Pause();
|
||||||
|
if (strlen(Reason))
|
||||||
|
SysopComment(Reason);
|
||||||
|
else
|
||||||
|
SysopComment((char *)"Failed chat");
|
||||||
|
|
||||||
free(Reason);
|
free(Reason);
|
||||||
Pause();
|
Pause();
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
* Purpose ...............: MBSE BBS Daemon
|
* Purpose ...............: MBSE BBS Daemon
|
||||||
*
|
*
|
||||||
*****************************************************************************
|
*****************************************************************************
|
||||||
* Copyright (C) 1997-2002
|
* Copyright (C) 1997-2003
|
||||||
*
|
*
|
||||||
* Michiel Broek FIDO: 2:280/2802
|
* Michiel Broek FIDO: 2:280/2802
|
||||||
* Beekmansbos 10
|
* Beekmansbos 10
|
||||||
@ -241,7 +241,7 @@ char *exe_cmd(char *in)
|
|||||||
/*
|
/*
|
||||||
* The chat commands
|
* The chat commands
|
||||||
*
|
*
|
||||||
* Used channels: -1 Personal messages between ordinary users.
|
* Used channels: -1 Personal messages between ordinary users.
|
||||||
* 0 Sysop/user chat
|
* 0 Sysop/user chat
|
||||||
* 1..99 Chatting channels
|
* 1..99 Chatting channels
|
||||||
*
|
*
|
||||||
@ -259,11 +259,9 @@ char *exe_cmd(char *in)
|
|||||||
* 100:0;
|
* 100:0;
|
||||||
*/
|
*/
|
||||||
if (strncmp(cmd, "CSPM", 4) == 0) {
|
if (strncmp(cmd, "CSPM", 4) == 0) {
|
||||||
if ((result = reg_spm(token))) {
|
if ((result = reg_spm(token)))
|
||||||
sprintf(obuf, "100:1,%d;", result);
|
sprintf(obuf, "100:1,%d;", result);
|
||||||
return obuf;
|
return obuf;
|
||||||
} else
|
|
||||||
return obuf;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -276,6 +274,31 @@ char *exe_cmd(char *in)
|
|||||||
return obuf;
|
return obuf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* CPAG:2,pid,reason; Page sysop for a chat
|
||||||
|
* 100:1,n; 1=busy, 2=sysop not available, 3=error
|
||||||
|
* 100:0; Ok
|
||||||
|
*/
|
||||||
|
if (strncmp(cmd, "CPAG", 4) == 0) {
|
||||||
|
if ((result = reg_page(token))) {
|
||||||
|
sprintf(obuf, "100:1,%d;", result);
|
||||||
|
Syslog('+', "%s", obuf);
|
||||||
|
}
|
||||||
|
return obuf;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* CCAN:1,pid; Cancel sysop page
|
||||||
|
* 100:0; Always Ok
|
||||||
|
*/
|
||||||
|
if (strncmp(cmd, "CCAN", 4) == 0) {
|
||||||
|
reg_cancel(token);
|
||||||
|
return obuf;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strncmp(cmd, "CCKP", 4) == 0) {
|
||||||
|
return reg_checkpage(token);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The G(lobal) commands.
|
* The G(lobal) commands.
|
||||||
@ -364,125 +387,122 @@ char *exe_cmd(char *in)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The (S)tatus commands.
|
* The (S)tatus commands.
|
||||||
*
|
*
|
||||||
* SBBS:0;
|
* SBBS:0;
|
||||||
* 100:2,n,status message;
|
* 100:2,n,status message;
|
||||||
*/
|
*/
|
||||||
if (strncmp(cmd, "SBBS", 4) == 0) {
|
if (strncmp(cmd, "SBBS", 4) == 0) {
|
||||||
switch(stat_bbs_stat()) {
|
switch(stat_bbs_stat()) {
|
||||||
case 0:
|
case 0: sprintf(obuf, "100:2,0,The system is open for use;");
|
||||||
sprintf(obuf, "100:2,0,The system is open for use;");
|
break;
|
||||||
break;
|
case 1: sprintf(obuf, "100:2,1,The system is closed right now!;");
|
||||||
case 1:
|
break;
|
||||||
sprintf(obuf, "100:2,1,The system is closed right now!;");
|
case 2: sprintf(obuf, "100:2,2,The system is closed for Zone Mail Hour!;");
|
||||||
break;
|
break;
|
||||||
case 2:
|
|
||||||
sprintf(obuf, "100:2,2,The system is closed for Zone Mail Hour!;");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return obuf;
|
|
||||||
}
|
}
|
||||||
|
return obuf;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* SOPE:0;
|
* SOPE:0;
|
||||||
* 100:0;
|
* 100:0;
|
||||||
*/
|
*/
|
||||||
if (strncmp(cmd, "SOPE", 4) == 0) {
|
if (strncmp(cmd, "SOPE", 4) == 0) {
|
||||||
stat_set_open(1);
|
stat_set_open(1);
|
||||||
return obuf;
|
return obuf;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* SCLO:1,message;
|
* SCLO:1,message;
|
||||||
* 100:0;
|
* 100:0;
|
||||||
*/
|
*/
|
||||||
if (strncmp(cmd, "SCLO", 4) == 0) {
|
if (strncmp(cmd, "SCLO", 4) == 0) {
|
||||||
stat_set_open(0);
|
stat_set_open(0);
|
||||||
return obuf;
|
return obuf;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* SFRE:0;
|
* SFRE:0;
|
||||||
* 100:1,Running utilities: n Active users: n;
|
* 100:1,Running utilities: n Active users: n;
|
||||||
* 100:0;
|
* 100:0;
|
||||||
* 201:1,16;
|
* 201:1,16;
|
||||||
*/
|
*/
|
||||||
if (strncmp(cmd, "SFRE", 4) == 0) {
|
if (strncmp(cmd, "SFRE", 4) == 0) {
|
||||||
return reg_fre();
|
return reg_fre();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* SSEQ:0;
|
* SSEQ:0;
|
||||||
* 100:1,number;
|
* 100:1,number;
|
||||||
* 200:1,16;
|
* 200:1,16;
|
||||||
*/
|
*/
|
||||||
if (strncmp(cmd, "SSEQ", 4) == 0) {
|
if (strncmp(cmd, "SSEQ", 4) == 0) {
|
||||||
return getseq();
|
return getseq();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* SEST:1,semafore; Get status of semafore
|
* SEST:1,semafore; Get status of semafore
|
||||||
* 100:1,n; 1 = set, 0 = not set
|
* 100:1,n; 1 = set, 0 = not set
|
||||||
* 200:1,16;
|
* 200:1,16;
|
||||||
*/
|
*/
|
||||||
if (strncmp(cmd, "SEST", 4) == 0) {
|
if (strncmp(cmd, "SEST", 4) == 0) {
|
||||||
return sem_status(token);
|
return sem_status(token);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* SECR:1,semafore; Set semafore
|
* SECR:1,semafore; Set semafore
|
||||||
* 100:0;
|
* 100:0;
|
||||||
* 200:1,16;
|
* 200:1,16;
|
||||||
*/
|
*/
|
||||||
if (strncmp(cmd, "SECR", 4) == 0) {
|
if (strncmp(cmd, "SECR", 4) == 0) {
|
||||||
return sem_create(token);
|
return sem_create(token);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* SERM:1,semafore; Remove semafore
|
* SERM:1,semafore; Remove semafore
|
||||||
* 100:0;
|
* 100:0;
|
||||||
* 200:1,16;
|
* 200:1,16;
|
||||||
*/
|
*/
|
||||||
if (strncmp(cmd, "SERM", 4) == 0) {
|
if (strncmp(cmd, "SERM", 4) == 0) {
|
||||||
return sem_remove(token);
|
return sem_remove(token);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If we got this far, there must be an error.
|
* If we got this far, there must be an error.
|
||||||
*/
|
*/
|
||||||
stat_inc_serr();
|
stat_inc_serr();
|
||||||
return ebuf;
|
return ebuf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void do_cmd(char *cmd)
|
void do_cmd(char *cmd)
|
||||||
{
|
{
|
||||||
char buf[SS_BUFSIZE];
|
char buf[SS_BUFSIZE];
|
||||||
int slen, tries = 0;
|
int slen, tries = 0;
|
||||||
|
|
||||||
if (logtrans)
|
if (logtrans)
|
||||||
Syslog('-', "< %s", cmd);
|
Syslog('-', "< %s", cmd);
|
||||||
sprintf(buf, "%s", exe_cmd(cmd));
|
sprintf(buf, "%s", exe_cmd(cmd));
|
||||||
if (logtrans)
|
if (logtrans)
|
||||||
Syslog('-', "> %s", buf);
|
Syslog('-', "> %s", buf);
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
slen = sendto(sock, buf, strlen(buf), 0, &from, fromlen);
|
slen = sendto(sock, buf, strlen(buf), 0, &from, fromlen);
|
||||||
if (slen == -1)
|
if (slen == -1)
|
||||||
Syslog('?', "$do_cmd(): sendto error %d %s", tries, from.sun_path);
|
Syslog('?', "$do_cmd(): sendto error %d %s", tries, from.sun_path);
|
||||||
else if (slen != strlen(buf))
|
else if (slen != strlen(buf))
|
||||||
Syslog('?', "do_cmd(): send %d of %d bytes, try=%d", slen, strlen(buf), tries);
|
Syslog('?', "do_cmd(): send %d of %d bytes, try=%d", slen, strlen(buf), tries);
|
||||||
else
|
else
|
||||||
return;
|
return;
|
||||||
tries++;
|
tries++;
|
||||||
if (tries == 3)
|
if (tries == 3)
|
||||||
return;
|
return;
|
||||||
sleep(1);
|
sleep(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -36,6 +36,7 @@
|
|||||||
#include "taskutil.h"
|
#include "taskutil.h"
|
||||||
|
|
||||||
extern reg_info reginfo[MAXCLIENT]; /* Array with clients */
|
extern reg_info reginfo[MAXCLIENT]; /* Array with clients */
|
||||||
|
extern struct sysconfig CFG; /* System config */
|
||||||
static int entrypos = 0; /* Status pointer */
|
static int entrypos = 0; /* Status pointer */
|
||||||
static int mailers = 0; /* Registered mailers */
|
static int mailers = 0; /* Registered mailers */
|
||||||
static int sysop_present = 0; /* Sysop present */
|
static int sysop_present = 0; /* Sysop present */
|
||||||
@ -193,19 +194,19 @@ void reg_check(void)
|
|||||||
*/
|
*/
|
||||||
int reg_doing(char *data)
|
int reg_doing(char *data)
|
||||||
{
|
{
|
||||||
char *cnt, *pid, *line;
|
char *cnt, *pid, *line;
|
||||||
int rec;
|
int rec;
|
||||||
|
|
||||||
cnt = strtok(data, ",");
|
cnt = strtok(data, ",");
|
||||||
pid = strtok(NULL, ",");
|
pid = strtok(NULL, ",");
|
||||||
line = strtok(NULL, ";");
|
line = strtok(NULL, ";");
|
||||||
|
|
||||||
if ((rec = reg_find(pid)) == -1)
|
if ((rec = reg_find(pid)) == -1)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
strncpy(reginfo[rec].doing, line, 35);
|
strncpy(reginfo[rec].doing, line, 35);
|
||||||
reginfo[rec].lastcon = time(NULL);
|
reginfo[rec].lastcon = time(NULL);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -238,16 +239,16 @@ int reg_ip(char *data)
|
|||||||
*/
|
*/
|
||||||
int reg_nop(char *data)
|
int reg_nop(char *data)
|
||||||
{
|
{
|
||||||
char *cnt, *pid;
|
char *cnt, *pid;
|
||||||
int rec;
|
int rec;
|
||||||
|
|
||||||
cnt = strtok(data, ",");
|
cnt = strtok(data, ",");
|
||||||
pid = strtok(NULL, ";");
|
pid = strtok(NULL, ";");
|
||||||
if ((rec = reg_find(pid)) == -1)
|
if ((rec = reg_find(pid)) == -1)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
reginfo[rec].lastcon = time(NULL);
|
reginfo[rec].lastcon = time(NULL);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -257,31 +258,31 @@ int reg_nop(char *data)
|
|||||||
*/
|
*/
|
||||||
int reg_timer(int Set, char *data)
|
int reg_timer(int Set, char *data)
|
||||||
{
|
{
|
||||||
char *pid;
|
char *pid;
|
||||||
int cnt, rec, val;
|
int cnt, rec, val;
|
||||||
|
|
||||||
cnt = atoi(strtok(data, ","));
|
cnt = atoi(strtok(data, ","));
|
||||||
if (Set) {
|
if (Set) {
|
||||||
if (cnt != 2)
|
if (cnt != 2)
|
||||||
return -1;
|
return -1;
|
||||||
pid = strtok(NULL, ",");
|
pid = strtok(NULL, ",");
|
||||||
val = atoi(strtok(NULL, ";"));
|
val = atoi(strtok(NULL, ";"));
|
||||||
if (val < 600)
|
if (val < 600)
|
||||||
val = 600;
|
val = 600;
|
||||||
} else {
|
} else {
|
||||||
if (cnt != 1)
|
if (cnt != 1)
|
||||||
return -1;
|
return -1;
|
||||||
pid = strtok(NULL, ";");
|
pid = strtok(NULL, ";");
|
||||||
val = 600;
|
val = 600;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((rec = reg_find(pid)) == -1)
|
if ((rec = reg_find(pid)) == -1)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
reginfo[rec].altime = val;
|
reginfo[rec].altime = val;
|
||||||
reginfo[rec].lastcon = time(NULL);
|
reginfo[rec].lastcon = time(NULL);
|
||||||
Syslog('r', "Set timeout value for %d to %d", reginfo[rec].pid, val);
|
Syslog('r', "Set timeout value for %d to %d", reginfo[rec].pid, val);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -291,19 +292,19 @@ int reg_timer(int Set, char *data)
|
|||||||
*/
|
*/
|
||||||
int reg_tty(char *data)
|
int reg_tty(char *data)
|
||||||
{
|
{
|
||||||
char *cnt, *pid, *tty;
|
char *cnt, *pid, *tty;
|
||||||
int rec;
|
int rec;
|
||||||
|
|
||||||
cnt = strtok(data, ",");
|
cnt = strtok(data, ",");
|
||||||
pid = strtok(NULL, ",");
|
pid = strtok(NULL, ",");
|
||||||
tty = strtok(NULL, ";");
|
tty = strtok(NULL, ";");
|
||||||
|
|
||||||
if ((rec = reg_find(pid)) == -1)
|
if ((rec = reg_find(pid)) == -1)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
strncpy((char *)®info[rec].tty, tty, 6);
|
strncpy((char *)®info[rec].tty, tty, 6);
|
||||||
reginfo[rec].lastcon = time(NULL);
|
reginfo[rec].lastcon = time(NULL);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -313,19 +314,19 @@ int reg_tty(char *data)
|
|||||||
*/
|
*/
|
||||||
int reg_silent(char *data)
|
int reg_silent(char *data)
|
||||||
{
|
{
|
||||||
char *cnt, *pid, *line;
|
char *cnt, *pid, *line;
|
||||||
int rec;
|
int rec;
|
||||||
|
|
||||||
cnt = strtok(data, ",");
|
cnt = strtok(data, ",");
|
||||||
pid = strtok(NULL, ",");
|
pid = strtok(NULL, ",");
|
||||||
line = strtok(NULL, ";");
|
line = strtok(NULL, ";");
|
||||||
|
|
||||||
if ((rec = reg_find(pid)) == -1)
|
if ((rec = reg_find(pid)) == -1)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
reginfo[rec].silent = atoi(line);
|
reginfo[rec].silent = atoi(line);
|
||||||
reginfo[rec].lastcon = time(NULL);
|
reginfo[rec].lastcon = time(NULL);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -335,21 +336,21 @@ int reg_silent(char *data)
|
|||||||
*/
|
*/
|
||||||
int reg_user(char *data)
|
int reg_user(char *data)
|
||||||
{
|
{
|
||||||
char *cnt, *pid, *user, *city;
|
char *cnt, *pid, *user, *city;
|
||||||
int rec;
|
int rec;
|
||||||
|
|
||||||
cnt = strtok(data, ",");
|
cnt = strtok(data, ",");
|
||||||
pid = strtok(NULL, ",");
|
pid = strtok(NULL, ",");
|
||||||
user = strtok(NULL, ",");
|
user = strtok(NULL, ",");
|
||||||
city = strtok(NULL, ";");
|
city = strtok(NULL, ";");
|
||||||
|
|
||||||
if ((rec = reg_find(pid)) == -1)
|
if ((rec = reg_find(pid)) == -1)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
strncpy((char *)®info[rec].uname, user, 35);
|
strncpy((char *)®info[rec].uname, user, 35);
|
||||||
strncpy((char *)®info[rec].city, city, 35);
|
strncpy((char *)®info[rec].city, city, 35);
|
||||||
reginfo[rec].lastcon = time(NULL);
|
reginfo[rec].lastcon = time(NULL);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -413,36 +414,41 @@ char *reg_ipm(char *data)
|
|||||||
*/
|
*/
|
||||||
int reg_spm(char *data)
|
int reg_spm(char *data)
|
||||||
{
|
{
|
||||||
char *cnt, *from, *too, *txt;
|
char *cnt, *ch, *from, *too, *txt, *log;
|
||||||
int ch, i;
|
int i;
|
||||||
|
|
||||||
cnt = strtok(data, ",");
|
cnt = strtok(data, ",");
|
||||||
ch = atoi(strtok(NULL, ","));
|
ch = strtok(NULL, ",");
|
||||||
from = strtok(NULL, ",");
|
from = strtok(NULL, ",");
|
||||||
too = strtok(NULL, ",");
|
too = strtok(NULL, ",");
|
||||||
txt = strtok(NULL, "\0");
|
txt = strtok(NULL, "\0");
|
||||||
txt[strlen(txt)-1] = '\0';
|
txt[strlen(txt)-1] = '\0';
|
||||||
|
|
||||||
Syslog('-', "SIPM:%s,%d,%s,%s,%s;", cnt, ch, from, too, txt);
|
Syslog('-', "SIPM:%s,%d,%s,%s,%s;", cnt, ch, from, too, txt);
|
||||||
|
log = calloc(PATH_MAX, sizeof(char));
|
||||||
|
sprintf(log, "%s/log/%s", getenv("MBSE_ROOT"), CFG.chat_log);
|
||||||
|
|
||||||
for (i = 0; i < MAXCLIENT; i++) {
|
for (i = 0; i < MAXCLIENT; i++) {
|
||||||
/*
|
/*
|
||||||
* Personal messages and sysop/user chat messages.
|
* Personal messages and sysop/user chat messages.
|
||||||
*/
|
*/
|
||||||
if (reginfo[i].pid && (strcasecmp(reginfo[i].uname, too) == 0) && ((ch == -1) || (ch == 0)) && (ch == reginfo[i].channel)) {
|
if (reginfo[i].pid && (strcasecmp(reginfo[i].uname, too) == 0) &&
|
||||||
|
((atoi(ch) == -1) || (atoi(ch) == 0)) && (atoi(ch) == reginfo[i].channel)) {
|
||||||
/*
|
/*
|
||||||
* If the in and out pointers are the same and the
|
* If the in and out pointers are the same and the
|
||||||
* message present flag is still set, then this user
|
* message present flag is still set, then this user
|
||||||
* can't get anymore new messages.
|
* can't get anymore new messages.
|
||||||
*/
|
*/
|
||||||
if (reginfo[i].ismsg && (reginfo[i].ptr_in == reginfo[i].ptr_out)) {
|
if (reginfo[i].ismsg && (reginfo[i].ptr_in == reginfo[i].ptr_out)) {
|
||||||
|
free(log);
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If user has the "do not distrurb" flag set, but the sysop ignore's this.
|
* If user has the "do not distrurb" flag set, but the sysop ignore's this.
|
||||||
*/
|
*/
|
||||||
if (reginfo[i].silent && (ch == -1)) {
|
if (reginfo[i].silent && (atoi(ch) == -1)) {
|
||||||
|
free(log);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -457,14 +463,19 @@ int reg_spm(char *data)
|
|||||||
reginfo[i].ptr_in = 0;
|
reginfo[i].ptr_in = 0;
|
||||||
reginfo[i].ismsg = TRUE;
|
reginfo[i].ismsg = TRUE;
|
||||||
|
|
||||||
|
if (CFG.iAutoLog && strlen(CFG.chat_log)) {
|
||||||
|
ulog(log, (char *)"+", from, ch, txt);
|
||||||
|
}
|
||||||
|
|
||||||
Syslog('+', "reg_spm: in=%d out=%d ismsg=%d", reginfo[i].ptr_in, reginfo[i].ptr_out, reginfo[i].ismsg);
|
Syslog('+', "reg_spm: in=%d out=%d ismsg=%d", reginfo[i].ptr_in, reginfo[i].ptr_out, reginfo[i].ismsg);
|
||||||
|
free(log);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Chat messages, they are send to each user that is chatting in the right channel.
|
* Chat messages, they are send to each user that is chatting in the right channel.
|
||||||
*/
|
*/
|
||||||
if (reginfo[i].pid && reginfo[i].chatting && reginfo[i].channel == ch) {
|
if (reginfo[i].pid && reginfo[i].chatting && reginfo[i].channel == atoi(ch)) {
|
||||||
if (reginfo[i].ismsg && (reginfo[i].ptr_in == reginfo[i].ptr_out)) {
|
if (reginfo[i].ismsg && (reginfo[i].ptr_in == reginfo[i].ptr_out)) {
|
||||||
Syslog('!', "reg_spm: buffer full for %s", reginfo[i].uname);
|
Syslog('!', "reg_spm: buffer full for %s", reginfo[i].uname);
|
||||||
} else {
|
} else {
|
||||||
@ -475,13 +486,19 @@ int reg_spm(char *data)
|
|||||||
else
|
else
|
||||||
reginfo[i].ptr_in = 0;
|
reginfo[i].ptr_in = 0;
|
||||||
reginfo[i].ismsg = TRUE;
|
reginfo[i].ismsg = TRUE;
|
||||||
|
|
||||||
|
if (CFG.iAutoLog && strlen(CFG.chat_log)) {
|
||||||
|
ulog(log, (char *)"+", from, ch, txt);
|
||||||
|
}
|
||||||
|
|
||||||
Syslog('+', "reg_spm: user=%s in=%d out=%d ismsg=%d", reginfo[i].uname, reginfo[i].ptr_in,
|
Syslog('+', "reg_spm: user=%s in=%d out=%d ismsg=%d", reginfo[i].uname, reginfo[i].ptr_in,
|
||||||
reginfo[i].ptr_out, reginfo[i].ismsg);
|
reginfo[i].ptr_out, reginfo[i].ismsg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((ch == -1) || (ch == 0))
|
free(log);
|
||||||
|
if ((atoi(ch) == -1) || (atoi(ch) == 0))
|
||||||
return 3; // Error
|
return 3; // Error
|
||||||
return 0; // Ok
|
return 0; // Ok
|
||||||
}
|
}
|
||||||
@ -490,37 +507,37 @@ int reg_spm(char *data)
|
|||||||
|
|
||||||
char *reg_fre(void)
|
char *reg_fre(void)
|
||||||
{
|
{
|
||||||
static char buf[80];
|
static char buf[80];
|
||||||
int i, users = 0, utils = 0;
|
int i, users = 0, utils = 0;
|
||||||
|
|
||||||
buf[0] = '\0';
|
buf[0] = '\0';
|
||||||
|
|
||||||
for (i = 1; i < MAXCLIENT; i++) {
|
for (i = 1; i < MAXCLIENT; i++) {
|
||||||
if (reginfo[i].pid) {
|
if (reginfo[i].pid) {
|
||||||
if ((!strncmp(reginfo[i].prg, "mbsebbs", 7)) ||
|
if ((!strncmp(reginfo[i].prg, "mbsebbs", 7)) ||
|
||||||
(!strncmp(reginfo[i].prg, "mbnewusr", 8)) ||
|
(!strncmp(reginfo[i].prg, "mbnewusr", 8)) ||
|
||||||
(!strncmp(reginfo[i].prg, "mbftpd", 6)))
|
(!strncmp(reginfo[i].prg, "mbftpd", 6)))
|
||||||
users++;
|
users++;
|
||||||
|
|
||||||
if ((!strncmp(reginfo[i].prg, "mbfido", 6)) ||
|
if ((!strncmp(reginfo[i].prg, "mbfido", 6)) ||
|
||||||
(!strncmp(reginfo[i].prg, "mbmail", 6)) ||
|
(!strncmp(reginfo[i].prg, "mbmail", 6)) ||
|
||||||
(!strncmp(reginfo[i].prg, "mball", 5)) ||
|
(!strncmp(reginfo[i].prg, "mball", 5)) ||
|
||||||
(!strncmp(reginfo[i].prg, "mbaff", 5)) ||
|
(!strncmp(reginfo[i].prg, "mbaff", 5)) ||
|
||||||
(!strncmp(reginfo[i].prg, "mbcico", 6)) ||
|
(!strncmp(reginfo[i].prg, "mbcico", 6)) ||
|
||||||
(!strncmp(reginfo[i].prg, "mbfile", 6)) ||
|
(!strncmp(reginfo[i].prg, "mbfile", 6)) ||
|
||||||
(!strncmp(reginfo[i].prg, "mbmsg", 5)) ||
|
(!strncmp(reginfo[i].prg, "mbmsg", 5)) ||
|
||||||
(!strncmp(reginfo[i].prg, "mbindex", 7)) ||
|
(!strncmp(reginfo[i].prg, "mbindex", 7)) ||
|
||||||
(!strncmp(reginfo[i].prg, "mbdiff", 6)) ||
|
(!strncmp(reginfo[i].prg, "mbdiff", 6)) ||
|
||||||
(!strncmp(reginfo[i].prg, "mbuser", 6)))
|
(!strncmp(reginfo[i].prg, "mbuser", 6)))
|
||||||
utils++;
|
utils++;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (users || utils)
|
if (users || utils)
|
||||||
sprintf(buf, "100:1,Running utilities: %02d Active users: %02d;", utils, users);
|
sprintf(buf, "100:1,Running utilities: %02d Active users: %02d;", utils, users);
|
||||||
else
|
else
|
||||||
sprintf(buf, "100:0;");
|
sprintf(buf, "100:0;");
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -532,35 +549,131 @@ char *reg_fre(void)
|
|||||||
*/
|
*/
|
||||||
char *get_reginfo(int first)
|
char *get_reginfo(int first)
|
||||||
{
|
{
|
||||||
static char buf[256];
|
static char buf[256];
|
||||||
|
|
||||||
memset(&buf, 0, sizeof(buf));
|
memset(&buf, 0, sizeof(buf));
|
||||||
sprintf(buf, "100:0;");
|
sprintf(buf, "100:0;");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Loop forever until an error occours, eof is reached or
|
* Loop forever until an error occours, eof is reached or
|
||||||
* the data is valid. Only in the last case valid data is
|
* the data is valid. Only in the last case valid data is
|
||||||
* returned to the caller.
|
* returned to the caller.
|
||||||
*/
|
*/
|
||||||
for (;;) {
|
for (;;) {
|
||||||
if (first == 1)
|
if (first == 1)
|
||||||
entrypos = 0;
|
entrypos = 0;
|
||||||
else
|
else
|
||||||
entrypos++;
|
entrypos++;
|
||||||
|
|
||||||
if (entrypos == MAXCLIENT)
|
if (entrypos == MAXCLIENT)
|
||||||
return buf;
|
return buf;
|
||||||
|
|
||||||
if ((int)reginfo[entrypos].pid != 0) {
|
if ((int)reginfo[entrypos].pid != 0) {
|
||||||
sprintf(buf, "100:7,%d,%s,%s,%s,%s,%s,%d;",
|
sprintf(buf, "100:7,%d,%s,%s,%s,%s,%s,%d;",
|
||||||
reginfo[entrypos].pid, reginfo[entrypos].tty,
|
reginfo[entrypos].pid, reginfo[entrypos].tty,
|
||||||
reginfo[entrypos].uname, reginfo[entrypos].prg,
|
reginfo[entrypos].uname, reginfo[entrypos].prg,
|
||||||
reginfo[entrypos].city, reginfo[entrypos].doing,
|
reginfo[entrypos].city, reginfo[entrypos].doing,
|
||||||
(int)reginfo[entrypos].started);
|
(int)reginfo[entrypos].started);
|
||||||
return buf;
|
return buf;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
/* never reached */
|
}
|
||||||
|
/* never reached */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Page sysop for a chat
|
||||||
|
*/
|
||||||
|
int reg_page(char *data)
|
||||||
|
{
|
||||||
|
char *cnt, *pid, *reason;
|
||||||
|
int i, rec;
|
||||||
|
|
||||||
|
cnt = strtok(data, ",");
|
||||||
|
pid = strtok(NULL, ",");
|
||||||
|
reason = strtok(NULL, "\0");
|
||||||
|
reason[strlen(reason)-1] = '\0';
|
||||||
|
|
||||||
|
Syslog('+', "reg_page: pid=%d, reason=\"%s\"", pid, reason);
|
||||||
|
|
||||||
|
if (!sysop_present)
|
||||||
|
return 2;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Check if another user is pagin the sysop or is already
|
||||||
|
* chatting with the sysop, if so, mark sysop busy.
|
||||||
|
*/
|
||||||
|
for (i = 1; i < MAXCLIENT; i++) {
|
||||||
|
if (reginfo[i].pid && (reginfo[i].pid != atoi(pid)) && (reginfo[i].channel == 0) && (reginfo[i].chatting))
|
||||||
|
return 1;
|
||||||
|
if (reginfo[i].pid && (reginfo[i].pid != atoi(pid)) && (reginfo[i].paging))
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((rec = reg_find(pid)) == -1)
|
||||||
|
return 3;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* All seems well, accept the page
|
||||||
|
*/
|
||||||
|
reginfo[rec].paging = TRUE;
|
||||||
|
reginfo[rec].channel = 0;
|
||||||
|
strncpy(reginfo[rec].reason, reason, 80);
|
||||||
|
reginfo[rec].lastcon = time(NULL);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Cancel page sysop for a chat
|
||||||
|
*/
|
||||||
|
int reg_cancel(char *data)
|
||||||
|
{
|
||||||
|
char *cnt, *pid;
|
||||||
|
int rec;
|
||||||
|
|
||||||
|
cnt = strtok(data, ",");
|
||||||
|
pid = strtok(NULL, ";");
|
||||||
|
|
||||||
|
Syslog('+', "reg_cancel: pid=%d", pid);
|
||||||
|
|
||||||
|
if ((rec = reg_find(pid)) == -1)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
if (reginfo[rec].paging) {
|
||||||
|
reginfo[rec].paging = FALSE;
|
||||||
|
reginfo[rec].haspaged = TRUE;
|
||||||
|
reginfo[rec].channel = -1;
|
||||||
|
}
|
||||||
|
reginfo[rec].lastcon = time(NULL);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Check paging status for from mbmon
|
||||||
|
*/
|
||||||
|
char *reg_checkpage(char *data)
|
||||||
|
{
|
||||||
|
static char buf[128];
|
||||||
|
int i;
|
||||||
|
|
||||||
|
memset(&buf, 0, sizeof(buf));
|
||||||
|
for (i = 1; i < MAXCLIENT; i++) {
|
||||||
|
if (reginfo[i].pid && reginfo[i].paging) {
|
||||||
|
sprintf(buf, "100:3,%d,1,%s;", reginfo[i].pid, reginfo[i].reason);
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
if (reginfo[i].pid && reginfo[i].haspaged) {
|
||||||
|
sprintf(buf, "100:3,%d,0,%s;", reginfo[i].pid, reginfo[i].reason);
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sprintf(buf, "100:0;");
|
||||||
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -50,12 +50,15 @@ int reg_nop(char *);
|
|||||||
int reg_timer(int, char *);
|
int reg_timer(int, char *);
|
||||||
int reg_tty(char *);
|
int reg_tty(char *);
|
||||||
int reg_user(char *);
|
int reg_user(char *);
|
||||||
int reg_silent(char *);
|
int reg_silent(char *); /* Set/Reset do not disturb */
|
||||||
char *reg_ipm(char *);
|
char *reg_ipm(char *); /* Check for personal/chat msg */
|
||||||
int reg_spm(char *);
|
int reg_spm(char *); /* Send personal/chat message */
|
||||||
char *reg_fre(void);
|
char *reg_fre(void); /* Check if system is free */
|
||||||
char *get_reginfo(int);
|
char *get_reginfo(int); /* Get registration info */
|
||||||
int reg_sysop(char *);
|
int reg_sysop(char *); /* Registrate sysop presence */
|
||||||
|
int reg_page(char *); /* Page sysop for chat */
|
||||||
|
int reg_cancel(char *); /* Cancel sysop page */
|
||||||
|
char *reg_checkpage(char *); /* Check paging status */
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user