rendered paste bodybool CWoWSniffer::StartTheSniffer()
{
if (!IsSniffing)
{
hSniffingThread = CreateThread(0, 0, (PTHREAD_START_ROUTINE)StartSniffingThread, (void*)this, 0, 0);
if (!hSniffingThread)
return false;
IsSniffing = true;
LogToFile("Sniffing session started.\r\n");
LogToControl(hDataLog, "Sniffing sesssion started.\r\n");
GetWindowText(m_hWnd, WindowTitle, sizeof(WindowTitle));
char buffer[128];
strcpy(buffer, WindowTitle);
strcat(buffer, " - Sniffing started.");
SetWindowText(m_hWnd, buffer);
ShowWindow(hStatusIdle, SW_HIDE);
ShowWindow(hStatusSniffing, SW_SHOW);
// Clear data in listview / packet data edit control
SendMessage(hListView, LVM_DELETEALLITEMS, 0, 0);
SendMessage(hDataPacket, WM_SETTEXT, 0, 0);
return true;
}
return false;
}
void CWoWSniffer::StartSniffingThread(void* param)
{
assert(param);
CWoWSniffer* instance = (CWoWSniffer*)param;
if (!instance->GetSnifferInfo(&instance->info))
{
instance->ShowError("GetSnifferInfo()", instance->GetHWND(), MB_ICONERROR, "Failed to start sniffing.\r\n");
instance->LogToFile("Sniffing session aborted by fatal error.\r\n");
instance->LogToControl(GetDlgItem(instance->GetHWND(), IDE_DATA_LOG), "Sniffing session aborted by fatal error.\r\n");
instance->IsSniffing = false;
ExitThread(GetLastError());
}
char filter[1024];
if (isdigit(instance->info.IP[0]))
sprintf(filter, "net %s and (port %d or %d)", instance->info.IP, instance->info.RealmPort, instance->info.WorldPort);
else
sprintf(filter, "host %s and (port %d or %d)", instance->info.IP, instance->info.RealmPort, instance->info.WorldPort);
if (!instance->Sniffer->StartSniffing(filter, instance->info.DeviceName, instance->info.DeviceNumber, instance->hListView))
{
instance->ShowError("StartTheSniffing()", instance->GetHWND(), MB_ICONERROR);
instance->StopTheSniffer();
instance->LogToFile("Sniffing session aborted by fatal error.\r\n");
instance->LogToControl(GetDlgItem(instance->GetHWND(), IDE_DATA_LOG), "Sniffing session aborted by fatal error.\r\n");
}
ExitThread(GetLastError());
}