Gray C++ Libraries  0.0.2
A set of C++ libraries for MSVC, GNU on Windows, WinCE, Linux
GrayFTP::cFTPFactory Class Reference

#include <cFTPFactory.h>

Inheritance diagram for GrayFTP::cFTPFactory:
GrayLib::IProtocolFactory

Public Member Functions

 cFTPFactory (cNetServer &rNetServer, cFTPCfg &rCfg)
 
virtual ~cFTPFactory ()
 
StrLen_t _cdecl LogEventF (LOG_ATTR_MASK_t dwAttrMask, const LOGCHAR_t *pszFormat,...)
 
HRESULT CheckAddressBeforeAccept (const cNetAddress &AddrNew) const
 
bool OnClientClose (cNetServerConnection *pClient)
 
HRESULT OpenDPasvListen (OUT cNetServerPortPtr &pDPasv)
 
bool OpenFactory ()
 
void CloseFactory ()
 
- Public Member Functions inherited from GrayLib::IProtocolFactory
virtual ~IProtocolFactory ()
 
virtual size_t get_ProtocolMaxMessageSize () const
 

Public Attributes

cNetServerm_rNetServer
 
cFTPCfgm_rCfg
 
cNetAddrName m_AddrMe
 My gethostname() and my primary IP. Maybe not my only IP. More...
 
cFTPFactoryData m_ProtocolData
 incoming Data connection. PASV usually. on m_Opts.m_wPasvPort More...
 
cNetServerPortPtr m_pSocketCtrl
 a dedicated server listening command/control socket/port. m_Opts.m_wPort = 21 More...
 
cNetServerPortPtr m_pSocketDataPasv
 dedicated listen port for incoming passive data connections. (if needed) m_Opts.m_wPasvPort = 20 More...
 
cArrayRef< cClientFTPm_aConnectCmd
 All my Control/command connections on m_pSocketCtrl. non data connections. duped in cNetServerGroup. More...
 

Protected Member Functions

virtual const char * get_ProtocolName () const override
 
virtual HRESULT TestProtocol (const BYTE *pszPrefixData, size_t iPrefixLen) const override
 
virtual cProtocolStreamPtr CreateProtocolStream (IUnkObject *pServerConnection, cStreamInput *pStreamInp, cStreamOutput *pStreamOut) override
 

Detailed Description

a FTP protocol plug-in for cNetServer An FTP server listening on a control SOCKET/port for incoming command/control connections.

Constructor & Destructor Documentation

◆ cFTPFactory()

GrayFTP::cFTPFactory::cFTPFactory ( cNetServer rNetServer,
cFTPCfg rCfg 
)

◆ ~cFTPFactory()

GrayFTP::cFTPFactory::~cFTPFactory ( )
virtual

Member Function Documentation

◆ CheckAddressBeforeAccept()

HRESULT GrayFTP::cFTPFactory::CheckAddressBeforeAccept ( const cNetAddress AddrNew) const

Count clients from this IP/host ? <= m_iMaxClientsPerIP Beware of DoS attack = hog up all the connections !!! cNetServer

◆ CloseFactory()

void GrayFTP::cFTPFactory::CloseFactory ( )

Dump any FTP clients i have.

◆ CreateProtocolStream()

cProtocolStreamPtr GrayFTP::cFTPFactory::CreateProtocolStream ( IUnkObject *  pServerConnection,
cStreamInput pStreamInp,
cStreamOutput pStreamOut 
)
overrideprotectedvirtual

New command connection detected. from cNetServer. pClient = cNetServerConnection

Implements GrayLib::IProtocolFactory.

◆ get_ProtocolName()

virtual const char* GrayFTP::cFTPFactory::get_ProtocolName ( ) const
inlineoverrideprotectedvirtual

◆ LogEventF()

StrLen_t _cdecl GrayFTP::cFTPFactory::LogEventF ( LOG_ATTR_MASK_t  dwAttrMask,
const LOGCHAR_t pszFormat,
  ... 
)

◆ OnClientClose()

bool GrayFTP::cFTPFactory::OnClientClose ( cNetServerConnection pClient)

client dropped.

◆ OpenDPasvListen()

HRESULT GrayFTP::cFTPFactory::OpenDPasvListen ( OUT cNetServerPortPtr pDPasv)

Open a listen port for incoming PASV data connection. Only open this data listen port when actually needed.

◆ OpenFactory()

bool GrayFTP::cFTPFactory::OpenFactory ( )

Open the control port.

◆ TestProtocol()

virtual HRESULT GrayFTP::cFTPFactory::TestProtocol ( const BYTE *  pszPrefixData,
size_t  iPrefixLen 
) const
inlineoverrideprotectedvirtual

IProtocolFactory server always sends a welcome message on connect. no client hello. (no negotiation). Port bound. No inspection required.

Implements GrayLib::IProtocolFactory.

Member Data Documentation

◆ m_aConnectCmd

cArrayRef<cClientFTP> GrayFTP::cFTPFactory::m_aConnectCmd

All my Control/command connections on m_pSocketCtrl. non data connections. duped in cNetServerGroup.

◆ m_AddrMe

cNetAddrName GrayFTP::cFTPFactory::m_AddrMe

My gethostname() and my primary IP. Maybe not my only IP.

◆ m_ProtocolData

cFTPFactoryData GrayFTP::cFTPFactory::m_ProtocolData

incoming Data connection. PASV usually. on m_Opts.m_wPasvPort

◆ m_pSocketCtrl

cNetServerPortPtr GrayFTP::cFTPFactory::m_pSocketCtrl

a dedicated server listening command/control socket/port. m_Opts.m_wPort = 21

◆ m_pSocketDataPasv

cNetServerPortPtr GrayFTP::cFTPFactory::m_pSocketDataPasv

dedicated listen port for incoming passive data connections. (if needed) m_Opts.m_wPasvPort = 20

◆ m_rCfg

cFTPCfg& GrayFTP::cFTPFactory::m_rCfg

◆ m_rNetServer

cNetServer& GrayFTP::cFTPFactory::m_rNetServer

The documentation for this class was generated from the following files: