From 8586c8ee88bfbf97dd310efb2034ac4e125d4865 Mon Sep 17 00:00:00 2001 From: zhihuang Date: Mon, 13 Feb 2017 14:04:50 -0800 Subject: [PATCH] Add the url attribute to the IceCandidate (Java Wrapper) The url of the ICE server is added to the IceCandiate class. This can be used to tell which server this candidate was gathered from. BUG=webrtc:7128 Review-Url: https://codereview.webrtc.org/2690593002 Cr-Commit-Position: refs/heads/master@{#16593} --- .../src/org/appspot/apprtc/DirectRTCClient.java | 6 ++++-- .../org/appspot/apprtc/RoomParametersFetcher.java | 4 ++-- .../src/org/appspot/apprtc/WebSocketRTCClient.java | 5 +++-- .../src/org/appspot/apprtc/DirectRTCClientTest.java | 3 ++- webrtc/sdk/android/api/org/webrtc/IceCandidate.java | 6 ++++-- webrtc/sdk/android/src/jni/peerconnection_jni.cc | 12 ++++++++---- 6 files changed, 23 insertions(+), 13 deletions(-) diff --git a/webrtc/examples/androidapp/src/org/appspot/apprtc/DirectRTCClient.java b/webrtc/examples/androidapp/src/org/appspot/apprtc/DirectRTCClient.java index 199979f61b..6d143b92bf 100644 --- a/webrtc/examples/androidapp/src/org/appspot/apprtc/DirectRTCClient.java +++ b/webrtc/examples/androidapp/src/org/appspot/apprtc/DirectRTCClient.java @@ -187,6 +187,7 @@ public class DirectRTCClient implements AppRTCClient, TCPChannelClient.TCPChanne jsonPut(json, "label", candidate.sdpMLineIndex); jsonPut(json, "id", candidate.sdpMid); jsonPut(json, "candidate", candidate.sdp); + jsonPut(json, "url", candidate.serverUrl); if (roomState != ConnectionState.CONNECTED) { reportError("Sending ICE candidate in non connected state."); @@ -336,12 +337,13 @@ public class DirectRTCClient implements AppRTCClient, TCPChannelClient.TCPChanne jsonPut(json, "label", candidate.sdpMLineIndex); jsonPut(json, "id", candidate.sdpMid); jsonPut(json, "candidate", candidate.sdp); + jsonPut(json, "url", candidate.serverUrl); return json; } // Converts a JSON candidate to a Java object. private static IceCandidate toJavaCandidate(JSONObject json) throws JSONException { - return new IceCandidate( - json.getString("id"), json.getInt("label"), json.getString("candidate")); + return new IceCandidate(json.getString("id"), json.getInt("label"), json.getString("candidate"), + json.getString("url")); } } diff --git a/webrtc/examples/androidapp/src/org/appspot/apprtc/RoomParametersFetcher.java b/webrtc/examples/androidapp/src/org/appspot/apprtc/RoomParametersFetcher.java index f79154c29f..48651099f0 100644 --- a/webrtc/examples/androidapp/src/org/appspot/apprtc/RoomParametersFetcher.java +++ b/webrtc/examples/androidapp/src/org/appspot/apprtc/RoomParametersFetcher.java @@ -115,8 +115,8 @@ public class RoomParametersFetcher { offerSdp = new SessionDescription( SessionDescription.Type.fromCanonicalForm(messageType), message.getString("sdp")); } else if (messageType.equals("candidate")) { - IceCandidate candidate = new IceCandidate( - message.getString("id"), message.getInt("label"), message.getString("candidate")); + IceCandidate candidate = new IceCandidate(message.getString("id"), + message.getInt("label"), message.getString("candidate"), message.getString("url")); iceCandidates.add(candidate); } else { Log.e(TAG, "Unknown message: " + messageString); diff --git a/webrtc/examples/androidapp/src/org/appspot/apprtc/WebSocketRTCClient.java b/webrtc/examples/androidapp/src/org/appspot/apprtc/WebSocketRTCClient.java index 28eef2e51e..50a7a35e49 100644 --- a/webrtc/examples/androidapp/src/org/appspot/apprtc/WebSocketRTCClient.java +++ b/webrtc/examples/androidapp/src/org/appspot/apprtc/WebSocketRTCClient.java @@ -408,12 +408,13 @@ public class WebSocketRTCClient implements AppRTCClient, WebSocketChannelEvents jsonPut(json, "label", candidate.sdpMLineIndex); jsonPut(json, "id", candidate.sdpMid); jsonPut(json, "candidate", candidate.sdp); + jsonPut(json, "url", candidate.serverUrl); return json; } // Converts a JSON candidate to a Java object. IceCandidate toJavaCandidate(JSONObject json) throws JSONException { - return new IceCandidate( - json.getString("id"), json.getInt("label"), json.getString("candidate")); + return new IceCandidate(json.getString("id"), json.getInt("label"), json.getString("candidate"), + json.getString("url")); } } diff --git a/webrtc/examples/androidjunit/src/org/appspot/apprtc/DirectRTCClientTest.java b/webrtc/examples/androidjunit/src/org/appspot/apprtc/DirectRTCClientTest.java index 2da8164ec7..7ad50c38d9 100644 --- a/webrtc/examples/androidjunit/src/org/appspot/apprtc/DirectRTCClientTest.java +++ b/webrtc/examples/androidjunit/src/org/appspot/apprtc/DirectRTCClientTest.java @@ -41,6 +41,7 @@ public class DirectRTCClientTest { private static final String DUMMY_SDP_MID = "sdpMid"; private static final String DUMMY_SDP = "sdp"; + private static final String DUMMY_SERVER_URL = "serverUrl"; public static final int SERVER_WAIT = 100; public static final int NETWORK_TIMEOUT = 1000; @@ -136,7 +137,7 @@ public class DirectRTCClientTest { verify(serverEvents, timeout(NETWORK_TIMEOUT)) .onRemoteDescription(isNotNull(SessionDescription.class)); - IceCandidate candidate = new IceCandidate(DUMMY_SDP_MID, 0, DUMMY_SDP); + IceCandidate candidate = new IceCandidate(DUMMY_SDP_MID, 0, DUMMY_SDP, DUMMY_SERVER_URL); server.sendLocalIceCandidate(candidate); verify(clientEvents, timeout(NETWORK_TIMEOUT)) .onRemoteIceCandidate(isNotNull(IceCandidate.class)); diff --git a/webrtc/sdk/android/api/org/webrtc/IceCandidate.java b/webrtc/sdk/android/api/org/webrtc/IceCandidate.java index 3476ab4f19..b76e649689 100644 --- a/webrtc/sdk/android/api/org/webrtc/IceCandidate.java +++ b/webrtc/sdk/android/api/org/webrtc/IceCandidate.java @@ -18,14 +18,16 @@ public class IceCandidate { public final String sdpMid; public final int sdpMLineIndex; public final String sdp; + public final String serverUrl; - public IceCandidate(String sdpMid, int sdpMLineIndex, String sdp) { + public IceCandidate(String sdpMid, int sdpMLineIndex, String sdp, String serverUrl) { this.sdpMid = sdpMid; this.sdpMLineIndex = sdpMLineIndex; this.sdp = sdp; + this.serverUrl = serverUrl; } public String toString() { - return sdpMid + ":" + sdpMLineIndex + ":" + sdp; + return sdpMid + ":" + sdpMLineIndex + ":" + sdp + ":" + serverUrl; } } diff --git a/webrtc/sdk/android/src/jni/peerconnection_jni.cc b/webrtc/sdk/android/src/jni/peerconnection_jni.cc index d3f23445d6..dfc1090463 100644 --- a/webrtc/sdk/android/src/jni/peerconnection_jni.cc +++ b/webrtc/sdk/android/src/jni/peerconnection_jni.cc @@ -245,12 +245,16 @@ class PCOJava : public PeerConnectionObserver { std::string sdp; RTC_CHECK(candidate->ToString(&sdp)) << "got so far: " << sdp; jclass candidate_class = FindClass(jni(), "org/webrtc/IceCandidate"); - jmethodID ctor = GetMethodID(jni(), candidate_class, - "", "(Ljava/lang/String;ILjava/lang/String;)V"); + jmethodID ctor = GetMethodID( + jni(), candidate_class, "", + "(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V"); jstring j_mid = JavaStringFromStdString(jni(), candidate->sdp_mid()); jstring j_sdp = JavaStringFromStdString(jni(), sdp); - jobject j_candidate = jni()->NewObject(candidate_class, ctor, j_mid, - candidate->sdp_mline_index(), j_sdp); + jstring j_url = + JavaStringFromStdString(jni(), candidate->candidate().url()); + jobject j_candidate = + jni()->NewObject(candidate_class, ctor, j_mid, + candidate->sdp_mline_index(), j_sdp, j_url); CHECK_EXCEPTION(jni()) << "error during NewObject"; jmethodID m = GetMethodID(jni(), *j_observer_class_, "onIceCandidate", "(Lorg/webrtc/IceCandidate;)V");