Index: webrtc/p2p/base/transport.h |
diff --git a/webrtc/p2p/base/transport.h b/webrtc/p2p/base/transport.h |
index 9b6cf519f89106885da65972fd605d1f6beb1766..b582070ca45cbc484a68dff6566ddc45e3214b7d 100644 |
--- a/webrtc/p2p/base/transport.h |
+++ b/webrtc/p2p/base/transport.h |
@@ -81,6 +81,16 @@ enum IceGatheringState { |
kIceGatheringComplete, |
}; |
+enum ContinualGatheringPolicy { |
+ // All port allocator sessions will stop after a writable connection is found. |
+ GATHER_ONCE = 0; |
+ // The most recent port allocator session will keep on running. |
+ GATHER_CONTINUALLY; |
+ // The most recent port allocator session will keep on running, and it will |
+ // try to recover connectivity if the channel becomes not connected. |
+ GATHER_CONTINUALLY_AND_RECOVER; |
+}; |
+ |
// Stats that we can return about the connections for a transport channel. |
// TODO(hta): Rename to ConnectionStats |
struct ConnectionInfo { |
@@ -158,8 +168,13 @@ struct IceConfig { |
// Time interval in milliseconds to ping a backup connection when the ICE |
// channel is strongly connected. |
int backup_connection_ping_interval = -1; |
- // If true, the most recent port allocator session will keep on running. |
- bool gather_continually = false; |
+ |
+ ContinualGatheringPolicy gathering_policy = GATHER_ONCE; |
+ |
+ bool gather_continually() { |
+ return gathering_policy == GATHER_CONTINUALLY || |
+ gathering_policy == GATHER_CONTINUALLY_AND_RECOVER; |
+ } |
// Whether we should prioritize Relay/Relay candidate when nothing |
// is writable yet. |
@@ -170,18 +185,25 @@ struct IceConfig { |
// (Default value is a little less than 2 * STRONG_PING_INTERVAL). |
int max_strong_interval = -1; |
+ // Interval to check on all networks and to perform ICE regathering on any |
+ // active network having no connection on it. |
+ int regather_on_failed_networks_interval = -1; |
+ |
IceConfig() {} |
IceConfig(int receiving_timeout_ms, |
int backup_connection_ping_interval, |
- bool gather_continually, |
+ bool gathering_policy, |
bool prioritize_most_likely_candidate_pairs, |
- int max_strong_interval_ms) |
+ int max_strong_interval_ms, |
+ int regather_on_failed_networks_interval_ms) |
: receiving_timeout(receiving_timeout_ms), |
backup_connection_ping_interval(backup_connection_ping_interval), |
- gather_continually(gather_continually), |
+ gathering_policy(gathering_policy), |
prioritize_most_likely_candidate_pairs( |
prioritize_most_likely_candidate_pairs), |
- max_strong_interval(max_strong_interval_ms) {} |
+ max_strong_interval(max_strong_interval_ms), |
+ regather_on_failed_networks_interval( |
+ regather_on_failed_networks_interval_ms) {} |
}; |
bool BadTransportDescription(const std::string& desc, std::string* err_desc); |