//Our TCP socket
class CTCPScanner : public CTCPSocketAsync
{
public:
//Ctor and Dtor
CTCPScanner(CTCPPortScanner* pFather,
unsigned short usPort,
int iDataSize,
DWORD dwTimeout);
virtual ~CTCPScanner();
protected:
//Our events
NO_OnSocketAccept
NO_OnSocketOOB
NO_OnSocketWrite
virtual BOOL OnSocketTimeout();
virtual BOOL OnSocketConnect(int iErrorCode);
virtual BOOL OnSocketClose(int iErrorCode);
virtual BOOL OnSocketReceive(int iErrorCode);
private:
//Our father
CTCPPortScanner* m_pFather;
//Do we receive data
int m_iDataSize;
//Do we have a timeout
DWORD m_dwTimeout;
//The port
unsigned short m_usPort;
};
//Structure of ports to scan
typedef struct _ScanPair
{
unsigned short usFromPort;
unsigned short usToPort;
} ScanPair;
//Our list of ports to scan
typedef std::deque<ScanPair> PortsVector;
//Our map of data
typedef std::map<unsigned short,char*> DataMap;
//Thread data
typedef struct _ThreadData
{
CTCPPortScanner* pScanner;
BOOL bError;
} ThreadData;