mojo_client/src/Client/ControlSocket.cpp
2008-03-24 16:43:51 +00:00

60 lines
1.7 KiB
C++

#include "common.h"
#include "PseuWoW.h"
#include "RemoteController.h"
#include "ControlSocket.h"
ControlSocket::ControlSocket(SocketHandler& h) : TcpSocket(h)
{
_ok = false;
DEBUG(logdebug("ControlSocket created"));
}
void ControlSocket::OnAccept(void)
{
logdetail("ControlSocket: Incoming connection from %s:%u [host:%s]",GetRemoteAddress().c_str(),GetRemotePort(),GetRemoteHostname().c_str());
// must perform some crappy ptr conversion here, doesnt want to typecast SocketHandler -> ControlSocketHandler directly
SocketHandler& hnd = Handler();
ControlSocketHandler *chnd = static_cast<ControlSocketHandler*>(&hnd);
_instance = chnd->GetInstance();
DEBUG(logdebug("ControlSocket: setting instance = %X",_instance));
// accept only connections from one host for now, if set
if(_instance->GetConf()->rmcontrolhost.length()
&& !(GetRemoteAddress() == _instance->GetConf()->rmcontrolhost || GetRemoteHostname() == _instance->GetConf()->rmcontrolhost))
{
logdetail("ControlSocket: connection rejected. closing.");
SetCloseAndDelete(true);
return;
}
_ok = true;
}
void ControlSocket::OnRead(void)
{
if(!_ok)
return;
TcpSocket::OnRead();
uint32 len = ibuf.GetLength();
if(!len)
{
logdetail("ControlSocket: connection to %s:%u closed.",GetRemoteAddress().c_str(),GetRemotePort());
return;
}
char *buf = new char[len];
ibuf.Read(buf,len);
if(buf[0]==0)
{
// reserved for future applications
}
else
{
if(_instance && _instance->GetScripts())
_instance->GetScripts()->RunSingleLine(&buf[0]);
}
delete [] buf;
}