1*d9f75844SAndroid Build Coastguard Worker /* 2*d9f75844SAndroid Build Coastguard Worker * Copyright 2016 The WebRTC Project Authors. All rights reserved. 3*d9f75844SAndroid Build Coastguard Worker * 4*d9f75844SAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license 5*d9f75844SAndroid Build Coastguard Worker * that can be found in the LICENSE file in the root of the source 6*d9f75844SAndroid Build Coastguard Worker * tree. An additional intellectual property rights grant can be found 7*d9f75844SAndroid Build Coastguard Worker * in the file PATENTS. All contributing project authors may 8*d9f75844SAndroid Build Coastguard Worker * be found in the AUTHORS file in the root of the source tree. 9*d9f75844SAndroid Build Coastguard Worker */ 10*d9f75844SAndroid Build Coastguard Worker 11*d9f75844SAndroid Build Coastguard Worker #ifndef RTC_BASE_NETWORK_ROUTE_H_ 12*d9f75844SAndroid Build Coastguard Worker #define RTC_BASE_NETWORK_ROUTE_H_ 13*d9f75844SAndroid Build Coastguard Worker 14*d9f75844SAndroid Build Coastguard Worker #include <stdint.h> 15*d9f75844SAndroid Build Coastguard Worker 16*d9f75844SAndroid Build Coastguard Worker #include <string> 17*d9f75844SAndroid Build Coastguard Worker 18*d9f75844SAndroid Build Coastguard Worker #include "rtc_base/network_constants.h" 19*d9f75844SAndroid Build Coastguard Worker #include "rtc_base/strings/string_builder.h" 20*d9f75844SAndroid Build Coastguard Worker #include "rtc_base/system/inline.h" 21*d9f75844SAndroid Build Coastguard Worker 22*d9f75844SAndroid Build Coastguard Worker // TODO(honghaiz): Make a directory that describes the interfaces and structs 23*d9f75844SAndroid Build Coastguard Worker // the media code can rely on and the network code can implement, and both can 24*d9f75844SAndroid Build Coastguard Worker // depend on that, but not depend on each other. Then, move this file to that 25*d9f75844SAndroid Build Coastguard Worker // directory. 26*d9f75844SAndroid Build Coastguard Worker namespace rtc { 27*d9f75844SAndroid Build Coastguard Worker 28*d9f75844SAndroid Build Coastguard Worker class RouteEndpoint { 29*d9f75844SAndroid Build Coastguard Worker public: RouteEndpoint()30*d9f75844SAndroid Build Coastguard Worker RouteEndpoint() {} // Used by tests. RouteEndpoint(AdapterType adapter_type,uint16_t adapter_id,uint16_t network_id,bool uses_turn)31*d9f75844SAndroid Build Coastguard Worker RouteEndpoint(AdapterType adapter_type, 32*d9f75844SAndroid Build Coastguard Worker uint16_t adapter_id, 33*d9f75844SAndroid Build Coastguard Worker uint16_t network_id, 34*d9f75844SAndroid Build Coastguard Worker bool uses_turn) 35*d9f75844SAndroid Build Coastguard Worker : adapter_type_(adapter_type), 36*d9f75844SAndroid Build Coastguard Worker adapter_id_(adapter_id), 37*d9f75844SAndroid Build Coastguard Worker network_id_(network_id), 38*d9f75844SAndroid Build Coastguard Worker uses_turn_(uses_turn) {} 39*d9f75844SAndroid Build Coastguard Worker 40*d9f75844SAndroid Build Coastguard Worker RouteEndpoint(const RouteEndpoint&) = default; 41*d9f75844SAndroid Build Coastguard Worker RouteEndpoint& operator=(const RouteEndpoint&) = default; 42*d9f75844SAndroid Build Coastguard Worker 43*d9f75844SAndroid Build Coastguard Worker // Used by tests. CreateWithNetworkId(uint16_t network_id)44*d9f75844SAndroid Build Coastguard Worker static RouteEndpoint CreateWithNetworkId(uint16_t network_id) { 45*d9f75844SAndroid Build Coastguard Worker return RouteEndpoint(ADAPTER_TYPE_UNKNOWN, 46*d9f75844SAndroid Build Coastguard Worker /* adapter_id = */ 0, network_id, 47*d9f75844SAndroid Build Coastguard Worker /* uses_turn = */ false); 48*d9f75844SAndroid Build Coastguard Worker } CreateWithTurn(bool uses_turn)49*d9f75844SAndroid Build Coastguard Worker RouteEndpoint CreateWithTurn(bool uses_turn) const { 50*d9f75844SAndroid Build Coastguard Worker return RouteEndpoint(adapter_type_, adapter_id_, network_id_, uses_turn); 51*d9f75844SAndroid Build Coastguard Worker } 52*d9f75844SAndroid Build Coastguard Worker adapter_type()53*d9f75844SAndroid Build Coastguard Worker AdapterType adapter_type() const { return adapter_type_; } adapter_id()54*d9f75844SAndroid Build Coastguard Worker uint16_t adapter_id() const { return adapter_id_; } network_id()55*d9f75844SAndroid Build Coastguard Worker uint16_t network_id() const { return network_id_; } uses_turn()56*d9f75844SAndroid Build Coastguard Worker bool uses_turn() const { return uses_turn_; } 57*d9f75844SAndroid Build Coastguard Worker 58*d9f75844SAndroid Build Coastguard Worker bool operator==(const RouteEndpoint& other) const; 59*d9f75844SAndroid Build Coastguard Worker 60*d9f75844SAndroid Build Coastguard Worker private: 61*d9f75844SAndroid Build Coastguard Worker AdapterType adapter_type_ = ADAPTER_TYPE_UNKNOWN; 62*d9f75844SAndroid Build Coastguard Worker uint16_t adapter_id_ = 0; 63*d9f75844SAndroid Build Coastguard Worker uint16_t network_id_ = 0; 64*d9f75844SAndroid Build Coastguard Worker bool uses_turn_ = false; 65*d9f75844SAndroid Build Coastguard Worker }; 66*d9f75844SAndroid Build Coastguard Worker 67*d9f75844SAndroid Build Coastguard Worker struct NetworkRoute { 68*d9f75844SAndroid Build Coastguard Worker bool connected = false; 69*d9f75844SAndroid Build Coastguard Worker RouteEndpoint local; 70*d9f75844SAndroid Build Coastguard Worker RouteEndpoint remote; 71*d9f75844SAndroid Build Coastguard Worker // Last packet id sent on the PREVIOUS route. 72*d9f75844SAndroid Build Coastguard Worker int last_sent_packet_id = -1; 73*d9f75844SAndroid Build Coastguard Worker // The overhead in bytes from IP layer and above. 74*d9f75844SAndroid Build Coastguard Worker // This is the maximum of any part of the route. 75*d9f75844SAndroid Build Coastguard Worker int packet_overhead = 0; 76*d9f75844SAndroid Build Coastguard Worker DebugStringNetworkRoute77*d9f75844SAndroid Build Coastguard Worker RTC_NO_INLINE inline std::string DebugString() const { 78*d9f75844SAndroid Build Coastguard Worker rtc::StringBuilder oss; 79*d9f75844SAndroid Build Coastguard Worker oss << "[ connected: " << connected << " local: [ " << local.adapter_id() 80*d9f75844SAndroid Build Coastguard Worker << "/" << local.network_id() << " " 81*d9f75844SAndroid Build Coastguard Worker << AdapterTypeToString(local.adapter_type()) 82*d9f75844SAndroid Build Coastguard Worker << " turn: " << local.uses_turn() << " ] remote: [ " 83*d9f75844SAndroid Build Coastguard Worker << remote.adapter_id() << "/" << remote.network_id() << " " 84*d9f75844SAndroid Build Coastguard Worker << AdapterTypeToString(remote.adapter_type()) 85*d9f75844SAndroid Build Coastguard Worker << " turn: " << remote.uses_turn() 86*d9f75844SAndroid Build Coastguard Worker << " ] packet_overhead_bytes: " << packet_overhead << " ]"; 87*d9f75844SAndroid Build Coastguard Worker return oss.Release(); 88*d9f75844SAndroid Build Coastguard Worker } 89*d9f75844SAndroid Build Coastguard Worker 90*d9f75844SAndroid Build Coastguard Worker bool operator==(const NetworkRoute& other) const; 91*d9f75844SAndroid Build Coastguard Worker }; 92*d9f75844SAndroid Build Coastguard Worker 93*d9f75844SAndroid Build Coastguard Worker } // namespace rtc 94*d9f75844SAndroid Build Coastguard Worker 95*d9f75844SAndroid Build Coastguard Worker #endif // RTC_BASE_NETWORK_ROUTE_H_ 96