Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(202)

Unified Diff: webrtc/base/winping.cc

Issue 2866183004: Deleted unused method EstimateMTU, and the WinPing class. (Closed)
Patch Set: Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/base/winping.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/base/winping.cc
diff --git a/webrtc/base/winping.cc b/webrtc/base/winping.cc
deleted file mode 100644
index 21f4fa38a2512f534a168c67f8b962c48e199b98..0000000000000000000000000000000000000000
--- a/webrtc/base/winping.cc
+++ /dev/null
@@ -1,357 +0,0 @@
-/*
- * Copyright 2004 The WebRTC Project Authors. All rights reserved.
- *
- * Use of this source code is governed by a BSD-style license
- * that can be found in the LICENSE file in the root of the source
- * tree. An additional intellectual property rights grant can be found
- * in the file PATENTS. All contributing project authors may
- * be found in the AUTHORS file in the root of the source tree.
- */
-
-#include "webrtc/base/winping.h"
-
-#include <Iphlpapi.h>
-
-#include <algorithm>
-
-#include "webrtc/base/byteorder.h"
-#include "webrtc/base/checks.h"
-#include "webrtc/base/ipaddress.h"
-#include "webrtc/base/logging.h"
-#include "webrtc/base/nethelpers.h"
-#include "webrtc/base/socketaddress.h"
-
-namespace rtc {
-
-//////////////////////////////////////////////////////////////////////
-// Found in IPExport.h
-//////////////////////////////////////////////////////////////////////
-
-typedef struct icmp_echo_reply {
- ULONG Address; // Replying address
- ULONG Status; // Reply IP_STATUS
- ULONG RoundTripTime; // RTT in milliseconds
- USHORT DataSize; // Reply data size in bytes
- USHORT Reserved; // Reserved for system use
- PVOID Data; // Pointer to the reply data
- struct ip_option_information Options; // Reply options
-} ICMP_ECHO_REPLY, * PICMP_ECHO_REPLY;
-
-typedef struct icmpv6_echo_reply_lh {
- sockaddr_in6 Address;
- ULONG Status;
- unsigned int RoundTripTime;
-} ICMPV6_ECHO_REPLY, *PICMPV6_ECHO_REPLY;
-
-//
-// IP_STATUS codes returned from IP APIs
-//
-
-#define IP_STATUS_BASE 11000
-
-#define IP_SUCCESS 0
-#define IP_BUF_TOO_SMALL (IP_STATUS_BASE + 1)
-#define IP_DEST_NET_UNREACHABLE (IP_STATUS_BASE + 2)
-#define IP_DEST_HOST_UNREACHABLE (IP_STATUS_BASE + 3)
-#define IP_DEST_PROT_UNREACHABLE (IP_STATUS_BASE + 4)
-#define IP_DEST_PORT_UNREACHABLE (IP_STATUS_BASE + 5)
-#define IP_NO_RESOURCES (IP_STATUS_BASE + 6)
-#define IP_BAD_OPTION (IP_STATUS_BASE + 7)
-#define IP_HW_ERROR (IP_STATUS_BASE + 8)
-#define IP_PACKET_TOO_BIG (IP_STATUS_BASE + 9)
-#define IP_REQ_TIMED_OUT (IP_STATUS_BASE + 10)
-#define IP_BAD_REQ (IP_STATUS_BASE + 11)
-#define IP_BAD_ROUTE (IP_STATUS_BASE + 12)
-#define IP_TTL_EXPIRED_TRANSIT (IP_STATUS_BASE + 13)
-#define IP_TTL_EXPIRED_REASSEM (IP_STATUS_BASE + 14)
-#define IP_PARAM_PROBLEM (IP_STATUS_BASE + 15)
-#define IP_SOURCE_QUENCH (IP_STATUS_BASE + 16)
-#define IP_OPTION_TOO_BIG (IP_STATUS_BASE + 17)
-#define IP_BAD_DESTINATION (IP_STATUS_BASE + 18)
-
-#define IP_ADDR_DELETED (IP_STATUS_BASE + 19)
-#define IP_SPEC_MTU_CHANGE (IP_STATUS_BASE + 20)
-#define IP_MTU_CHANGE (IP_STATUS_BASE + 21)
-#define IP_UNLOAD (IP_STATUS_BASE + 22)
-#define IP_ADDR_ADDED (IP_STATUS_BASE + 23)
-#define IP_MEDIA_CONNECT (IP_STATUS_BASE + 24)
-#define IP_MEDIA_DISCONNECT (IP_STATUS_BASE + 25)
-#define IP_BIND_ADAPTER (IP_STATUS_BASE + 26)
-#define IP_UNBIND_ADAPTER (IP_STATUS_BASE + 27)
-#define IP_DEVICE_DOES_NOT_EXIST (IP_STATUS_BASE + 28)
-#define IP_DUPLICATE_ADDRESS (IP_STATUS_BASE + 29)
-#define IP_INTERFACE_METRIC_CHANGE (IP_STATUS_BASE + 30)
-#define IP_RECONFIG_SECFLTR (IP_STATUS_BASE + 31)
-#define IP_NEGOTIATING_IPSEC (IP_STATUS_BASE + 32)
-#define IP_INTERFACE_WOL_CAPABILITY_CHANGE (IP_STATUS_BASE + 33)
-#define IP_DUPLICATE_IPADD (IP_STATUS_BASE + 34)
-
-#define IP_GENERAL_FAILURE (IP_STATUS_BASE + 50)
-#define MAX_IP_STATUS IP_GENERAL_FAILURE
-#define IP_PENDING (IP_STATUS_BASE + 255)
-
-//
-// Values used in the IP header Flags field.
-//
-#define IP_FLAG_DF 0x2 // Don't fragment this packet.
-
-//
-// Supported IP Option Types.
-//
-// These types define the options which may be used in the OptionsData field
-// of the ip_option_information structure. See RFC 791 for a complete
-// description of each.
-//
-#define IP_OPT_EOL 0 // End of list option
-#define IP_OPT_NOP 1 // No operation
-#define IP_OPT_SECURITY 0x82 // Security option
-#define IP_OPT_LSRR 0x83 // Loose source route
-#define IP_OPT_SSRR 0x89 // Strict source route
-#define IP_OPT_RR 0x7 // Record route
-#define IP_OPT_TS 0x44 // Timestamp
-#define IP_OPT_SID 0x88 // Stream ID (obsolete)
-#define IP_OPT_ROUTER_ALERT 0x94 // Router Alert Option
-
-#define MAX_OPT_SIZE 40 // Maximum length of IP options in bytes
-
-//////////////////////////////////////////////////////////////////////
-// Global Constants and Types
-//////////////////////////////////////////////////////////////////////
-
-const char * const ICMP_DLL_NAME = "Iphlpapi.dll";
-const char * const ICMP_CREATE_FUNC = "IcmpCreateFile";
-const char * const ICMP_CLOSE_FUNC = "IcmpCloseHandle";
-const char * const ICMP_SEND_FUNC = "IcmpSendEcho";
-const char * const ICMP6_CREATE_FUNC = "Icmp6CreateFile";
-const char * const ICMP6_SEND_FUNC = "Icmp6SendEcho2";
-
-inline uint32_t ReplySize(uint32_t data_size, int family) {
- if (family == AF_INET) {
- // A ping error message is 8 bytes long, so make sure we allow for at least
- // 8 bytes of reply data.
- return sizeof(ICMP_ECHO_REPLY) + std::max<uint32_t>(8, data_size);
- } else if (family == AF_INET6) {
- // Per MSDN, Send6IcmpEcho2 needs at least one ICMPV6_ECHO_REPLY,
- // 8 bytes for ICMP header, _and_ an IO_BLOCK_STATUS (2 pointers),
- // in addition to the data size.
- return sizeof(ICMPV6_ECHO_REPLY) + data_size + 8 + (2 * sizeof(DWORD*));
- } else {
- return 0;
- }
-}
-
-//////////////////////////////////////////////////////////////////////
-// WinPing
-//////////////////////////////////////////////////////////////////////
-
-WinPing::WinPing()
- : dll_(0), hping_(INVALID_HANDLE_VALUE), create_(0), close_(0), send_(0),
- create6_(0), send6_(0), data_(0), dlen_(0), reply_(0),
- rlen_(0), valid_(false) {
-
- dll_ = LoadLibraryA(ICMP_DLL_NAME);
- if (!dll_) {
- LOG(LERROR) << "LoadLibrary: " << GetLastError();
- return;
- }
-
- create_ = (PIcmpCreateFile) GetProcAddress(dll_, ICMP_CREATE_FUNC);
- close_ = (PIcmpCloseHandle) GetProcAddress(dll_, ICMP_CLOSE_FUNC);
- send_ = (PIcmpSendEcho) GetProcAddress(dll_, ICMP_SEND_FUNC);
- if (!create_ || !close_ || !send_) {
- LOG(LERROR) << "GetProcAddress(ICMP_*): " << GetLastError();
- return;
- }
- hping_ = create_();
- if (hping_ == INVALID_HANDLE_VALUE) {
- LOG(LERROR) << "IcmpCreateFile: " << GetLastError();
- return;
- }
-
- if (HasIPv6Enabled()) {
- create6_ = (PIcmp6CreateFile) GetProcAddress(dll_, ICMP6_CREATE_FUNC);
- send6_ = (PIcmp6SendEcho2) GetProcAddress(dll_, ICMP6_SEND_FUNC);
- if (!create6_ || !send6_) {
- LOG(LERROR) << "GetProcAddress(ICMP6_*): " << GetLastError();
- return;
- }
- hping6_ = create6_();
- if (hping6_ == INVALID_HANDLE_VALUE) {
- LOG(LERROR) << "Icmp6CreateFile: " << GetLastError();
- }
- }
-
- dlen_ = 0;
- rlen_ = ReplySize(dlen_, AF_INET);
- data_ = new char[dlen_];
- reply_ = new char[rlen_];
-
- valid_ = true;
-}
-
-WinPing::~WinPing() {
- if ((hping_ != INVALID_HANDLE_VALUE) && close_) {
- if (!close_(hping_))
- LOG(WARNING) << "IcmpCloseHandle: " << GetLastError();
- }
- if ((hping6_ != INVALID_HANDLE_VALUE) && close_) {
- if (!close_(hping6_)) {
- LOG(WARNING) << "Icmp6CloseHandle: " << GetLastError();
- }
- }
-
- if (dll_)
- FreeLibrary(dll_);
-
- delete[] data_;
- delete[] reply_;
-}
-
-WinPing::PingResult WinPing::Ping(IPAddress ip,
- uint32_t data_size,
- uint32_t timeout,
- uint8_t ttl,
- bool allow_fragments) {
- if (data_size == 0 || timeout == 0 || ttl == 0) {
- LOG(LERROR) << "IcmpSendEcho: data_size/timeout/ttl is 0.";
- return PING_INVALID_PARAMS;
- }
-
- RTC_DCHECK(IsValid());
-
- IP_OPTION_INFORMATION ipopt;
- memset(&ipopt, 0, sizeof(ipopt));
- if (!allow_fragments)
- ipopt.Flags |= IP_FLAG_DF;
- ipopt.Ttl = ttl;
-
- uint32_t reply_size = ReplySize(data_size, ip.family());
-
- if (data_size > dlen_) {
- delete [] data_;
- dlen_ = data_size;
- data_ = new char[dlen_];
- memset(data_, 'z', dlen_);
- }
-
- if (reply_size > rlen_) {
- delete [] reply_;
- rlen_ = reply_size;
- reply_ = new char[rlen_];
- }
- DWORD result = 0;
- if (ip.family() == AF_INET) {
- result = send_(hping_, ip.ipv4_address().S_un.S_addr, data_,
- uint16_t(data_size), &ipopt, reply_, reply_size, timeout);
- } else if (ip.family() == AF_INET6) {
- sockaddr_in6 src = {0};
- sockaddr_in6 dst = {0};
- src.sin6_family = AF_INET6;
- dst.sin6_family = AF_INET6;
- dst.sin6_addr = ip.ipv6_address();
- result = send6_(hping6_, nullptr, nullptr, nullptr, &src, &dst, data_,
- int16_t(data_size), &ipopt, reply_, reply_size, timeout);
- }
- if (result == 0) {
- DWORD error = GetLastError();
- if (error == IP_PACKET_TOO_BIG)
- return PING_TOO_LARGE;
- if (error == IP_REQ_TIMED_OUT)
- return PING_TIMEOUT;
- LOG(LERROR) << "IcmpSendEcho(" << ip.ToSensitiveString()
- << ", " << data_size << "): " << error;
- return PING_FAIL;
- }
-
- return PING_SUCCESS;
-}
-
-//////////////////////////////////////////////////////////////////////
-// Microsoft Documenation
-//////////////////////////////////////////////////////////////////////
-//
-// Routine Name:
-//
-// IcmpCreateFile
-//
-// Routine Description:
-//
-// Opens a handle on which ICMP Echo Requests can be issued.
-//
-// Arguments:
-//
-// None.
-//
-// Return Value:
-//
-// An open file handle or INVALID_HANDLE_VALUE. Extended error information
-// is available by calling GetLastError().
-//
-//////////////////////////////////////////////////////////////////////
-//
-// Routine Name:
-//
-// IcmpCloseHandle
-//
-// Routine Description:
-//
-// Closes a handle opened by ICMPOpenFile.
-//
-// Arguments:
-//
-// IcmpHandle - The handle to close.
-//
-// Return Value:
-//
-// TRUE if the handle was closed successfully, otherwise FALSE. Extended
-// error information is available by calling GetLastError().
-//
-//////////////////////////////////////////////////////////////////////
-//
-// Routine Name:
-//
-// IcmpSendEcho
-//
-// Routine Description:
-//
-// Sends an ICMP Echo request and returns any replies. The
-// call returns when the timeout has expired or the reply buffer
-// is filled.
-//
-// Arguments:
-//
-// IcmpHandle - An open handle returned by ICMPCreateFile.
-//
-// DestinationAddress - The destination of the echo request.
-//
-// RequestData - A buffer containing the data to send in the
-// request.
-//
-// RequestSize - The number of bytes in the request data buffer.
-//
-// RequestOptions - Pointer to the IP header options for the request.
-// May be null.
-//
-// ReplyBuffer - A buffer to hold any replies to the request.
-// On return, the buffer will contain an array of
-// ICMP_ECHO_REPLY structures followed by the
-// options and data for the replies. The buffer
-// should be large enough to hold at least one
-// ICMP_ECHO_REPLY structure plus
-// MAX(RequestSize, 8) bytes of data since an ICMP
-// error message contains 8 bytes of data.
-//
-// ReplySize - The size in bytes of the reply buffer.
-//
-// Timeout - The time in milliseconds to wait for replies.
-//
-// Return Value:
-//
-// Returns the number of ICMP_ECHO_REPLY structures stored in ReplyBuffer.
-// The status of each reply is contained in the structure. If the return
-// value is zero, extended error information is available via
-// GetLastError().
-//
-//////////////////////////////////////////////////////////////////////
-
-} // namespace rtc
« no previous file with comments | « webrtc/base/winping.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698