TheNetNode-CB/src/l1telnet.c

174 lines
5.2 KiB
C
Executable File

#include "tnn.h"
#ifdef L1TELNET
static T_INTERFACE *ifpp; /* Zeiger auf das Aktuelle Interface.*/
/* TELNET-Server Einstellung aendern/setzen. */
void ccptelnet(void)
{
MBHEAD *mbp;
char ch;
int tmp_fd = EOF;
int newloglevel = 0;
int new_tcp_port = 0;
#ifdef DEBUG_MODUS
lastfunc = "l1telnet(ccptelnet)";
#endif /* DEBUG_MODUS */
ifpp = &ifp[TEL_ID]; /* Dann Zeiger auf das TELNET-Interface. */
if (issyso() && skipsp(&clicnt, &clipoi)) /* Sysop will aendern. */
{
clicnt--;
ch = toupper(*clipoi++);
switch (ch)
{
case 'P': /* Sysop will Telnet-Port aéndern */
if (!skipsp(&clicnt, &clipoi))
{
putmsg("Invalid Parameter\r");
return;
}
new_tcp_port = nxtlong(&clicnt, &clipoi); /* Neuen Port ermitteln */
if ( (new_tcp_port < 1)
||(new_tcp_port > 65535))
{
putmsg("TCP-Port not valid, not changed !!!\r");
return;
}
if (ifpp->actively == FALSE) /* Telnet ist deaktiv.*/
{
putmsg("TCP-Port haven not switched on!\r");
return;
}
/* Wenn NEUER Port und ALTER Port gleich sind, nicht neu Initialisieren.*/
if (ifpp->tcpport == Htons((unsigned short)new_tcp_port))
{
putmsg("TCP-Port successfully changed\r");
return;
}
/* Neuen TCP-Port Initialisieren. */
if ((tmp_fd = SetupTCP(ifpp->name, (unsigned short)new_tcp_port)) != EOF)
{
#ifdef OS_STACK
int tmp_fd_OS;
if ((tmp_fd_OS = SetupOS(ifpp, (unsigned short)new_tcp_port)) != EOF)
{
/* alten Socket schliessen */
close(ifpp->OsSock);
/* Neuen Socket merken */
ifpp->OsSock = tmp_fd_OS;
}
else
{
Close(tmp_fd);
putmsg("ERROR: Changing UDP-Port failed, Port not changed !!!\r");
return;
}
#endif /* OS_STACK */
Close(ifpp->ISock); /* Alten Socket schliessen. */
ifpp->ISock = tmp_fd ; /* Neuen Socket merken */
}
else
{ /* Neuen TCP-Port liess sich nicht Initialisieren. */
putmsg("ERROR: Changing UDP-Port failed, Port not changed !!!\r");
return;
}
ifpp->tcpport = Htons((unsigned short)new_tcp_port);
putmsg("TCP-Port successfully changed\r");
return;
case 'L': /* Sysop will LOGLevel aendern */
if (!skipsp(&clicnt, &clipoi))
{
mbp = putals("Telnet-Server:\r");
putprintf(mbp, "My LogLevel: %d\r",ifpp->log); /* Loglevel anzeigen. */
prompt(mbp);
seteom(mbp);
return;
}
newloglevel = nxtnum(&clicnt, &clipoi); /* neuen Loglevel ermitteln. */
if ( (newloglevel < 0)
||(newloglevel > 3)) /* Pruefe neuen Loglevel. */
{
mbp = putals("Telnet-Server:\r");
putprintf(mbp, "Error: Log level worth from 0 to 3!\r");
prompt(mbp);
seteom(mbp);
return;
}
ifpp->log = newloglevel; /* Neuen Loglevel setzen und zeigen */
mbp = putals("Telnet-Server:\r");
putprintf(mbp, "My Loglevel: %d\r", ifpp->log);
prompt(mbp);
seteom(mbp);
return;
break;
default: /* Ungueltiger Parameter. */
putmsg("Invalid Parameter\r");
return;
}
}
mbp = putals("Telnet-Server:\r"); /* Aktuelle Einstellungen zeigen. */
putprintf(mbp, "My TCP-Port: %u\r", Ntohs(ifpp->tcpport));
prompt(mbp);
seteom(mbp);
}
/* Aktuelle Zeichen auswerten. */
TRILLIAN GetContensTEL(char contens)
{
#ifdef DEBUG_MODUS
lastfunc = "l1telnet(GetContensTEL)";
#endif /* DEBUG_MODUS */
if (contens == CR) /* Zeichen ein Return. */
tcppoi->cr = TRUE; /* Markiere, das es ein Return gibt. */
if (contens == LF) /* Zeichen ein LF-Return. LF-Return nicht setzen.*/
return(NO); /* zum naechsten Zeichen. */
if (contens == (int)NULL) /* Alle Zeichen verarbeitet. */
{
if (tcppoi->cr) /* Return war dabei. */
{
tcppoi->cr = FALSE; /* Return zuruecksetzen. */
return(YES); /* Frame ist komplett. */
}
else
return(ERRORS); /* Return fehlt. */
}
if (!tcppoi->login) /* User ist noch nicht eingeloggt. */
{
if (CheckContens(contens)) /* Login-Zeichen auf Gueltigkeit pruefen. */
return(NO); /* Ungueltige Zeichen werden ignoriert. */
}
tcppoi->cmd[tcppoi->cmdlen++] = contens; /* Aktuelle Zeichen setzen. */
return(NO); /* Zum naechsten Zeichen. */
}
#endif /* L1TELNET */
/* End of src/l1telnet.c */