From 583b0ed767f5fee20f1adc30b90847af2a62a73c Mon Sep 17 00:00:00 2001 From: Erwan Croze Date: Tue, 28 Feb 2017 16:23:53 +0100 Subject: [PATCH] Add network reachable callback in JNI --- .../core/tutorials/TutorialBuddyStatus.java | 5 ++++ .../core/tutorials/TutorialChatRoom.java | 5 ++++ .../core/tutorials/TutorialHelloWorld.java | 5 ++++ .../core/tutorials/TutorialRegistration.java | 5 ++++ coreapi/linphonecore_jni.cc | 24 +++++++++++++++++-- .../linphone/core/LinphoneCoreListener.java | 7 ++++++ .../core/LinphoneCoreListenerBase.java | 5 ++++ 7 files changed, 54 insertions(+), 2 deletions(-) diff --git a/coreapi/help/java/org/linphone/core/tutorials/TutorialBuddyStatus.java b/coreapi/help/java/org/linphone/core/tutorials/TutorialBuddyStatus.java index ae7edd04e..8721ec5c0 100644 --- a/coreapi/help/java/org/linphone/core/tutorials/TutorialBuddyStatus.java +++ b/coreapi/help/java/org/linphone/core/tutorials/TutorialBuddyStatus.java @@ -361,4 +361,9 @@ public class TutorialBuddyStatus implements LinphoneCoreListener { } + @Override + public void networkReachableChanged(LinphoneCore lc, boolean enable) { + + } + } diff --git a/coreapi/help/java/org/linphone/core/tutorials/TutorialChatRoom.java b/coreapi/help/java/org/linphone/core/tutorials/TutorialChatRoom.java index 8c1c7c8e9..832e4fc62 100644 --- a/coreapi/help/java/org/linphone/core/tutorials/TutorialChatRoom.java +++ b/coreapi/help/java/org/linphone/core/tutorials/TutorialChatRoom.java @@ -272,4 +272,9 @@ public class TutorialChatRoom implements LinphoneCoreListener, LinphoneChatMessa } + @Override + public void networkReachableChanged(LinphoneCore lc, boolean enable) { + + } + } diff --git a/coreapi/help/java/org/linphone/core/tutorials/TutorialHelloWorld.java b/coreapi/help/java/org/linphone/core/tutorials/TutorialHelloWorld.java index f3ba59502..81a3b4bd7 100644 --- a/coreapi/help/java/org/linphone/core/tutorials/TutorialHelloWorld.java +++ b/coreapi/help/java/org/linphone/core/tutorials/TutorialHelloWorld.java @@ -278,4 +278,9 @@ public class TutorialHelloWorld implements LinphoneCoreListener { } + @Override + public void networkReachableChanged(LinphoneCore lc, boolean enable) { + + } + } diff --git a/coreapi/help/java/org/linphone/core/tutorials/TutorialRegistration.java b/coreapi/help/java/org/linphone/core/tutorials/TutorialRegistration.java index bcfe2867c..a6b3ec9f8 100644 --- a/coreapi/help/java/org/linphone/core/tutorials/TutorialRegistration.java +++ b/coreapi/help/java/org/linphone/core/tutorials/TutorialRegistration.java @@ -308,4 +308,9 @@ public class TutorialRegistration implements LinphoneCoreListener { } + @Override + public void networkReachableChanged(LinphoneCore lc, boolean enable) { + + } + } diff --git a/coreapi/linphonecore_jni.cc b/coreapi/linphonecore_jni.cc index 777819fed..b461095b1 100644 --- a/coreapi/linphonecore_jni.cc +++ b/coreapi/linphonecore_jni.cc @@ -318,6 +318,8 @@ public: notifyRecvId = env->GetMethodID(listenerClass,"notifyReceived", "(Lorg/linphone/core/LinphoneCore;Lorg/linphone/core/LinphoneEvent;Ljava/lang/String;Lorg/linphone/core/LinphoneContent;)V"); + networkReachableId = env->GetMethodID(listenerClass,"networkReachableChanged", "(Lorg/linphone/core/LinphoneCore;Z)V"); + configuringStateClass = (jclass)env->NewGlobalRef(env->FindClass("org/linphone/core/LinphoneCore$RemoteProvisioningState")); configuringStateFromIntId = env->GetStaticMethodID(configuringStateClass,"fromInt","(I)Lorg/linphone/core/LinphoneCore$RemoteProvisioningState;"); configuringStateId = env->GetMethodID(listenerClass,"configuringStatus","(Lorg/linphone/core/LinphoneCore;Lorg/linphone/core/LinphoneCore$RemoteProvisioningState;Ljava/lang/String;)V"); @@ -445,6 +447,7 @@ public: jmethodID authenticationRequestedId; jmethodID publishStateId; jmethodID notifyRecvId; + jmethodID networkReachableId; jclass authMethodClass; jmethodID authMethodFromIntId; @@ -874,6 +877,10 @@ public: vTable->notify_received = notifyReceived; } + if (ljb->networkReachableId) { + vTable->network_reachable = networkReachableCb; + } + if (ljb->configuringStateId) { vTable->configuring_status = configuringStatus; } @@ -1397,6 +1404,21 @@ public: handle_possible_java_exception(env, lcData->listener); } + static void networkReachableCb(LinphoneCore *lc, bool_t enable){ + JNIEnv *env = 0; + jint result = jvm->AttachCurrentThread(&env,NULL); + if (result != 0) { + ms_error("cannot attach VM"); + return; + } + + LinphoneJavaBindings *ljb = (LinphoneJavaBindings *)linphone_core_get_user_data(lc); + LinphoneCoreVTable *table = linphone_core_get_current_vtable(lc); + LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_v_table_get_user_data(table); + env->CallVoidMethod(lcData->listener, ljb->networkReachableId, lcData->core, (jboolean)enable); + handle_possible_java_exception(env, lcData->listener); + } + static void configuringStatus(LinphoneCore *lc, LinphoneConfiguringState status, const char *message) { JNIEnv *env = 0; jint result = jvm->AttachCurrentThread(&env,NULL); @@ -7877,8 +7899,6 @@ extern "C" jboolean Java_org_linphone_core_LinphoneConferenceParamsImpl_isVideoR return linphone_conference_params_video_requested((LinphoneConferenceParams *)paramsPtr); } - - extern "C" jobjectArray Java_org_linphone_core_LinphoneConferenceImpl_getParticipants(JNIEnv *env, jobject thiz, jlong pconference) { bctbx_list_t *participants, *it; jclass addr_class = env->FindClass("org/linphone/core/LinphoneAddressImpl"); diff --git a/java/common/org/linphone/core/LinphoneCoreListener.java b/java/common/org/linphone/core/LinphoneCoreListener.java index 76dbd628f..998629ad9 100644 --- a/java/common/org/linphone/core/LinphoneCoreListener.java +++ b/java/common/org/linphone/core/LinphoneCoreListener.java @@ -269,5 +269,12 @@ public interface LinphoneCoreListener { * @param list LinphoneFriendList object */ void friendListRemoved(LinphoneCore lc, LinphoneFriendList list); + + /** + * Callback prototype for reporting network is reachable + * @param lc LinphoneCore object + * @param enable status of network + */ + void networkReachableChanged(LinphoneCore lc, boolean enable); } diff --git a/java/common/org/linphone/core/LinphoneCoreListenerBase.java b/java/common/org/linphone/core/LinphoneCoreListenerBase.java index 3a95b9f02..f5dc107ef 100644 --- a/java/common/org/linphone/core/LinphoneCoreListenerBase.java +++ b/java/common/org/linphone/core/LinphoneCoreListenerBase.java @@ -220,4 +220,9 @@ public class LinphoneCoreListenerBase implements LinphoneCoreListener { // TODO Auto-generated method stub } + + @Override + public void networkReachableChanged(LinphoneCore lc, boolean enable) { + // TODO Auto-generated method stub + } }