| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. | 2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 119 // Global Constants and Types | 119 // Global Constants and Types |
| 120 ////////////////////////////////////////////////////////////////////// | 120 ////////////////////////////////////////////////////////////////////// |
| 121 | 121 |
| 122 const char * const ICMP_DLL_NAME = "Iphlpapi.dll"; | 122 const char * const ICMP_DLL_NAME = "Iphlpapi.dll"; |
| 123 const char * const ICMP_CREATE_FUNC = "IcmpCreateFile"; | 123 const char * const ICMP_CREATE_FUNC = "IcmpCreateFile"; |
| 124 const char * const ICMP_CLOSE_FUNC = "IcmpCloseHandle"; | 124 const char * const ICMP_CLOSE_FUNC = "IcmpCloseHandle"; |
| 125 const char * const ICMP_SEND_FUNC = "IcmpSendEcho"; | 125 const char * const ICMP_SEND_FUNC = "IcmpSendEcho"; |
| 126 const char * const ICMP6_CREATE_FUNC = "Icmp6CreateFile"; | 126 const char * const ICMP6_CREATE_FUNC = "Icmp6CreateFile"; |
| 127 const char * const ICMP6_SEND_FUNC = "Icmp6SendEcho2"; | 127 const char * const ICMP6_SEND_FUNC = "Icmp6SendEcho2"; |
| 128 | 128 |
| 129 inline uint32 ReplySize(uint32 data_size, int family) { | 129 inline uint32_t ReplySize(uint32_t data_size, int family) { |
| 130 if (family == AF_INET) { | 130 if (family == AF_INET) { |
| 131 // A ping error message is 8 bytes long, so make sure we allow for at least | 131 // A ping error message is 8 bytes long, so make sure we allow for at least |
| 132 // 8 bytes of reply data. | 132 // 8 bytes of reply data. |
| 133 return sizeof(ICMP_ECHO_REPLY) + std::max<uint32>(8, data_size); | 133 return sizeof(ICMP_ECHO_REPLY) + std::max<uint32_t>(8, data_size); |
| 134 } else if (family == AF_INET6) { | 134 } else if (family == AF_INET6) { |
| 135 // Per MSDN, Send6IcmpEcho2 needs at least one ICMPV6_ECHO_REPLY, | 135 // Per MSDN, Send6IcmpEcho2 needs at least one ICMPV6_ECHO_REPLY, |
| 136 // 8 bytes for ICMP header, _and_ an IO_BLOCK_STATUS (2 pointers), | 136 // 8 bytes for ICMP header, _and_ an IO_BLOCK_STATUS (2 pointers), |
| 137 // in addition to the data size. | 137 // in addition to the data size. |
| 138 return sizeof(ICMPV6_ECHO_REPLY) + data_size + 8 + (2 * sizeof(DWORD*)); | 138 return sizeof(ICMPV6_ECHO_REPLY) + data_size + 8 + (2 * sizeof(DWORD*)); |
| 139 } else { | 139 } else { |
| 140 return 0; | 140 return 0; |
| 141 } | 141 } |
| 142 } | 142 } |
| 143 | 143 |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 201 } | 201 } |
| 202 } | 202 } |
| 203 | 203 |
| 204 if (dll_) | 204 if (dll_) |
| 205 FreeLibrary(dll_); | 205 FreeLibrary(dll_); |
| 206 | 206 |
| 207 delete[] data_; | 207 delete[] data_; |
| 208 delete[] reply_; | 208 delete[] reply_; |
| 209 } | 209 } |
| 210 | 210 |
| 211 WinPing::PingResult WinPing::Ping( | 211 WinPing::PingResult WinPing::Ping(IPAddress ip, |
| 212 IPAddress ip, uint32 data_size, uint32 timeout, uint8 ttl, | 212 uint32_t data_size, |
| 213 bool allow_fragments) { | 213 uint32_t timeout, |
| 214 | 214 uint8_t ttl, |
| 215 bool allow_fragments) { |
| 215 if (data_size == 0 || timeout == 0 || ttl == 0) { | 216 if (data_size == 0 || timeout == 0 || ttl == 0) { |
| 216 LOG(LERROR) << "IcmpSendEcho: data_size/timeout/ttl is 0."; | 217 LOG(LERROR) << "IcmpSendEcho: data_size/timeout/ttl is 0."; |
| 217 return PING_INVALID_PARAMS; | 218 return PING_INVALID_PARAMS; |
| 218 } | 219 } |
| 219 | 220 |
| 220 assert(IsValid()); | 221 assert(IsValid()); |
| 221 | 222 |
| 222 IP_OPTION_INFORMATION ipopt; | 223 IP_OPTION_INFORMATION ipopt; |
| 223 memset(&ipopt, 0, sizeof(ipopt)); | 224 memset(&ipopt, 0, sizeof(ipopt)); |
| 224 if (!allow_fragments) | 225 if (!allow_fragments) |
| 225 ipopt.Flags |= IP_FLAG_DF; | 226 ipopt.Flags |= IP_FLAG_DF; |
| 226 ipopt.Ttl = ttl; | 227 ipopt.Ttl = ttl; |
| 227 | 228 |
| 228 uint32 reply_size = ReplySize(data_size, ip.family()); | 229 uint32_t reply_size = ReplySize(data_size, ip.family()); |
| 229 | 230 |
| 230 if (data_size > dlen_) { | 231 if (data_size > dlen_) { |
| 231 delete [] data_; | 232 delete [] data_; |
| 232 dlen_ = data_size; | 233 dlen_ = data_size; |
| 233 data_ = new char[dlen_]; | 234 data_ = new char[dlen_]; |
| 234 memset(data_, 'z', dlen_); | 235 memset(data_, 'z', dlen_); |
| 235 } | 236 } |
| 236 | 237 |
| 237 if (reply_size > rlen_) { | 238 if (reply_size > rlen_) { |
| 238 delete [] reply_; | 239 delete [] reply_; |
| 239 rlen_ = reply_size; | 240 rlen_ = reply_size; |
| 240 reply_ = new char[rlen_]; | 241 reply_ = new char[rlen_]; |
| 241 } | 242 } |
| 242 DWORD result = 0; | 243 DWORD result = 0; |
| 243 if (ip.family() == AF_INET) { | 244 if (ip.family() == AF_INET) { |
| 244 result = send_(hping_, ip.ipv4_address().S_un.S_addr, | 245 result = send_(hping_, ip.ipv4_address().S_un.S_addr, data_, |
| 245 data_, uint16(data_size), &ipopt, | 246 uint16_t(data_size), &ipopt, reply_, reply_size, timeout); |
| 246 reply_, reply_size, timeout); | |
| 247 } else if (ip.family() == AF_INET6) { | 247 } else if (ip.family() == AF_INET6) { |
| 248 sockaddr_in6 src = {0}; | 248 sockaddr_in6 src = {0}; |
| 249 sockaddr_in6 dst = {0}; | 249 sockaddr_in6 dst = {0}; |
| 250 src.sin6_family = AF_INET6; | 250 src.sin6_family = AF_INET6; |
| 251 dst.sin6_family = AF_INET6; | 251 dst.sin6_family = AF_INET6; |
| 252 dst.sin6_addr = ip.ipv6_address(); | 252 dst.sin6_addr = ip.ipv6_address(); |
| 253 result = send6_(hping6_, NULL, NULL, NULL, | 253 result = send6_(hping6_, NULL, NULL, NULL, &src, &dst, data_, |
| 254 &src, &dst, | 254 int16_t(data_size), &ipopt, reply_, reply_size, timeout); |
| 255 data_, int16(data_size), &ipopt, | |
| 256 reply_, reply_size, timeout); | |
| 257 } | 255 } |
| 258 if (result == 0) { | 256 if (result == 0) { |
| 259 DWORD error = GetLastError(); | 257 DWORD error = GetLastError(); |
| 260 if (error == IP_PACKET_TOO_BIG) | 258 if (error == IP_PACKET_TOO_BIG) |
| 261 return PING_TOO_LARGE; | 259 return PING_TOO_LARGE; |
| 262 if (error == IP_REQ_TIMED_OUT) | 260 if (error == IP_REQ_TIMED_OUT) |
| 263 return PING_TIMEOUT; | 261 return PING_TIMEOUT; |
| 264 LOG(LERROR) << "IcmpSendEcho(" << ip.ToSensitiveString() | 262 LOG(LERROR) << "IcmpSendEcho(" << ip.ToSensitiveString() |
| 265 << ", " << data_size << "): " << error; | 263 << ", " << data_size << "): " << error; |
| 266 return PING_FAIL; | 264 return PING_FAIL; |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 351 // Return Value: | 349 // Return Value: |
| 352 // | 350 // |
| 353 // Returns the number of ICMP_ECHO_REPLY structures stored in ReplyBuffer. | 351 // Returns the number of ICMP_ECHO_REPLY structures stored in ReplyBuffer. |
| 354 // The status of each reply is contained in the structure. If the return | 352 // The status of each reply is contained in the structure. If the return |
| 355 // value is zero, extended error information is available via | 353 // value is zero, extended error information is available via |
| 356 // GetLastError(). | 354 // GetLastError(). |
| 357 // | 355 // |
| 358 ////////////////////////////////////////////////////////////////////// | 356 ////////////////////////////////////////////////////////////////////// |
| 359 | 357 |
| 360 } // namespace rtc | 358 } // namespace rtc |
| OLD | NEW |