174 lines
5.2 KiB
C
174 lines
5.2 KiB
C
|
#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 */
|