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

Side by Side Diff: webrtc/p2p/base/turnserver.cc

Issue 1595613004: Reset TURN port NONCE when a new socket is created. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc@master
Patch Set: merge with head Created 4 years, 10 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/p2p/base/turnserver.h ('k') | no next file » | 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 2012 The WebRTC Project Authors. All rights reserved. 2 * Copyright 2012 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 374 matching lines...) Expand 10 before | Expand all | Expand 10 after
385 // If the actual socket allocation fails, send an internal error. 385 // If the actual socket allocation fails, send an internal error.
386 TurnServerAllocation* alloc = CreateAllocation(conn, proto, key); 386 TurnServerAllocation* alloc = CreateAllocation(conn, proto, key);
387 if (alloc) { 387 if (alloc) {
388 alloc->HandleTurnMessage(msg); 388 alloc->HandleTurnMessage(msg);
389 } else { 389 } else {
390 SendErrorResponse(conn, msg, STUN_ERROR_SERVER_ERROR, 390 SendErrorResponse(conn, msg, STUN_ERROR_SERVER_ERROR,
391 "Failed to allocate socket"); 391 "Failed to allocate socket");
392 } 392 }
393 } 393 }
394 394
395 std::string TurnServer::GenerateNonce() const { 395 std::string TurnServer::GenerateNonce(uint32_t now) const {
396 // Generate a nonce of the form hex(now + HMAC-MD5(nonce_key_, now)) 396 // Generate a nonce of the form hex(now + HMAC-MD5(nonce_key_, now))
397 uint32_t now = rtc::Time();
398 std::string input(reinterpret_cast<const char*>(&now), sizeof(now)); 397 std::string input(reinterpret_cast<const char*>(&now), sizeof(now));
399 std::string nonce = rtc::hex_encode(input.c_str(), input.size()); 398 std::string nonce = rtc::hex_encode(input.c_str(), input.size());
400 nonce += rtc::ComputeHmac(rtc::DIGEST_MD5, nonce_key_, input); 399 nonce += rtc::ComputeHmac(rtc::DIGEST_MD5, nonce_key_, input);
401 ASSERT(nonce.size() == kNonceSize); 400 ASSERT(nonce.size() == kNonceSize);
402 return nonce; 401 return nonce;
403 } 402 }
404 403
405 bool TurnServer::ValidateNonce(const std::string& nonce) const { 404 bool TurnServer::ValidateNonce(const std::string& nonce) const {
406 // Check the size. 405 // Check the size.
407 if (nonce.size() != kNonceSize) { 406 if (nonce.size() != kNonceSize) {
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
457 LOG(LS_INFO) << "Sending error response, type=" << resp.type() 456 LOG(LS_INFO) << "Sending error response, type=" << resp.type()
458 << ", code=" << code << ", reason=" << reason; 457 << ", code=" << code << ", reason=" << reason;
459 SendStun(conn, &resp); 458 SendStun(conn, &resp);
460 } 459 }
461 460
462 void TurnServer::SendErrorResponseWithRealmAndNonce( 461 void TurnServer::SendErrorResponseWithRealmAndNonce(
463 TurnServerConnection* conn, const StunMessage* msg, 462 TurnServerConnection* conn, const StunMessage* msg,
464 int code, const std::string& reason) { 463 int code, const std::string& reason) {
465 TurnMessage resp; 464 TurnMessage resp;
466 InitErrorResponse(msg, code, reason, &resp); 465 InitErrorResponse(msg, code, reason, &resp);
467 VERIFY(resp.AddAttribute(new StunByteStringAttribute( 466
468 STUN_ATTR_NONCE, GenerateNonce()))); 467 uint32_t timestamp = rtc::Time();
468 if (ts_for_next_nonce_) {
469 timestamp = ts_for_next_nonce_;
470 ts_for_next_nonce_ = 0;
471 }
472 VERIFY(resp.AddAttribute(
473 new StunByteStringAttribute(STUN_ATTR_NONCE, GenerateNonce(timestamp))));
469 VERIFY(resp.AddAttribute(new StunByteStringAttribute( 474 VERIFY(resp.AddAttribute(new StunByteStringAttribute(
470 STUN_ATTR_REALM, realm_))); 475 STUN_ATTR_REALM, realm_)));
471 SendStun(conn, &resp); 476 SendStun(conn, &resp);
472 } 477 }
473 478
474 void TurnServer::SendErrorResponseWithAlternateServer( 479 void TurnServer::SendErrorResponseWithAlternateServer(
475 TurnServerConnection* conn, const StunMessage* msg, 480 TurnServerConnection* conn, const StunMessage* msg,
476 const rtc::SocketAddress& addr) { 481 const rtc::SocketAddress& addr) {
477 TurnMessage resp; 482 TurnMessage resp;
478 InitErrorResponse(msg, STUN_ERROR_TRY_ALTERNATE, 483 InitErrorResponse(msg, STUN_ERROR_TRY_ALTERNATE,
(...skipping 463 matching lines...) Expand 10 before | Expand all | Expand 10 after
942 thread_->PostDelayed(kChannelTimeout, this, MSG_ALLOCATION_TIMEOUT); 947 thread_->PostDelayed(kChannelTimeout, this, MSG_ALLOCATION_TIMEOUT);
943 } 948 }
944 949
945 void TurnServerAllocation::Channel::OnMessage(rtc::Message* msg) { 950 void TurnServerAllocation::Channel::OnMessage(rtc::Message* msg) {
946 ASSERT(msg->message_id == MSG_ALLOCATION_TIMEOUT); 951 ASSERT(msg->message_id == MSG_ALLOCATION_TIMEOUT);
947 SignalDestroyed(this); 952 SignalDestroyed(this);
948 delete this; 953 delete this;
949 } 954 }
950 955
951 } // namespace cricket 956 } // namespace cricket
OLDNEW
« no previous file with comments | « webrtc/p2p/base/turnserver.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698