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

Side by Side Diff: webrtc/p2p/base/candidate.h

Issue 1815473002: Add 16-bit network id to the candidate signaling. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc@master
Patch Set: Remove the old NETWORK_COST attribute. Created 4 years, 9 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 unified diff | Download patch
« no previous file with comments | « webrtc/base/networkmonitor.h ('k') | webrtc/p2p/base/p2ptransportchannel.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
11 #ifndef WEBRTC_P2P_BASE_CANDIDATE_H_ 11 #ifndef WEBRTC_P2P_BASE_CANDIDATE_H_
12 #define WEBRTC_P2P_BASE_CANDIDATE_H_ 12 #define WEBRTC_P2P_BASE_CANDIDATE_H_
13 13
14 #include <limits.h> 14 #include <limits.h>
15 #include <math.h> 15 #include <math.h>
16 16
17 #include <algorithm> 17 #include <algorithm>
18 #include <iomanip> 18 #include <iomanip>
19 #include <sstream> 19 #include <sstream>
20 #include <string> 20 #include <string>
21 21
22 #include "webrtc/p2p/base/p2pconstants.h" 22 #include "webrtc/p2p/base/p2pconstants.h"
23 #include "webrtc/base/basictypes.h" 23 #include "webrtc/base/basictypes.h"
24 #include "webrtc/base/helpers.h" 24 #include "webrtc/base/helpers.h"
25 #include "webrtc/base/network.h" 25 #include "webrtc/base/network.h"
26 #include "webrtc/base/socketaddress.h" 26 #include "webrtc/base/socketaddress.h"
27 27
28 namespace cricket { 28 namespace cricket {
29 29
30 const uint32_t kMaxNetworkCost = 999; 30 const uint16_t kMaxNetworkCost = 999;
31 31
32 // Candidate for ICE based connection discovery. 32 // Candidate for ICE based connection discovery.
33 33
34 class Candidate { 34 class Candidate {
35 public: 35 public:
36 // TODO: Match the ordering and param list as per RFC 5245 36 // TODO: Match the ordering and param list as per RFC 5245
37 // candidate-attribute syntax. http://tools.ietf.org/html/rfc5245#section-15.1 37 // candidate-attribute syntax. http://tools.ietf.org/html/rfc5245#section-15.1
38 Candidate() 38 Candidate()
39 : id_(rtc::CreateRandomString(8)), 39 : id_(rtc::CreateRandomString(8)),
40 component_(0), 40 component_(0),
41 priority_(0), 41 priority_(0),
42 network_type_(rtc::ADAPTER_TYPE_UNKNOWN), 42 network_type_(rtc::ADAPTER_TYPE_UNKNOWN),
43 generation_(0) {} 43 generation_(0),
44 network_id_(0),
45 network_cost_(0) {}
44 46
45 Candidate(int component, 47 Candidate(int component,
46 const std::string& protocol, 48 const std::string& protocol,
47 const rtc::SocketAddress& address, 49 const rtc::SocketAddress& address,
48 uint32_t priority, 50 uint32_t priority,
49 const std::string& username, 51 const std::string& username,
50 const std::string& password, 52 const std::string& password,
51 const std::string& type, 53 const std::string& type,
52 uint32_t generation, 54 uint32_t generation,
53 const std::string& foundation) 55 const std::string& foundation,
56 uint16_t network_id = 0,
57 uint16_t network_cost = 0)
54 : id_(rtc::CreateRandomString(8)), 58 : id_(rtc::CreateRandomString(8)),
55 component_(component), 59 component_(component),
56 protocol_(protocol), 60 protocol_(protocol),
57 address_(address), 61 address_(address),
58 priority_(priority), 62 priority_(priority),
59 username_(username), 63 username_(username),
60 password_(password), 64 password_(password),
61 type_(type), 65 type_(type),
62 network_type_(rtc::ADAPTER_TYPE_UNKNOWN), 66 network_type_(rtc::ADAPTER_TYPE_UNKNOWN),
63 generation_(generation), 67 generation_(generation),
64 foundation_(foundation) {} 68 foundation_(foundation),
69 network_id_(network_id),
70 network_cost_(network_cost) {}
65 71
66 const std::string & id() const { return id_; } 72 const std::string & id() const { return id_; }
67 void set_id(const std::string & id) { id_ = id; } 73 void set_id(const std::string & id) { id_ = id; }
68 74
69 int component() const { return component_; } 75 int component() const { return component_; }
70 void set_component(int component) { component_ = component; } 76 void set_component(int component) { component_ = component; }
71 77
72 const std::string & protocol() const { return protocol_; } 78 const std::string & protocol() const { return protocol_; }
73 void set_protocol(const std::string & protocol) { protocol_ = protocol; } 79 void set_protocol(const std::string & protocol) { protocol_ = protocol; }
74 80
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
136 return ost.str(); 142 return ost.str();
137 } 143 }
138 void set_generation_str(const std::string& str) { 144 void set_generation_str(const std::string& str) {
139 std::istringstream ist(str); 145 std::istringstream ist(str);
140 ist >> generation_; 146 ist >> generation_;
141 } 147 }
142 148
143 // |network_cost| measures the cost/penalty of using this candidate. A network 149 // |network_cost| measures the cost/penalty of using this candidate. A network
144 // cost of 0 indicates this candidate can be used freely. A value of 150 // cost of 0 indicates this candidate can be used freely. A value of
145 // |kMaxNetworkCost| indicates it should be used only as the last resort. 151 // |kMaxNetworkCost| indicates it should be used only as the last resort.
146 void set_network_cost(uint32_t network_cost) { 152 void set_network_cost(uint16_t network_cost) {
147 ASSERT(network_cost <= kMaxNetworkCost); 153 ASSERT(network_cost <= kMaxNetworkCost);
148 network_cost_ = network_cost; 154 network_cost_ = network_cost;
149 } 155 }
150 uint32_t network_cost() const { return network_cost_; } 156 uint16_t network_cost() const { return network_cost_; }
157
158 // An ID assigned to the network hosting the candidate.
159 uint16_t network_id() const { return network_id_; }
160 void set_network_id(uint16_t network_id) { network_id_ = network_id; }
151 161
152 const std::string& foundation() const { 162 const std::string& foundation() const {
153 return foundation_; 163 return foundation_;
154 } 164 }
155 165
156 void set_foundation(const std::string& foundation) { 166 void set_foundation(const std::string& foundation) {
157 foundation_ = foundation; 167 foundation_ = foundation;
158 } 168 }
159 169
160 const rtc::SocketAddress & related_address() const { 170 const rtc::SocketAddress & related_address() const {
(...skipping 10 matching lines...) Expand all
171 181
172 // The name of the transport channel of this candidate. 182 // The name of the transport channel of this candidate.
173 const std::string& transport_name() const { return transport_name_; } 183 const std::string& transport_name() const { return transport_name_; }
174 void set_transport_name(const std::string& transport_name) { 184 void set_transport_name(const std::string& transport_name) {
175 transport_name_ = transport_name; 185 transport_name_ = transport_name;
176 } 186 }
177 187
178 // Determines whether this candidate is equivalent to the given one. 188 // Determines whether this candidate is equivalent to the given one.
179 bool IsEquivalent(const Candidate& c) const { 189 bool IsEquivalent(const Candidate& c) const {
180 // We ignore the network name, since that is just debug information, and 190 // We ignore the network name, since that is just debug information, and
181 // the priority, since that should be the same if the rest is (and it's 191 // the priority and the network cost, since they should be the same if the
182 // a float so equality checking is always worrisome). 192 // rest are.
183 return (component_ == c.component_) && (protocol_ == c.protocol_) && 193 return (component_ == c.component_) && (protocol_ == c.protocol_) &&
184 (address_ == c.address_) && (username_ == c.username_) && 194 (address_ == c.address_) && (username_ == c.username_) &&
185 (password_ == c.password_) && (type_ == c.type_) && 195 (password_ == c.password_) && (type_ == c.type_) &&
186 (generation_ == c.generation_) && (foundation_ == c.foundation_) && 196 (generation_ == c.generation_) && (foundation_ == c.foundation_) &&
187 (related_address_ == c.related_address_); 197 (related_address_ == c.related_address_) &&
198 (network_id_ == c.network_id_);
188 } 199 }
189 200
190 // Determines whether this candidate can be considered equivalent to the 201 // Determines whether this candidate can be considered equivalent to the
191 // given one when looking for a matching candidate to remove. 202 // given one when looking for a matching candidate to remove.
192 bool MatchesForRemoval(const Candidate& c) const { 203 bool MatchesForRemoval(const Candidate& c) const {
193 return component_ == c.component_ && protocol_ == c.protocol_ && 204 return component_ == c.component_ && protocol_ == c.protocol_ &&
194 address_ == c.address_; 205 address_ == c.address_;
195 } 206 }
196 207
197 std::string ToString() const { 208 std::string ToString() const {
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
231 } 242 }
232 243
233 private: 244 private:
234 std::string ToStringInternal(bool sensitive) const { 245 std::string ToStringInternal(bool sensitive) const {
235 std::ostringstream ost; 246 std::ostringstream ost;
236 std::string address = sensitive ? address_.ToSensitiveString() : 247 std::string address = sensitive ? address_.ToSensitiveString() :
237 address_.ToString(); 248 address_.ToString();
238 ost << "Cand[" << transport_name_ << ":" << foundation_ << ":" << component_ 249 ost << "Cand[" << transport_name_ << ":" << foundation_ << ":" << component_
239 << ":" << protocol_ << ":" << priority_ << ":" << address << ":" 250 << ":" << protocol_ << ":" << priority_ << ":" << address << ":"
240 << type_ << ":" << related_address_ << ":" << username_ << ":" 251 << type_ << ":" << related_address_ << ":" << username_ << ":"
241 << password_ << ":" << network_cost_ << "]"; 252 << password_ << ":" << network_id_ << ":" << network_cost_ << "]";
242 return ost.str(); 253 return ost.str();
243 } 254 }
244 255
245 std::string id_; 256 std::string id_;
246 int component_; 257 int component_;
247 std::string protocol_; 258 std::string protocol_;
248 std::string relay_protocol_; 259 std::string relay_protocol_;
249 rtc::SocketAddress address_; 260 rtc::SocketAddress address_;
250 uint32_t priority_; 261 uint32_t priority_;
251 std::string username_; 262 std::string username_;
252 std::string password_; 263 std::string password_;
253 std::string type_; 264 std::string type_;
254 std::string network_name_; 265 std::string network_name_;
255 rtc::AdapterType network_type_; 266 rtc::AdapterType network_type_;
256 uint32_t generation_; 267 uint32_t generation_;
257 std::string foundation_; 268 std::string foundation_;
258 rtc::SocketAddress related_address_; 269 rtc::SocketAddress related_address_;
259 std::string tcptype_; 270 std::string tcptype_;
260 uint32_t network_cost_ = 0;
261 std::string transport_name_; 271 std::string transport_name_;
272 uint16_t network_id_;
273 uint16_t network_cost_;
262 }; 274 };
263 275
264 // Used during parsing and writing to map component to channel name 276 // Used during parsing and writing to map component to channel name
265 // and back. This is primarily for converting old G-ICE candidate 277 // and back. This is primarily for converting old G-ICE candidate
266 // signalling to new ICE candidate classes. 278 // signalling to new ICE candidate classes.
267 class CandidateTranslator { 279 class CandidateTranslator {
268 public: 280 public:
269 virtual ~CandidateTranslator() {} 281 virtual ~CandidateTranslator() {}
270 virtual bool GetChannelNameFromComponent( 282 virtual bool GetChannelNameFromComponent(
271 int component, std::string* channel_name) const = 0; 283 int component, std::string* channel_name) const = 0;
272 virtual bool GetComponentFromChannelName( 284 virtual bool GetComponentFromChannelName(
273 const std::string& channel_name, int* component) const = 0; 285 const std::string& channel_name, int* component) const = 0;
274 }; 286 };
275 287
276 } // namespace cricket 288 } // namespace cricket
277 289
278 #endif // WEBRTC_P2P_BASE_CANDIDATE_H_ 290 #endif // WEBRTC_P2P_BASE_CANDIDATE_H_
OLDNEW
« no previous file with comments | « webrtc/base/networkmonitor.h ('k') | webrtc/p2p/base/p2ptransportchannel.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698