Server : Apache/2.4.43 (Win64) OpenSSL/1.1.1g PHP/7.4.6
System : Windows NT USER-PC 6.1 build 7601 (Windows 7 Professional Edition Service Pack 1) AMD64
User : User ( 0)
PHP Version : 7.4.6
Disable Function : NONE
Directory :  C:/xampp/FileZillaFTP/source/
Upload File :
Current Directory [ Writeable ] Root Directory [ Writeable ]


Current File : C:/xampp/FileZillaFTP/source/AdminInterface.cpp
// 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));
}