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

Side by Side Diff: talk/app/webrtc/java/android/org/webrtc/NetworkMonitor.java

Issue 1556743002: Bind a socket to a network if the network handle is set. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 4 years, 11 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
OLDNEW
1 /* 1 /*
2 * libjingle 2 * libjingle
3 * Copyright 2015 Google Inc. 3 * Copyright 2015 Google Inc.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met: 6 * modification, are permitted provided that the following conditions are met:
7 * 7 *
8 * 1. Redistributions of source code must retain the above copyright notice, 8 * 1. Redistributions of source code must retain the above copyright notice,
9 * this list of conditions and the following disclaimer. 9 * this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright notice, 10 * 2. Redistributions in binary form must reproduce the above copyright notice,
(...skipping 11 matching lines...) Expand all
22 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 22 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
23 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 23 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
24 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 24 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
25 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */ 26 */
27 27
28 package org.webrtc; 28 package org.webrtc;
29 29
30 import static org.webrtc.NetworkMonitorAutoDetect.ConnectionType; 30 import static org.webrtc.NetworkMonitorAutoDetect.ConnectionType;
31 import static org.webrtc.NetworkMonitorAutoDetect.INVALID_NET_ID; 31 import static org.webrtc.NetworkMonitorAutoDetect.INVALID_NET_ID;
32 import static org.webrtc.NetworkMonitorAutoDetect.NetworkInformation;
33
34 import org.webrtc.Logging;
32 35
33 import android.content.Context; 36 import android.content.Context;
34 import android.util.Log;
35 37
36 import java.util.ArrayList; 38 import java.util.ArrayList;
37 39
38 /** 40 /**
39 * Borrowed from Chromium's src/net/android/java/src/org/chromium/net/NetworkCha ngeNotifier.java 41 * Borrowed from Chromium's src/net/android/java/src/org/chromium/net/NetworkCha ngeNotifier.java
40 * 42 *
41 * Triggers updates to the underlying network state from OS networking events. 43 * Triggers updates to the underlying network state from OS networking events.
42 * 44 *
43 * WARNING: This class is not thread-safe. 45 * WARNING: This class is not thread-safe.
44 */ 46 */
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
110 } 112 }
111 113
112 private static void assertIsTrue(boolean condition) { 114 private static void assertIsTrue(boolean condition) {
113 if (!condition) { 115 if (!condition) {
114 throw new AssertionError("Expected to be true"); 116 throw new AssertionError("Expected to be true");
115 } 117 }
116 } 118 }
117 119
118 // Called by the native code. 120 // Called by the native code.
119 private void startMonitoring(long nativeObserver) { 121 private void startMonitoring(long nativeObserver) {
120 Log.d(TAG, "Start monitoring from native observer " + nativeObserver); 122 Logging.d(TAG, "Start monitoring from native observer " + nativeObserver);
121 nativeNetworkObservers.add(nativeObserver); 123 nativeNetworkObservers.add(nativeObserver);
122 setAutoDetectConnectivityStateInternal(true); 124 setAutoDetectConnectivityStateInternal(true);
123 } 125 }
124 126
125 // Called by the native code. 127 // Called by the native code.
126 private void stopMonitoring(long nativeObserver) { 128 private void stopMonitoring(long nativeObserver) {
127 Log.d(TAG, "Stop monitoring from native observer " + nativeObserver); 129 Logging.d(TAG, "Stop monitoring from native observer " + nativeObserver);
128 setAutoDetectConnectivityStateInternal(false); 130 setAutoDetectConnectivityStateInternal(false);
129 nativeNetworkObservers.remove(nativeObserver); 131 nativeNetworkObservers.remove(nativeObserver);
130 } 132 }
131 133
132 private ConnectionType getCurrentConnectionType() { 134 private ConnectionType getCurrentConnectionType() {
133 return currentConnectionType; 135 return currentConnectionType;
134 } 136 }
135 137
136 private int getCurrentDefaultNetId() { 138 private int getCurrentDefaultNetId() {
137 return autoDetector == null ? INVALID_NET_ID : autoDetector.getDefaultNetId( ); 139 return autoDetector == null ? INVALID_NET_ID : autoDetector.getDefaultNetId( );
(...skipping 11 matching lines...) Expand all
149 destroyAutoDetector(); 151 destroyAutoDetector();
150 return; 152 return;
151 } 153 }
152 if (autoDetector == null) { 154 if (autoDetector == null) {
153 autoDetector = new NetworkMonitorAutoDetect( 155 autoDetector = new NetworkMonitorAutoDetect(
154 new NetworkMonitorAutoDetect.Observer() { 156 new NetworkMonitorAutoDetect.Observer() {
155 @Override 157 @Override
156 public void onConnectionTypeChanged(ConnectionType newConnectionType) { 158 public void onConnectionTypeChanged(ConnectionType newConnectionType) {
157 updateCurrentConnectionType(newConnectionType); 159 updateCurrentConnectionType(newConnectionType);
158 } 160 }
161 @Override
162 public void onNetworkConnect(NetworkInformation networkInfo) {
163 updateNetworkInformation(networkInfo);
164 }
159 }, 165 },
160 applicationContext); 166 applicationContext);
161 final NetworkMonitorAutoDetect.NetworkState networkState = 167 final NetworkMonitorAutoDetect.NetworkState networkState =
162 autoDetector.getCurrentNetworkState(); 168 autoDetector.getCurrentNetworkState();
163 updateCurrentConnectionType(autoDetector.getCurrentConnectionType(networkS tate)); 169 updateCurrentConnectionType(autoDetector.getConnectionType(networkState));
164 } 170 }
165 } 171 }
166 172
167 private void updateCurrentConnectionType(ConnectionType newConnectionType) { 173 private void updateCurrentConnectionType(ConnectionType newConnectionType) {
168 currentConnectionType = newConnectionType; 174 currentConnectionType = newConnectionType;
169 notifyObserversOfConnectionTypeChange(newConnectionType); 175 notifyObserversOfConnectionTypeChange(newConnectionType);
170 } 176 }
171 177
172 /** 178 /**
173 * Alerts all observers of a connection change. 179 * Alerts all observers of a connection change.
174 */ 180 */
175 private void notifyObserversOfConnectionTypeChange(ConnectionType newConnectio nType) { 181 private void notifyObserversOfConnectionTypeChange(ConnectionType newConnectio nType) {
176 for (long nativeObserver : nativeNetworkObservers) { 182 for (long nativeObserver : nativeNetworkObservers) {
177 nativeNotifyConnectionTypeChanged(nativeObserver); 183 nativeNotifyConnectionTypeChanged(nativeObserver);
178 } 184 }
179 for (NetworkObserver observer : networkObservers) { 185 for (NetworkObserver observer : networkObservers) {
180 observer.onConnectionTypeChanged(newConnectionType); 186 observer.onConnectionTypeChanged(newConnectionType);
181 } 187 }
182 } 188 }
183 189
190 private void updateNetworkInformation(NetworkInformation networkInfo) {
191 for (long nativeObserver : nativeNetworkObservers) {
192 nativeNotifyOfNetworkConnect(nativeObserver, networkInfo);
193 }
194 }
195
184 /** 196 /**
185 * Adds an observer for any connection type changes. 197 * Adds an observer for any connection type changes.
186 */ 198 */
187 public static void addNetworkObserver(NetworkObserver observer) { 199 public static void addNetworkObserver(NetworkObserver observer) {
188 getInstance().addNetworkObserverInternal(observer); 200 getInstance().addNetworkObserverInternal(observer);
189 } 201 }
190 202
191 private void addNetworkObserverInternal(NetworkObserver observer) { 203 private void addNetworkObserverInternal(NetworkObserver observer) {
192 networkObservers.add(observer); 204 networkObservers.add(observer);
193 } 205 }
(...skipping 15 matching lines...) Expand all
209 public static boolean isOnline() { 221 public static boolean isOnline() {
210 ConnectionType connectionType = getInstance().getCurrentConnectionType(); 222 ConnectionType connectionType = getInstance().getCurrentConnectionType();
211 return connectionType != ConnectionType.CONNECTION_UNKNOWN 223 return connectionType != ConnectionType.CONNECTION_UNKNOWN
212 && connectionType != ConnectionType.CONNECTION_NONE; 224 && connectionType != ConnectionType.CONNECTION_NONE;
213 } 225 }
214 226
215 private native long nativeCreateNetworkMonitor(); 227 private native long nativeCreateNetworkMonitor();
216 228
217 private native void nativeNotifyConnectionTypeChanged(long nativePtr); 229 private native void nativeNotifyConnectionTypeChanged(long nativePtr);
218 230
231 private native void nativeNotifyOfNetworkConnect(long nativePtr, NetworkInform ation networkInfo);
232
219 // For testing only. 233 // For testing only.
220 static void resetInstanceForTests(Context context) { 234 static void resetInstanceForTests(Context context) {
221 instance = new NetworkMonitor(context); 235 instance = new NetworkMonitor(context);
222 } 236 }
223 237
224 // For testing only. 238 // For testing only.
225 public static NetworkMonitorAutoDetect getAutoDetectorForTest() { 239 public static NetworkMonitorAutoDetect getAutoDetectorForTest() {
226 return getInstance().autoDetector; 240 return getInstance().autoDetector;
227 } 241 }
228 } 242 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698