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.
|
||||
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.
|
||||
|
||||
@ -49,10 +51,14 @@ v0.37.2 23-Feb-2003.
|
||||
Added email reply when reading new (e)mail.
|
||||
With the CIPM and CSPM mbtask commands added the parameter for
|
||||
the chat channel.
|
||||
To page the sysop, the CPAG and CCAN commands to mbtask are now
|
||||
used.
|
||||
|
||||
mbmon:
|
||||
Reports sysop available or left the system when mbmon starts
|
||||
or stops.
|
||||
Reports a page from a user in row 3 of the screen (but doesn't
|
||||
do chat right now).
|
||||
|
||||
mbtask:
|
||||
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
|
||||
ignored anymore.
|
||||
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:
|
||||
Changed language prompts 15 and 16.
|
||||
Changed language prompts 15, 16 and 152.
|
||||
|
||||
|
||||
v0.37.1 14-Jan-2003 - 23-Feb-2003
|
||||
|
@ -150,9 +150,9 @@
|
||||
149 newuser.c |User name already exists
|
||||
150 mail.c |Checking your mail box ...
|
||||
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 ...
|
||||
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
|
||||
156 mail.c |Posting message in area:
|
||||
157 mail.c |From :
|
||||
|
@ -150,7 +150,7 @@ JN|berichten, nu de post lezen? [J/n]:
|
||||
|Gebruikersnaam bestaat al
|
||||
|Even in Uw postbus kijken ...
|
||||
| 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 ...
|
||||
|U heeft de Sysop meer dan het maximaal aantal keren geroepen.
|
||||
|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
|
||||
|Checking your mail box ...
|
||||
| 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 ...
|
||||
|You have paged the Sysop the maximum times allowed.
|
||||
|Sysop currently is not available ... please leave a comment
|
||||
|
@ -150,7 +150,7 @@ SN|mensaxes,
|
||||
|O nome xa existe
|
||||
|Buscando correo novo ...
|
||||
| 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 ...
|
||||
|Xa chamacves moitas veces.
|
||||
|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
|
||||
|Suchen nach persoenlichen Mitteilungen, bitte warten ...
|
||||
| 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 ...
|
||||
|Ihre maximale Anzahl von Sysop-Anrufen ist erreicht.
|
||||
|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
|
||||
|Sto controllando la tua mail box ...
|
||||
| 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 ...
|
||||
|Hai gia' chiamato il SysOp per il massimo numero di volte consentito.
|
||||
|Il SysOp non e' al momento disponibile ... lascia un messaggio
|
||||
|
@ -150,7 +150,7 @@ SN|mensajes,
|
||||
|El nombre ya existe
|
||||
|Buscando correo nuevo ...
|
||||
| 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 ...
|
||||
|Ya has llamado muchas veces.
|
||||
|El SysOp no est ... ¨por que no le dejas un mensaje?
|
||||
|
@ -369,12 +369,13 @@ void set_color(int f, int b)
|
||||
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)
|
||||
{
|
||||
time_t now;
|
||||
char *p, buf[128];
|
||||
char *p, buf[128], *pid, *page, *reason;
|
||||
|
||||
now = time(NULL);
|
||||
if (now != lasttime) {
|
||||
@ -407,6 +408,36 @@ void show_date(int fg, int bg, int y, int x)
|
||||
bbs_free = FALSE;
|
||||
}
|
||||
|
||||
/*
|
||||
* 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);
|
||||
@ -531,7 +562,7 @@ void clr_index()
|
||||
int i;
|
||||
|
||||
set_color(LIGHTGRAY, BLACK);
|
||||
for (i = 3; i <= (LINES - 1); i++) {
|
||||
for (i = 4; i <= (LINES - 1); i++) {
|
||||
locate(i, 1);
|
||||
clrtoeol();
|
||||
}
|
||||
|
@ -10,7 +10,7 @@ SRCS = signature.c filesub.c language.c mbtoberep.c \
|
||||
bye.c funcs.c mail.c \
|
||||
newuser.c pinfo.c timecheck.c change.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 \
|
||||
door.c dispfile.c userlist.c timestats.c logentry.c
|
||||
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
|
||||
MBLANG_OBJS = mblang.o
|
||||
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_LIBS = ../lib/libmemwatch.a ../lib/libclcomm.a ../lib/libcommon.a ../lib/libdbase.a
|
||||
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_LIBS = ../lib/libmemwatch.a ../lib/libclcomm.a ../lib/libcommon.a ../lib/libdbase.a
|
||||
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}
|
||||
strip mblang
|
||||
|
||||
mbchat: ${MBCHAT_OBJS} ${MBCHAT_LIBS}
|
||||
${CC} -o mbchat ${MBCHAT_OBJS} ${LIBS} ${MBCHAT_LIBS}
|
||||
strip mbchat
|
||||
|
||||
mbstat: ${MBSTAT_OBJS} ${MBSTAT_LIBS}
|
||||
${CC} -o mbstat ${MBSTAT_OBJS} ${LIBS} ${MBSTAT_LIBS}
|
||||
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 0711 mball ${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 mbtoberep ${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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
|
@ -49,9 +49,7 @@
|
||||
#define DEVICE "/tmp/chatdev"
|
||||
|
||||
|
||||
|
||||
|
||||
void Chat(void)
|
||||
void Chat(int channel)
|
||||
{
|
||||
FILE *pGetDev, *pLog, *pBusy, *pChat;
|
||||
int ch;
|
||||
@ -60,7 +58,7 @@ void Chat(void)
|
||||
char *sLog = NULL;
|
||||
char temp[81] = "";
|
||||
|
||||
if(CFG.iAutoLog)
|
||||
if (CFG.iAutoLog)
|
||||
sLog = calloc(56, sizeof(char));
|
||||
|
||||
WhosDoingWhat(SYSOPCHAT);
|
||||
|
@ -1,8 +1,8 @@
|
||||
#ifndef _CHAT_H
|
||||
#define _CHAT_H
|
||||
|
||||
void Chat(void); /* Chat Function */
|
||||
/* $Id$ */
|
||||
|
||||
void Chat(int); /* Chat Function */
|
||||
|
||||
#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
|
||||
* logs in, that .BusyChatting does exist.
|
||||
*/
|
||||
if(CFG.iChatPromptChk && (access("/tmp/chatdev", R_OK) == 0) && (access("/tmp/.BusyChatting", F_OK) != 0))
|
||||
Chat();
|
||||
if (CFG.iChatPromptChk && (access("/tmp/chatdev", R_OK) == 0) && (access("/tmp/.BusyChatting", F_OK) != 0))
|
||||
Chat(0);
|
||||
|
||||
/*
|
||||
* Check users timeleft
|
||||
|
123
mbsebbs/page.c
123
mbsebbs/page.c
@ -47,19 +47,22 @@
|
||||
#include "language.h"
|
||||
|
||||
|
||||
extern pid_t mypid;
|
||||
|
||||
|
||||
/*
|
||||
* Function to Page Sysop
|
||||
*/
|
||||
void Page_Sysop(char *String)
|
||||
{
|
||||
FILE *pWritingDevice;
|
||||
int i, iOpenDevice = FALSE; /* Flag to check if you can write to CFG.sChatDevice */
|
||||
int i;
|
||||
char *Reason, temp[81];
|
||||
static char buf[128];
|
||||
|
||||
Reason = calloc(81, sizeof(char));
|
||||
|
||||
clear();
|
||||
colour(12, 0);
|
||||
colour(LIGHTRED, BLACK);
|
||||
/* MBSE BBS Chat */
|
||||
Center((char *) Language(151));
|
||||
|
||||
@ -99,24 +102,10 @@ void Page_Sysop(char *String)
|
||||
|
||||
Syslog('+', "Chat Reason: %s", 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--;
|
||||
|
||||
@ -124,13 +113,17 @@ void Page_Sysop(char *String)
|
||||
if (!DisplayFile((char *)"maxpage")) {
|
||||
/* If i is FALSE display hard coded message */
|
||||
Enter(1);
|
||||
/* You have paged the Sysop the maximum times allowed. */
|
||||
pout(WHITE, BLACK, (char *) Language(154));
|
||||
Enter(2);
|
||||
}
|
||||
|
||||
Syslog('!', "Attempted to page Sysop, above maximum page limit.");
|
||||
Pause();
|
||||
} else {
|
||||
free(Reason);
|
||||
return;
|
||||
}
|
||||
|
||||
locate(14, ((80 - strlen(String) ) / 2 - 2));
|
||||
pout(WHITE, BLACK, (char *)"[");
|
||||
pout(LIGHTGRAY, BLACK, String);
|
||||
@ -145,40 +138,73 @@ void Page_Sysop(char *String)
|
||||
|
||||
locate(16, ((80 - CFG.iPageLength) / 2 - 2) + 1);
|
||||
|
||||
if ((pWritingDevice = fopen(CFG.sChatDevice, "w")) != NULL) {
|
||||
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", \
|
||||
getenv("MBSE_ROOT"), pTTY);
|
||||
fprintf(pWritingDevice, "\n%d seconds to respond!\n\n", CFG.iPageLength);
|
||||
fprintf(pWritingDevice, "%s\n", temp);
|
||||
iOpenDevice = TRUE;
|
||||
}
|
||||
|
||||
colour(LIGHTBLUE, BLACK);
|
||||
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);
|
||||
fflush(stdout);
|
||||
sleep(1);
|
||||
if (access("/tmp/chatdev", R_OK) == 0) {
|
||||
fclose(pWritingDevice);
|
||||
Chat();
|
||||
sprintf(buf, "CPAG:2,%d,%s;", mypid, Reason);
|
||||
if (socket_send(buf)) {
|
||||
Syslog('+', "Failed to send message to mbtask");
|
||||
free(Reason);
|
||||
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;
|
||||
}
|
||||
|
||||
if (iOpenDevice) {
|
||||
fclose(pWritingDevice);
|
||||
iOpenDevice = 0;
|
||||
/*
|
||||
* 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);
|
||||
for (i = 0; i < CFG.iPageLength; i++) {
|
||||
printf("%c", 219);
|
||||
fflush(stdout);
|
||||
sleep(1);
|
||||
|
||||
// if drop into chat
|
||||
// Chat();
|
||||
// free(Reason);
|
||||
// return;
|
||||
}
|
||||
|
||||
/*
|
||||
* Cancel page request
|
||||
*/
|
||||
sprintf(buf, "CCAN:1,%d", mypid);
|
||||
socket_send(buf);
|
||||
strcpy(buf, socket_receive());
|
||||
}
|
||||
|
||||
PageReason();
|
||||
printf("\n\n\n");
|
||||
Pause();
|
||||
@ -186,7 +212,6 @@ void Page_Sysop(char *String)
|
||||
SysopComment(Reason);
|
||||
else
|
||||
SysopComment((char *)"Failed chat");
|
||||
}
|
||||
|
||||
free(Reason);
|
||||
Pause();
|
||||
|
@ -4,7 +4,7 @@
|
||||
* Purpose ...............: MBSE BBS Daemon
|
||||
*
|
||||
*****************************************************************************
|
||||
* Copyright (C) 1997-2002
|
||||
* Copyright (C) 1997-2003
|
||||
*
|
||||
* Michiel Broek FIDO: 2:280/2802
|
||||
* Beekmansbos 10
|
||||
@ -259,11 +259,9 @@ char *exe_cmd(char *in)
|
||||
* 100:0;
|
||||
*/
|
||||
if (strncmp(cmd, "CSPM", 4) == 0) {
|
||||
if ((result = reg_spm(token))) {
|
||||
if ((result = reg_spm(token)))
|
||||
sprintf(obuf, "100:1,%d;", result);
|
||||
return obuf;
|
||||
} else
|
||||
return obuf;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -276,6 +274,31 @@ char *exe_cmd(char *in)
|
||||
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.
|
||||
@ -372,14 +395,11 @@ char *exe_cmd(char *in)
|
||||
*/
|
||||
if (strncmp(cmd, "SBBS", 4) == 0) {
|
||||
switch(stat_bbs_stat()) {
|
||||
case 0:
|
||||
sprintf(obuf, "100:2,0,The system is open for use;");
|
||||
case 0: sprintf(obuf, "100:2,0,The system is open for use;");
|
||||
break;
|
||||
case 1:
|
||||
sprintf(obuf, "100:2,1,The system is closed right now!;");
|
||||
case 1: sprintf(obuf, "100:2,1,The system is closed right now!;");
|
||||
break;
|
||||
case 2:
|
||||
sprintf(obuf, "100:2,2,The system is closed for Zone Mail Hour!;");
|
||||
case 2: sprintf(obuf, "100:2,2,The system is closed for Zone Mail Hour!;");
|
||||
break;
|
||||
}
|
||||
return obuf;
|
||||
|
@ -36,6 +36,7 @@
|
||||
#include "taskutil.h"
|
||||
|
||||
extern reg_info reginfo[MAXCLIENT]; /* Array with clients */
|
||||
extern struct sysconfig CFG; /* System config */
|
||||
static int entrypos = 0; /* Status pointer */
|
||||
static int mailers = 0; /* Registered mailers */
|
||||
static int sysop_present = 0; /* Sysop present */
|
||||
@ -413,36 +414,41 @@ char *reg_ipm(char *data)
|
||||
*/
|
||||
int reg_spm(char *data)
|
||||
{
|
||||
char *cnt, *from, *too, *txt;
|
||||
int ch, i;
|
||||
char *cnt, *ch, *from, *too, *txt, *log;
|
||||
int i;
|
||||
|
||||
cnt = strtok(data, ",");
|
||||
ch = atoi(strtok(NULL, ","));
|
||||
ch = strtok(NULL, ",");
|
||||
from = strtok(NULL, ",");
|
||||
too = strtok(NULL, ",");
|
||||
txt = strtok(NULL, "\0");
|
||||
txt[strlen(txt)-1] = '\0';
|
||||
|
||||
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++) {
|
||||
/*
|
||||
* 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
|
||||
* message present flag is still set, then this user
|
||||
* can't get anymore new messages.
|
||||
*/
|
||||
if (reginfo[i].ismsg && (reginfo[i].ptr_in == reginfo[i].ptr_out)) {
|
||||
free(log);
|
||||
return 2;
|
||||
}
|
||||
|
||||
/*
|
||||
* 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;
|
||||
}
|
||||
|
||||
@ -457,14 +463,19 @@ int reg_spm(char *data)
|
||||
reginfo[i].ptr_in = 0;
|
||||
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);
|
||||
free(log);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* 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)) {
|
||||
Syslog('!', "reg_spm: buffer full for %s", reginfo[i].uname);
|
||||
} else {
|
||||
@ -475,13 +486,19 @@ int reg_spm(char *data)
|
||||
else
|
||||
reginfo[i].ptr_in = 0;
|
||||
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,
|
||||
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 0; // Ok
|
||||
}
|
||||
@ -564,3 +581,99 @@ char *get_reginfo(int first)
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* 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_tty(char *);
|
||||
int reg_user(char *);
|
||||
int reg_silent(char *);
|
||||
char *reg_ipm(char *);
|
||||
int reg_spm(char *);
|
||||
char *reg_fre(void);
|
||||
char *get_reginfo(int);
|
||||
int reg_sysop(char *);
|
||||
int reg_silent(char *); /* Set/Reset do not disturb */
|
||||
char *reg_ipm(char *); /* Check for personal/chat msg */
|
||||
int reg_spm(char *); /* Send personal/chat message */
|
||||
char *reg_fre(void); /* Check if system is free */
|
||||
char *get_reginfo(int); /* Get registration info */
|
||||
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
|
||||
|
||||
|
Reference in New Issue
Block a user