//Check max sockets are ok
if (GetMaxSockets()<=0 ||
!IsDone() ||
!aTarget)
{
//Report it
ReportError("Scan","Invalid parameters!");
//Exit
return FALSE;
}
try
{
//Reset the pair
ResetPair();
//Can we scan
if (!CanScan())
{
//Error
ReportError("Scan","No ports given!");
//Error
SetError(TRUE);
//Exit
return FALSE;
}
//Clear the ports map
ResetPortsData();
//Do we have the socket?
if (m_pScanner)
delete m_pScanner;
//Allocate it
m_pScanner=new CTCPScanner;
//Try to create it
if (!m_pScanner->Create())
{
//Report it
ReportError("Scan","Failed to create socket!");
//Exit
return FALSE;
}
//Try to create the sniffer
if (!CreateSniffer())
{
//Error
ReportError("Scan","Failed to create sniffer!");
//Error
SetError(TRUE);
//Exit
return FALSE;
}
//Set the flags
SetError(FALSE);
SetDone(FALSE);
//Save the number of max sockets
ResetSocketCount();
//Delete the port data
DeletePortsMap();
//Delete other data
ResetData();
//Set our target
SetTarget(aTarget);
//Create the thread
StartThread(FALSE);
//Start the loop
for (int iCounter=0;
iCounter<GetMaxSockets();
++iCounter)
{
BOOL bQuit;
bQuit=FALSE;
//Try to allocate sockets
while (!bQuit)
{
//Another socket
AdjustNumberOfSockets(1);
//Create it
if (!(bQuit=NewSocket()))
ReportError("Scan","Failed to create socket!");
}
}
//Done
return TRUE;
}
ERROR_HANDLER_RETURN("Scan",FALSE)