First completed version of cleaned up connection object.
First testing is promising
This commit is contained in:
32
telnet.c
32
telnet.c
@ -13,6 +13,8 @@
|
||||
#include "passwd.h"
|
||||
#include "telnet.h"
|
||||
#include "fortify.h"
|
||||
#include "asynnet.h"
|
||||
#include "conman.h"
|
||||
#define LOGINWAIT 300
|
||||
/* 300 == 5 minutes to wait for valid username password */
|
||||
/*-------------------------------------------------------------------------*/
|
||||
@ -96,7 +98,7 @@ static void SendGA(SConnection * pCon)
|
||||
|
||||
pReply[0] = (char) 255;
|
||||
pReply[1] = (char) 249;
|
||||
NETWrite(pCon->pSock, pReply, 2);
|
||||
ANETwrite(SCGetSockHandle(pCon), pReply, 2);
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
@ -113,7 +115,7 @@ int TelnetTask(void *pData)
|
||||
self = (pTelTask) pData;
|
||||
assert(self);
|
||||
|
||||
if (self->pCon->iEnd) {
|
||||
if (SCGetEnd(self->pCon)) {
|
||||
if (SCActive(self->pCon)) {
|
||||
return 1;
|
||||
} else {
|
||||
@ -122,21 +124,20 @@ int TelnetTask(void *pData)
|
||||
}
|
||||
|
||||
/* pop and execute */
|
||||
iRet = CostaPop(self->pCon->pStack, &pPtr);
|
||||
iRet = SCCostaTop(self->pCon,pPtr);
|
||||
if (iRet) {
|
||||
if (pPtr) {
|
||||
if (self->iLogin) { /* handle normal command */
|
||||
/* check for logoff */
|
||||
if (strstr(pPtr, "logoff") != NULL) {
|
||||
ANETclose(self->pCon->sockHandle);
|
||||
SCClose(self->pCon);
|
||||
free(pPtr);
|
||||
self->pCon->iEnd = 1;
|
||||
return 0;
|
||||
}
|
||||
/* invoke command */
|
||||
CostaLock(self->pCon->pStack);
|
||||
SCCostaLock(self->pCon);
|
||||
SCInvoke(self->pCon, pServ->pSics, pPtr);
|
||||
CostaUnlock(self->pCon->pStack);
|
||||
SCCostaUnLock(self->pCon);
|
||||
SendGA(self->pCon);
|
||||
free(pPtr);
|
||||
} else { /* handle login messages */
|
||||
@ -149,8 +150,7 @@ int TelnetTask(void *pData)
|
||||
if (time(&shit) > self->tStart + LOGINWAIT) {
|
||||
SCWrite(self->pCon,
|
||||
"I cannot stand your login attempts anymore!", eError);
|
||||
ANETclose(self->pCon->sockHandle);
|
||||
self->pCon->iEnd = 1;
|
||||
SCClose(self->pCon);
|
||||
free(pPtr);
|
||||
return 0;
|
||||
}
|
||||
@ -172,7 +172,7 @@ int TelnetTask(void *pData)
|
||||
return 1;
|
||||
} else {
|
||||
snprintf(pBuffer,sizeof(pBuffer)-1, "Accepted telnet connection on handle %d",
|
||||
self->pCon->sockHandle);
|
||||
SCGetSockHandle(self->pCon));
|
||||
Log(INFO,"com","%s",pBuffer);
|
||||
SendWelcome(self->pCon);
|
||||
SCSetRights(self->pCon, iRet);
|
||||
@ -187,14 +187,14 @@ int TelnetTask(void *pData)
|
||||
}
|
||||
/* check for no commands but timeout on telnet */
|
||||
if (!self->iLogin && (time(&shit) > self->tStart + LOGINWAIT)) {
|
||||
self->pCon->iEnd = 1;
|
||||
ANETclose(self->pCon->sockHandle);
|
||||
SCSetEnd(self->pCon,1);
|
||||
SCClose(self->pCon);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/* check for end */
|
||||
if (self->pCon->iEnd) {
|
||||
if (SCGetEnd(self->pCon)) {
|
||||
if (SCActive(self->pCon)) {
|
||||
return 1;
|
||||
} else {
|
||||
@ -219,7 +219,7 @@ void TelnetSignal(void *pData, int iSignal, void *pSigData)
|
||||
iInt = (int *) pSigData;
|
||||
SCSetInterrupt(self->pCon, *iInt);
|
||||
if (*iInt == eEndServer) {
|
||||
self->pCon->iEnd = 1;
|
||||
SCSetEnd(self->pCon,1);
|
||||
}
|
||||
} else if (iSignal == SICSBROADCAST) {
|
||||
pPtr = (char *) pSigData;
|
||||
@ -227,9 +227,9 @@ void TelnetSignal(void *pData, int iSignal, void *pSigData)
|
||||
SCWrite(self->pCon, pPtr, eWarning);
|
||||
}
|
||||
} else if (iSignal == TOKENRELEASE) {
|
||||
self->pCon->iGrab = 0;
|
||||
SCSetGrab(self->pCon,0);
|
||||
} else if (iSignal == TOKENGRAB) {
|
||||
self->pCon->iGrab = 1;
|
||||
SCSetGrab(self->pCon,1);
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user