Initial Commit
This commit is contained in:
99
database/FileZillaFTP/source/AdminInterface.cpp
Normal file
99
database/FileZillaFTP/source/AdminInterface.cpp
Normal file
@@ -0,0 +1,99 @@
|
||||
// FileZilla Server - a Windows ftp server
|
||||
|
||||
// Copyright (C) 2002-2004 - Tim Kosse <tim.kosse@gmx.de>
|
||||
|
||||
// This program 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
|
||||
// of the License, or (at your option) any later version.
|
||||
|
||||
// This program 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 this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
// AdminInterface.cpp: Implementierung der Klasse CAdminInterface.
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "AdminInterface.h"
|
||||
#include "AdminSocket.h"
|
||||
#include "Server.h"
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Konstruktion/Destruktion
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
CAdminInterface::CAdminInterface(CServer *pServer)
|
||||
{
|
||||
ASSERT(pServer);
|
||||
m_pServer = pServer;
|
||||
}
|
||||
|
||||
CAdminInterface::~CAdminInterface()
|
||||
{
|
||||
for (std::list<CAdminSocket *>::iterator iter = m_AdminSocketList.begin(); iter != m_AdminSocketList.end(); iter++)
|
||||
delete *iter;
|
||||
}
|
||||
|
||||
BOOL CAdminInterface::Add(CAdminSocket *pAdminSocket)
|
||||
{
|
||||
if (pAdminSocket->Init())
|
||||
{
|
||||
m_AdminSocketList.push_back(pAdminSocket);
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BOOL CAdminInterface::SendCommand(int nType, int nID, const void *pData, int nDataLength)
|
||||
{
|
||||
ASSERT((!nDataLength && !pData) || (pData && nDataLength));
|
||||
|
||||
std::list<CAdminSocket *> deleteList;
|
||||
std::list<CAdminSocket *>::iterator iter;
|
||||
for (iter = m_AdminSocketList.begin(); iter != m_AdminSocketList.end(); iter++)
|
||||
if (!(*iter)->SendCommand(nType, nID, pData, nDataLength))
|
||||
{
|
||||
deleteList.push_back(*iter);
|
||||
}
|
||||
|
||||
for (iter = deleteList.begin(); iter != deleteList.end(); iter++)
|
||||
VERIFY(Remove(*iter));
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL CAdminInterface::Remove(CAdminSocket *pAdminSocket)
|
||||
{
|
||||
for (std::list<CAdminSocket *>::iterator iter = m_AdminSocketList.begin(); iter != m_AdminSocketList.end(); iter++)
|
||||
if (*iter == pAdminSocket)
|
||||
{
|
||||
delete *iter;
|
||||
m_AdminSocketList.erase(iter);
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BOOL CAdminInterface::ProcessCommand(CAdminSocket *pAdminSocket, int nID, void *pData, int nDataLength)
|
||||
{
|
||||
m_pServer->ProcessCommand(pAdminSocket, nID, reinterpret_cast<unsigned char *>(pData), nDataLength);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void CAdminInterface::CheckForTimeout()
|
||||
{
|
||||
std::list<CAdminSocket *> deleteList;
|
||||
std::list<CAdminSocket *>::iterator iter;
|
||||
for (iter=m_AdminSocketList.begin(); iter!=m_AdminSocketList.end(); iter++)
|
||||
if ((*iter)->CheckForTimeout())
|
||||
deleteList.push_back(*iter);
|
||||
|
||||
for (iter=deleteList.begin(); iter!=deleteList.end(); iter++)
|
||||
VERIFY(Remove(*iter));
|
||||
}
|
||||
Reference in New Issue
Block a user