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");