bool 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()); }