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

Unified Diff: webrtc/p2p/base/stunport.cc

Issue 1737493004: Keep on sending stun binding requests on zero-cost networks. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/p2p/base/stunport.cc
diff --git a/webrtc/p2p/base/stunport.cc b/webrtc/p2p/base/stunport.cc
index 8f37dd5218bb745b5e06ab6d8b2574faefc9aa44..39f530894ead9a8a672bc40e07fc8ff32a934a4b 100644
--- a/webrtc/p2p/base/stunport.cc
+++ b/webrtc/p2p/base/stunport.cc
@@ -25,18 +25,15 @@ namespace cricket {
// TODO: Move these to a common place (used in relayport too)
const int KEEPALIVE_DELAY = 10 * 1000; // 10 seconds - sort timeouts
const int RETRY_TIMEOUT = 50 * 1000; // ICE says 50 secs
-// Stop sending STUN binding requests after this amount of time
-// (in milliseconds) because the connection binding requests should keep
-// the NAT binding alive.
-const int KEEP_ALIVE_TIMEOUT = 2 * 60 * 1000; // 2 minutes
+const int KEEPALIVE_LIFETIME = 2 * 60 * 1000; // 2 minutes
pthatcher1 2016/02/26 22:33:52 This could use a comment explaining what it is. P
honghaiz3 2016/02/29 19:34:11 Done.
// Handles a binding request sent to the STUN server.
class StunBindingRequest : public StunRequest {
public:
StunBindingRequest(UDPPort* port,
const rtc::SocketAddress& addr,
- uint32_t deadline)
- : port_(port), server_addr_(addr), deadline_(deadline) {
+ int lifetime)
+ : port_(port), server_addr_(addr), lifetime_(lifetime) {
start_time_ = rtc::Time();
}
@@ -63,10 +60,11 @@ class StunBindingRequest : public StunRequest {
}
// We will do a keep-alive regardless of whether this request succeeds.
- // It will be stopped after |deadline_| mostly to conserve the battery life.
- if (rtc::Time() <= deadline_) {
+ // It will be stopped after its lifetime has passed (note that a negative
+ // lifetime indicates it will be sent indefinitely).
+ if (lifetime_ < 0 || rtc::TimeDiff(rtc::Time(), start_time_) <= lifetime_) {
port_->requests_.SendDelayed(
- new StunBindingRequest(port_, server_addr_, deadline_),
+ new StunBindingRequest(port_, server_addr_, lifetime_),
port_->stun_keepalive_delay());
}
}
@@ -85,9 +83,10 @@ class StunBindingRequest : public StunRequest {
port_->OnStunBindingOrResolveRequestFailed(server_addr_);
uint32_t now = rtc::Time();
- if (now <= deadline_ && rtc::TimeDiff(now, start_time_) <= RETRY_TIMEOUT) {
+ if ((lifetime_ < 0 || rtc::TimeDiff(now, start_time_) <= lifetime_) &&
pthatcher1 2016/02/26 22:33:52 It seems like we could use a helper method of Beyo
honghaiz3 2016/02/29 19:34:11 Done, although this will lose the benefit of not r
+ rtc::TimeDiff(now, start_time_) <= RETRY_TIMEOUT) {
port_->requests_.SendDelayed(
- new StunBindingRequest(port_, server_addr_, deadline_),
+ new StunBindingRequest(port_, server_addr_, lifetime_),
port_->stun_keepalive_delay());
}
}
@@ -104,7 +103,9 @@ class StunBindingRequest : public StunRequest {
UDPPort* port_;
const rtc::SocketAddress server_addr_;
uint32_t start_time_;
- uint32_t deadline_;
+ // The time duration for which this request will be rescheduled.
+ // A negative value means this request will be rescheduled indefinitely.
+ int lifetime_;
};
UDPPort::AddressResolver::AddressResolver(
@@ -397,8 +398,12 @@ void UDPPort::SendStunBindingRequest(const rtc::SocketAddress& stun_addr) {
} else if (socket_->GetState() == rtc::AsyncPacketSocket::STATE_BOUND) {
// Check if |server_addr_| is compatible with the port's ip.
if (IsCompatibleAddress(stun_addr)) {
- requests_.Send(new StunBindingRequest(this, stun_addr,
- rtc::Time() + KEEP_ALIVE_TIMEOUT));
+ // If this is a zero-cost network, it will keep on sending STUN binding
+ // requests indefinitely to keep the NAT binding alive. Otherwise,
+ // stop sending STUN binding requests after KEEPALIVE_LIFETIME.
+ int keepalive_lifetime = (network_cost() == 0) ? -1 : KEEPALIVE_LIFETIME;
pthatcher1 2016/02/26 22:33:52 I think we should make a constant for UNLIMITED_LI
honghaiz3 2016/02/29 19:34:11 Done. Used INIFINTE_LIFETIME. Also the logic chang
+ requests_.Send(
+ new StunBindingRequest(this, stun_addr, keepalive_lifetime));
} else {
// Since we can't send stun messages to the server, we should mark this
// port ready.
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698