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

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

Issue 2677743002: Increase STUN RTOs (Closed)
Patch Set: merge Created 3 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/stunrequest.h ('k') | webrtc/p2p/base/stunrequest_unittest.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 #include "webrtc/p2p/base/stunrequest.h" 11 #include "webrtc/p2p/base/stunrequest.h"
12 12
13 #include <algorithm> 13 #include <algorithm>
14 #include <memory> 14 #include <memory>
15 15
16 #include "webrtc/base/checks.h" 16 #include "webrtc/base/checks.h"
17 #include "webrtc/base/helpers.h" 17 #include "webrtc/base/helpers.h"
18 #include "webrtc/base/logging.h" 18 #include "webrtc/base/logging.h"
19 #include "webrtc/base/stringencode.h" 19 #include "webrtc/base/stringencode.h"
20 20
21 namespace cricket { 21 namespace cricket {
22 22
23 const uint32_t MSG_STUN_SEND = 1; 23 const uint32_t MSG_STUN_SEND = 1;
24 24
25 const int MAX_SENDS = 9; 25 // RFC 5389 says SHOULD be 500ms.
26 const int DELAY_UNIT = 100; // 100 milliseconds 26 // For years, this was 100ms, but for networks that
27 const int DELAY_MAX_FACTOR = 16; 27 // experience moments of high RTT (such as 2G networks), this doesn't
28 // work well.
29 const int STUN_INITIAL_RTO = 250; // milliseconds
30
31 // The timeout doubles each retransmission, up to this many times
32 // RFC 5389 says SHOULD retransmit 7 times.
33 // This has been 8 for years (not sure why).
34 const int STUN_MAX_RETRANSMISSIONS = 8; // Total sends: 9
35
36 // We also cap the doubling, even though the standard doesn't say to.
37 // This has been 1.6 seconds for years, but for networks that
38 // experience moments of high RTT (such as 2G networks), this doesn't
39 // work well.
40 const int STUN_MAX_RTO = 8000; // milliseconds, or 5 doublings
28 41
29 StunRequestManager::StunRequestManager(rtc::Thread* thread) 42 StunRequestManager::StunRequestManager(rtc::Thread* thread)
30 : thread_(thread) { 43 : thread_(thread) {
31 } 44 }
32 45
33 StunRequestManager::~StunRequestManager() { 46 StunRequestManager::~StunRequestManager() {
34 while (requests_.begin() != requests_.end()) { 47 while (requests_.begin() != requests_.end()) {
35 StunRequest *request = requests_.begin()->second; 48 StunRequest *request = requests_.begin()->second;
36 requests_.erase(requests_.begin()); 49 requests_.erase(requests_.begin());
37 delete request; 50 delete request;
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
219 msg_->Write(&buf); 232 msg_->Write(&buf);
220 manager_->SignalSendPacket(buf.Data(), buf.Length(), this); 233 manager_->SignalSendPacket(buf.Data(), buf.Length(), this);
221 234
222 OnSent(); 235 OnSent();
223 manager_->thread_->PostDelayed(RTC_FROM_HERE, resend_delay(), this, 236 manager_->thread_->PostDelayed(RTC_FROM_HERE, resend_delay(), this,
224 MSG_STUN_SEND, NULL); 237 MSG_STUN_SEND, NULL);
225 } 238 }
226 239
227 void StunRequest::OnSent() { 240 void StunRequest::OnSent() {
228 count_ += 1; 241 count_ += 1;
229 if (count_ == MAX_SENDS) { 242 int retransmissions = (count_ - 1);
243 if (retransmissions >= STUN_MAX_RETRANSMISSIONS) {
230 timeout_ = true; 244 timeout_ = true;
231 } 245 }
232 LOG(LS_VERBOSE) << "Sent STUN request " << count_ 246 LOG(LS_VERBOSE) << "Sent STUN request " << count_
233 << "; resend delay = " << resend_delay(); 247 << "; resend delay = " << resend_delay();
234 } 248 }
235 249
236 int StunRequest::resend_delay() { 250 int StunRequest::resend_delay() {
237 if (count_ == 0) { 251 if (count_ == 0) {
238 return 0; 252 return 0;
239 } 253 }
240 return DELAY_UNIT * std::min(1 << (count_-1), DELAY_MAX_FACTOR); 254 int retransmissions = (count_ - 1);
255 int rto = STUN_INITIAL_RTO << retransmissions;
256 return std::min(rto, STUN_MAX_RTO);
241 } 257 }
242 258
243 } // namespace cricket 259 } // namespace cricket
OLDNEW
« no previous file with comments | « webrtc/p2p/base/stunrequest.h ('k') | webrtc/p2p/base/stunrequest_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698