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 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
178 max_port_(max_port), | 178 max_port_(max_port), |
179 component_(ICE_CANDIDATE_COMPONENT_DEFAULT), | 179 component_(ICE_CANDIDATE_COMPONENT_DEFAULT), |
180 generation_(0), | 180 generation_(0), |
181 ice_username_fragment_(username_fragment), | 181 ice_username_fragment_(username_fragment), |
182 password_(password), | 182 password_(password), |
183 timeout_delay_(kPortTimeoutDelay), | 183 timeout_delay_(kPortTimeoutDelay), |
184 enable_port_packets_(false), | 184 enable_port_packets_(false), |
185 ice_role_(ICEROLE_UNKNOWN), | 185 ice_role_(ICEROLE_UNKNOWN), |
186 tiebreaker_(0), | 186 tiebreaker_(0), |
187 shared_socket_(false) { | 187 shared_socket_(false) { |
188 RTC_DCHECK(factory_ != NULL); | 188 RTC_DCHECK(factory_ != nullptr); |
189 Construct(); | 189 Construct(); |
190 } | 190 } |
191 | 191 |
192 void Port::Construct() { | 192 void Port::Construct() { |
193 // TODO(pthatcher): Remove this old behavior once we're sure no one | 193 // TODO(pthatcher): Remove this old behavior once we're sure no one |
194 // relies on it. If the username_fragment and password are empty, | 194 // relies on it. If the username_fragment and password are empty, |
195 // we should just create one. | 195 // we should just create one. |
196 if (ice_username_fragment_.empty()) { | 196 if (ice_username_fragment_.empty()) { |
197 RTC_DCHECK(password_.empty()); | 197 RTC_DCHECK(password_.empty()); |
198 ice_username_fragment_ = rtc::CreateRandomString(ICE_UFRAG_LENGTH); | 198 ice_username_fragment_ = rtc::CreateRandomString(ICE_UFRAG_LENGTH); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
233 c.set_username(username_fragment); | 233 c.set_username(username_fragment); |
234 c.set_password(password); | 234 c.set_password(password); |
235 } | 235 } |
236 } | 236 } |
237 | 237 |
238 Connection* Port::GetConnection(const rtc::SocketAddress& remote_addr) { | 238 Connection* Port::GetConnection(const rtc::SocketAddress& remote_addr) { |
239 AddressMap::const_iterator iter = connections_.find(remote_addr); | 239 AddressMap::const_iterator iter = connections_.find(remote_addr); |
240 if (iter != connections_.end()) | 240 if (iter != connections_.end()) |
241 return iter->second; | 241 return iter->second; |
242 else | 242 else |
243 return NULL; | 243 return nullptr; |
244 } | 244 } |
245 | 245 |
246 void Port::AddAddress(const rtc::SocketAddress& address, | 246 void Port::AddAddress(const rtc::SocketAddress& address, |
247 const rtc::SocketAddress& base_address, | 247 const rtc::SocketAddress& base_address, |
248 const rtc::SocketAddress& related_address, | 248 const rtc::SocketAddress& related_address, |
249 const std::string& protocol, | 249 const std::string& protocol, |
250 const std::string& relay_protocol, | 250 const std::string& relay_protocol, |
251 const std::string& tcptype, | 251 const std::string& tcptype, |
252 const std::string& type, | 252 const std::string& type, |
253 uint32_t type_preference, | 253 uint32_t type_preference, |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
349 } | 349 } |
350 | 350 |
351 bool Port::GetStunMessage(const char* data, | 351 bool Port::GetStunMessage(const char* data, |
352 size_t size, | 352 size_t size, |
353 const rtc::SocketAddress& addr, | 353 const rtc::SocketAddress& addr, |
354 std::unique_ptr<IceMessage>* out_msg, | 354 std::unique_ptr<IceMessage>* out_msg, |
355 std::string* out_username) { | 355 std::string* out_username) { |
356 // NOTE: This could clearly be optimized to avoid allocating any memory. | 356 // NOTE: This could clearly be optimized to avoid allocating any memory. |
357 // However, at the data rates we'll be looking at on the client side, | 357 // However, at the data rates we'll be looking at on the client side, |
358 // this probably isn't worth worrying about. | 358 // this probably isn't worth worrying about. |
359 RTC_DCHECK(out_msg != NULL); | 359 RTC_DCHECK(out_msg != nullptr); |
360 RTC_DCHECK(out_username != NULL); | 360 RTC_DCHECK(out_username != nullptr); |
361 out_username->clear(); | 361 out_username->clear(); |
362 | 362 |
363 // Don't bother parsing the packet if we can tell it's not STUN. | 363 // Don't bother parsing the packet if we can tell it's not STUN. |
364 // In ICE mode, all STUN packets will have a valid fingerprint. | 364 // In ICE mode, all STUN packets will have a valid fingerprint. |
365 if (!StunMessage::ValidateFingerprint(data, size)) { | 365 if (!StunMessage::ValidateFingerprint(data, size)) { |
366 return false; | 366 return false; |
367 } | 367 } |
368 | 368 |
369 // Parse the request message. If the packet is not a complete and correct | 369 // Parse the request message. If the packet is not a complete and correct |
370 // STUN message, then ignore it. | 370 // STUN message, then ignore it. |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
462 bool Port::ParseStunUsername(const StunMessage* stun_msg, | 462 bool Port::ParseStunUsername(const StunMessage* stun_msg, |
463 std::string* local_ufrag, | 463 std::string* local_ufrag, |
464 std::string* remote_ufrag) const { | 464 std::string* remote_ufrag) const { |
465 // The packet must include a username that either begins or ends with our | 465 // The packet must include a username that either begins or ends with our |
466 // fragment. It should begin with our fragment if it is a request and it | 466 // fragment. It should begin with our fragment if it is a request and it |
467 // should end with our fragment if it is a response. | 467 // should end with our fragment if it is a response. |
468 local_ufrag->clear(); | 468 local_ufrag->clear(); |
469 remote_ufrag->clear(); | 469 remote_ufrag->clear(); |
470 const StunByteStringAttribute* username_attr = | 470 const StunByteStringAttribute* username_attr = |
471 stun_msg->GetByteString(STUN_ATTR_USERNAME); | 471 stun_msg->GetByteString(STUN_ATTR_USERNAME); |
472 if (username_attr == NULL) | 472 if (username_attr == nullptr) |
473 return false; | 473 return false; |
474 | 474 |
475 // RFRAG:LFRAG | 475 // RFRAG:LFRAG |
476 const std::string username = username_attr->GetString(); | 476 const std::string username = username_attr->GetString(); |
477 size_t colon_pos = username.find(":"); | 477 size_t colon_pos = username.find(":"); |
478 if (colon_pos == std::string::npos) { | 478 if (colon_pos == std::string::npos) { |
479 return false; | 479 return false; |
480 } | 480 } |
481 | 481 |
482 *local_ufrag = username.substr(0, colon_pos); | 482 *local_ufrag = username.substr(0, colon_pos); |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
553 stun_username_attr_str->append(username_fragment()); | 553 stun_username_attr_str->append(username_fragment()); |
554 } | 554 } |
555 | 555 |
556 void Port::SendBindingResponse(StunMessage* request, | 556 void Port::SendBindingResponse(StunMessage* request, |
557 const rtc::SocketAddress& addr) { | 557 const rtc::SocketAddress& addr) { |
558 RTC_DCHECK(request->type() == STUN_BINDING_REQUEST); | 558 RTC_DCHECK(request->type() == STUN_BINDING_REQUEST); |
559 | 559 |
560 // Retrieve the username from the request. | 560 // Retrieve the username from the request. |
561 const StunByteStringAttribute* username_attr = | 561 const StunByteStringAttribute* username_attr = |
562 request->GetByteString(STUN_ATTR_USERNAME); | 562 request->GetByteString(STUN_ATTR_USERNAME); |
563 RTC_DCHECK(username_attr != NULL); | 563 RTC_DCHECK(username_attr != nullptr); |
564 if (username_attr == NULL) { | 564 if (username_attr == nullptr) { |
565 // No valid username, skip the response. | 565 // No valid username, skip the response. |
566 return; | 566 return; |
567 } | 567 } |
568 | 568 |
569 // Fill in the response message. | 569 // Fill in the response message. |
570 StunMessage response; | 570 StunMessage response; |
571 response.SetType(STUN_BINDING_RESPONSE); | 571 response.SetType(STUN_BINDING_RESPONSE); |
572 response.SetTransactionID(request->transaction_id()); | 572 response.SetTransactionID(request->transaction_id()); |
573 const StunUInt32Attribute* retransmit_attr = | 573 const StunUInt32Attribute* retransmit_attr = |
574 request->GetUInt32(STUN_ATTR_RETRANSMIT_COUNT); | 574 request->GetUInt32(STUN_ATTR_RETRANSMIT_COUNT); |
(...skipping 1013 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1588 RTC_DCHECK(sent < 0); | 1588 RTC_DCHECK(sent < 0); |
1589 error_ = port_->GetError(); | 1589 error_ = port_->GetError(); |
1590 stats_.sent_discarded_packets++; | 1590 stats_.sent_discarded_packets++; |
1591 } else { | 1591 } else { |
1592 send_rate_tracker_.AddSamples(sent); | 1592 send_rate_tracker_.AddSamples(sent); |
1593 } | 1593 } |
1594 return sent; | 1594 return sent; |
1595 } | 1595 } |
1596 | 1596 |
1597 } // namespace cricket | 1597 } // namespace cricket |
OLD | NEW |