QueryPerformanceCounter(&timer2);
if (((timer2.QuadPart - timer1.QuadPart) * 1000 / frequency.QuadPart) < pi.timeout)
- Sleep(pi.timeout - ((timer2.QuadPart - timer1.QuadPart) * 1000 / frequency.QuadPart));
+ Sleep((DWORD) (pi.timeout - ((timer2.QuadPart - timer1.QuadPart) * 1000 / frequency.QuadPart)));
} while (--num);
if (l_Debug)
HANDLE hIcmp = Icmp6CreateFile();
if (hIcmp == INVALID_HANDLE_VALUE) {
- goto die;
- }
+ printErrorInfo(GetLastError());
- IP_OPTION_INFORMATION ipInfo = { 30, 0, 0, 0, NULL };
-
- LARGE_INTEGER frequency;
- QueryPerformanceFrequency(&frequency);
-
- do {
- LARGE_INTEGER timer1;
- QueryPerformanceCounter(&timer1);
+ if (hIcmp)
+ IcmpCloseHandle(hIcmp);
- if (l_Debug)
- std::wcout << L"Sending Icmp echo" << '\n';
+ if (repBuf)
+ delete reinterpret_cast<BYTE *>(repBuf);
- if (!Icmp6SendEcho2(hIcmp, NULL, NULL, NULL, &ipSource6, &ipDest6,
- NULL, 0, &ipInfo, repBuf, dwRepSize, pi.timeout)) {
- response.dropped++;
- if (l_Debug)
- std::wcout << L"Dropped: Response was 0" << '\n';
- continue;
- }
+ return 3;
+ } else {
+ IP_OPTION_INFORMATION ipInfo = { 30, 0, 0, 0, NULL };
- if (l_Debug)
- std::wcout << "Ping recieved" << '\n';
+ LARGE_INTEGER frequency;
+ QueryPerformanceFrequency(&frequency);
- Icmp6ParseReplies(repBuf, dwRepSize);
+ do {
+ LARGE_INTEGER timer1;
+ QueryPerformanceCounter(&timer1);
- ICMPV6_ECHO_REPLY *pEchoReply = static_cast<ICMPV6_ECHO_REPLY *>(repBuf);
+ if (l_Debug)
+ std::wcout << L"Sending Icmp echo" << '\n';
+
+ if (!Icmp6SendEcho2(hIcmp, NULL, NULL, NULL, &ipSource6, &ipDest6,
+ NULL, 0, &ipInfo, repBuf, dwRepSize, pi.timeout)) {
+ response.dropped++;
+ if (l_Debug)
+ std::wcout << L"Dropped: Response was 0" << '\n';
+ continue;
+ }
- if (pEchoReply->Status != IP_SUCCESS) {
- response.dropped++;
if (l_Debug)
- std::wcout << L"Dropped: echo reply status " << pEchoReply->Status << '\n';
- continue;
- }
+ std::wcout << "Ping recieved" << '\n';
- rtt += pEchoReply->RoundTripTime;
+ Icmp6ParseReplies(repBuf, dwRepSize);
- if (l_Debug)
- std::wcout << L"Recorded rtt of " << pEchoReply->RoundTripTime << '\n';
+ ICMPV6_ECHO_REPLY *pEchoReply = static_cast<ICMPV6_ECHO_REPLY *>(repBuf);
- if (response.pMin == 0 || pEchoReply->RoundTripTime < response.pMin)
- response.pMin = pEchoReply->RoundTripTime;
- else if (pEchoReply->RoundTripTime > response.pMax)
- response.pMax = pEchoReply->RoundTripTime;
+ if (pEchoReply->Status != IP_SUCCESS) {
+ response.dropped++;
+ if (l_Debug)
+ std::wcout << L"Dropped: echo reply status " << pEchoReply->Status << '\n';
+ continue;
+ }
- LARGE_INTEGER timer2;
- QueryPerformanceCounter(&timer2);
+ rtt += pEchoReply->RoundTripTime;
- if (((timer2.QuadPart - timer1.QuadPart) * 1000 / frequency.QuadPart) < pi.timeout)
- Sleep(pi.timeout - ((timer2.QuadPart - timer1.QuadPart) * 1000 / frequency.QuadPart));
- } while (--num);
+ if (l_Debug)
+ std::wcout << L"Recorded rtt of " << pEchoReply->RoundTripTime << '\n';
- if (l_Debug)
- std::wcout << L"All pings sent. Cleaning up and returning" << '\n';
+ if (response.pMin == 0 || pEchoReply->RoundTripTime < response.pMin)
+ response.pMin = pEchoReply->RoundTripTime;
+ else if (pEchoReply->RoundTripTime > response.pMax)
+ response.pMax = pEchoReply->RoundTripTime;
- if (hIcmp)
- IcmpCloseHandle(hIcmp);
+ LARGE_INTEGER timer2;
+ QueryPerformanceCounter(&timer2);
- if (repBuf)
- delete reinterpret_cast<BYTE *>(repBuf);
+ if (((timer2.QuadPart - timer1.QuadPart) * 1000 / frequency.QuadPart) < pi.timeout)
+ Sleep((DWORD) (pi.timeout - ((timer2.QuadPart - timer1.QuadPart) * 1000 / frequency.QuadPart)));
+ } while (--num);
- response.avg = ((double)rtt / pi.num);
+ if (l_Debug)
+ std::wcout << L"All pings sent. Cleaning up and returning" << '\n';
- return -1;
-die:
- printErrorInfo(GetLastError());
+ if (hIcmp)
+ IcmpCloseHandle(hIcmp);
- if (hIcmp)
- IcmpCloseHandle(hIcmp);
+ if (repBuf)
+ delete reinterpret_cast<BYTE *>(repBuf);
- if (repBuf)
- delete reinterpret_cast<BYTE *>(repBuf);
+ response.avg = ((double)rtt / pi.num);
- return 3;
+ return -1;
+ }
}
int wmain(int argc, WCHAR **argv)