2424#include " JavaEnums.h"
2525#include " JavaFactories.h"
2626#include " JavaRuntimeException.h"
27+ #include " JavaString.h"
2728#include " JavaUtils.h"
2829#include " JNI_WebRTC.h"
2930
@@ -193,6 +194,27 @@ namespace jni
193194 ExceptionCheck (env);
194195 }
195196
197+ void PeerConnectionObserver::OnIceSelectedCandidatePairChanged (const webrtc::CandidatePairChangeEvent & event)
198+ {
199+ JNIEnv * env = AttachCurrentThread ();
200+
201+ const webrtc::Candidate & remote = event.selected_candidate_pair .remote_candidate ();
202+
203+ std::string ip = remote.address ().ipaddr ().ToString ();
204+ int port = remote.address ().port ();
205+
206+ const auto typeName = remote.type_name ();
207+ std::string type (typeName.data (), typeName.size ());
208+
209+ JavaLocalRef<jstring> jAddress = JavaString::toJava (env, ip);
210+ JavaLocalRef<jstring> jType = JavaString::toJava (env, type);
211+
212+ env->CallVoidMethod (observer, javaClass->onSelectedCandidatePairChanged ,
213+ jAddress.get (), static_cast <jint>(port), jType.get ());
214+
215+ ExceptionCheck (env);
216+ }
217+
196218 PeerConnectionObserver::JavaPeerConnectionObserverClass::JavaPeerConnectionObserverClass (JNIEnv * env)
197219 {
198220 jclass cls = FindClass (env, PKG " PeerConnectionObserver" );
@@ -210,5 +232,6 @@ namespace jni
210232 onIceCandidateError = GetMethod (env, cls, " onIceCandidateError" , " (L" PKG " RTCPeerConnectionIceErrorEvent;)V" );
211233 onIceCandidatesRemoved = GetMethod (env, cls, " onIceCandidatesRemoved" , " ([L" PKG " RTCIceCandidate;)V" );
212234 onIceConnectionReceivingChange = GetMethod (env, cls, " onIceConnectionReceivingChange" , " (Z)V" );
235+ onSelectedCandidatePairChanged = GetMethod (env, cls, " onSelectedCandidatePairChanged" , " (Ljava/lang/String;ILjava/lang/String;)V" );
213236 }
214237}
0 commit comments