From 4e5e409dc27546cb72406f49e852afd02d4cdc6c Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Mon, 5 Jan 2015 15:10:17 +0100 Subject: [PATCH] Started to bind log collection methods in JNI layer --- .../core/tutorials/TutorialBuddyStatus.java | 14 ++++ .../core/tutorials/TutorialChatRoom.java | 14 ++++ .../core/tutorials/TutorialHelloWorld.java | 14 ++++ .../core/tutorials/TutorialRegistration.java | 13 +++- coreapi/linphonecore_jni.cc | 69 +++++++++++++++++++ .../org/linphone/core/LinphoneCore.java | 49 ++++++++++++- .../linphone/core/LinphoneCoreListener.java | 22 ++++-- .../core/LinphoneCoreFactoryImpl.java | 1 - .../org/linphone/core/LinphoneCoreImpl.java | 20 +++++- 9 files changed, 207 insertions(+), 9 deletions(-) diff --git a/coreapi/help/java/org/linphone/core/tutorials/TutorialBuddyStatus.java b/coreapi/help/java/org/linphone/core/tutorials/TutorialBuddyStatus.java index a1db1a25d..ef5dd2fd1 100644 --- a/coreapi/help/java/org/linphone/core/tutorials/TutorialBuddyStatus.java +++ b/coreapi/help/java/org/linphone/core/tutorials/TutorialBuddyStatus.java @@ -30,6 +30,7 @@ import org.linphone.core.LinphoneContent; import org.linphone.core.LinphoneCore; import org.linphone.core.LinphoneCore.EcCalibratorStatus; import org.linphone.core.LinphoneCore.GlobalState; +import org.linphone.core.LinphoneCore.LogCollectionUploadState; import org.linphone.core.LinphoneCore.RegistrationState; import org.linphone.core.LinphoneCore.RemoteProvisioningState; import org.linphone.core.LinphoneCoreException; @@ -322,4 +323,17 @@ public class TutorialBuddyStatus implements LinphoneListener { // TODO Auto-generated method stub return 0; } + + @Override + public void uploadProgressIndication(LinphoneCore lc, int offset, int total) { + // TODO Auto-generated method stub + + } + + @Override + public void uploadStateChanged(LinphoneCore lc, + LogCollectionUploadState state, String info) { + // TODO Auto-generated method stub + + } } diff --git a/coreapi/help/java/org/linphone/core/tutorials/TutorialChatRoom.java b/coreapi/help/java/org/linphone/core/tutorials/TutorialChatRoom.java index eff31682d..046c23ada 100644 --- a/coreapi/help/java/org/linphone/core/tutorials/TutorialChatRoom.java +++ b/coreapi/help/java/org/linphone/core/tutorials/TutorialChatRoom.java @@ -30,6 +30,7 @@ import org.linphone.core.LinphoneContent; import org.linphone.core.LinphoneCore; import org.linphone.core.LinphoneCore.EcCalibratorStatus; import org.linphone.core.LinphoneCore.GlobalState; +import org.linphone.core.LinphoneCore.LogCollectionUploadState; import org.linphone.core.LinphoneCore.RegistrationState; import org.linphone.core.LinphoneCore.RemoteProvisioningState; import org.linphone.core.LinphoneCoreException; @@ -241,5 +242,18 @@ public class TutorialChatRoom implements LinphoneListener, LinphoneChatMessage.S return 0; } + @Override + public void uploadProgressIndication(LinphoneCore lc, int offset, int total) { + // TODO Auto-generated method stub + + } + + @Override + public void uploadStateChanged(LinphoneCore lc, + LogCollectionUploadState state, String info) { + // TODO Auto-generated method stub + + } + } diff --git a/coreapi/help/java/org/linphone/core/tutorials/TutorialHelloWorld.java b/coreapi/help/java/org/linphone/core/tutorials/TutorialHelloWorld.java index 8806b8da1..2e2e50b0b 100644 --- a/coreapi/help/java/org/linphone/core/tutorials/TutorialHelloWorld.java +++ b/coreapi/help/java/org/linphone/core/tutorials/TutorialHelloWorld.java @@ -30,6 +30,7 @@ import org.linphone.core.LinphoneContent; import org.linphone.core.LinphoneCore; import org.linphone.core.LinphoneCore.EcCalibratorStatus; import org.linphone.core.LinphoneCore.GlobalState; +import org.linphone.core.LinphoneCore.LogCollectionUploadState; import org.linphone.core.LinphoneCore.RegistrationState; import org.linphone.core.LinphoneCore.RemoteProvisioningState; import org.linphone.core.LinphoneCoreException; @@ -243,5 +244,18 @@ public class TutorialHelloWorld implements LinphoneListener { return 0; } + @Override + public void uploadProgressIndication(LinphoneCore lc, int offset, int total) { + // TODO Auto-generated method stub + + } + + @Override + public void uploadStateChanged(LinphoneCore lc, + LogCollectionUploadState state, String info) { + // TODO Auto-generated method stub + + } + } diff --git a/coreapi/help/java/org/linphone/core/tutorials/TutorialRegistration.java b/coreapi/help/java/org/linphone/core/tutorials/TutorialRegistration.java index afc2fe16c..ce985d288 100644 --- a/coreapi/help/java/org/linphone/core/tutorials/TutorialRegistration.java +++ b/coreapi/help/java/org/linphone/core/tutorials/TutorialRegistration.java @@ -30,6 +30,7 @@ import org.linphone.core.LinphoneContent; import org.linphone.core.LinphoneCore; import org.linphone.core.LinphoneCore.EcCalibratorStatus; import org.linphone.core.LinphoneCore.GlobalState; +import org.linphone.core.LinphoneCore.LogCollectionUploadState; import org.linphone.core.LinphoneCore.RegistrationState; import org.linphone.core.LinphoneCore.RemoteProvisioningState; import org.linphone.core.LinphoneCoreException; @@ -274,6 +275,16 @@ public class TutorialRegistration implements LinphoneListener { return 0; } + @Override + public void uploadProgressIndication(LinphoneCore lc, int offset, int total) { + // TODO Auto-generated method stub + + } - + @Override + public void uploadStateChanged(LinphoneCore lc, + LogCollectionUploadState state, String info) { + // TODO Auto-generated method stub + + } } diff --git a/coreapi/linphonecore_jni.cc b/coreapi/linphonecore_jni.cc index eb026bf6d..34cdd17ba 100644 --- a/coreapi/linphonecore_jni.cc +++ b/coreapi/linphonecore_jni.cc @@ -420,6 +420,19 @@ public: if (fileTransferRecvId) { vTable->file_transfer_recv = fileTransferRecv; } + + logCollectionUploadStateClass = (jclass)env->NewGlobalRef(env->FindClass("org/linphone/core/LinphoneCore$LogCollectionUploadState")); + logCollectionUploadStateFromIntId = env->GetStaticMethodID(logCollectionUploadStateClass, "fromInt", "(I)Lorg/linphone/core/LinphoneCore$LogCollectionUploadState;"); + logCollectionUploadProgressId = env->GetMethodID(listenerClass, "uploadProgressIndication", "(Lorg/linphone/core/LinphoneCore;I;I)V"); + env->ExceptionClear(); + if (logCollectionUploadProgressId) { + vTable->log_collection_upload_progress_indication = logCollectionUploadProgressIndication; + } + logCollectionUploadStateId = env->GetMethodID(listenerClass, "uploadStateChanged", "(Lorg/linphone/core/LinphoneCore;Lorg/linphone/core/LinphoneCore$LogCollectionUploadState;Ljava/lang/String;)V"); + env->ExceptionClear(); + if (logCollectionUploadStateId) { + vTable->log_collection_upload_state_changed = logCollectionUploadStateChange; + } chatMessageStateClass = (jclass)env->NewGlobalRef(env->FindClass("org/linphone/core/LinphoneChatMessage$State")); chatMessageStateFromIntId = env->GetStaticMethodID(chatMessageStateClass,"fromInt","(I)Lorg/linphone/core/LinphoneChatMessage$State;"); @@ -479,6 +492,7 @@ public: env->DeleteGlobalRef(linphoneEventClass); env->DeleteGlobalRef(subscriptionStateClass); env->DeleteGlobalRef(subscriptionDirClass); + env->DeleteGlobalRef(logCollectionUploadStateClass); } jobject core; jobject listener; @@ -566,6 +580,11 @@ public: jmethodID fileTransferSendId; jmethodID fileTransferRecvId; + jclass logCollectionUploadStateClass; + jmethodID logCollectionUploadStateId; + jmethodID logCollectionUploadStateFromIntId; + jmethodID logCollectionUploadProgressId; + LinphoneCoreVTable vTable; static void displayStatusCb(LinphoneCore *lc, const char *message) { @@ -1001,6 +1020,40 @@ public: jbytes, size); } + static void logCollectionUploadProgressIndication(LinphoneCore *lc, size_t offset, size_t total) { + JNIEnv *env = 0; + jint result = jvm->AttachCurrentThread(&env,NULL); + if (result != 0) { + ms_error("cannot attach VM"); + return; + } + LinphoneCoreVTable *table = linphone_core_get_current_vtable(lc); + LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_v_table_get_user_data(table); + env->CallVoidMethod(lcData->listener + ,lcData->logCollectionUploadProgressId + ,lcData->core + ,(jlong)offset + ,(jlong)total); + } + static void logCollectionUploadStateChange(LinphoneCore *lc, LinphoneCoreLogCollectionUploadState state, const char *info) { + JNIEnv *env = 0; + jint result = jvm->AttachCurrentThread(&env,NULL); + if (result != 0) { + ms_error("cannot attach VM"); + return; + } + LinphoneCoreVTable *table = linphone_core_get_current_vtable(lc); + LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_v_table_get_user_data(table); + jstring msg = info ? env->NewStringUTF(info) : NULL; + env->CallVoidMethod(lcData->listener + ,lcData->logCollectionUploadStateId + ,lcData->core + ,env->CallStaticObjectMethod(lcData->logCollectionUploadStateClass,lcData->logCollectionUploadStateFromIntId,(jint)state), + msg); + if (msg) { + env->DeleteLocalRef(msg); + } + } }; extern "C" jlong Java_org_linphone_core_LinphoneCoreImpl_newLinphoneCore(JNIEnv* env @@ -1082,6 +1135,22 @@ extern "C" void Java_org_linphone_core_LinphoneCoreImpl_removeListener(JNIEnv* e env->DeleteGlobalRef(listener); } + +extern "C" void Java_org_linphone_core_LinphoneCoreImpl_uploadLogCollection(JNIEnv* env, jobject thiz, jlong lc) { + LinphoneCore *core = (LinphoneCore*)lc; + linphone_core_upload_log_collection(core); +} + +extern "C" void Java_org_linphone_core_LinphoneCoreImpl_enableLogCollection(JNIEnv* env, jclass cls, jboolean enable) { + linphone_core_enable_log_collection(enable ? LinphoneLogCollectionEnabledWithoutPreviousLogHandler : LinphoneLogCollectionDisabled); +} + +extern "C" void Java_org_linphone_core_LinphoneCoreImpl_setLogCollectionPath(JNIEnv* env, jclass cls, jstring jpath) { + const char* path = env->GetStringUTFChars(jpath, NULL); + linphone_core_set_log_collection_path(path); + env->ReleaseStringUTFChars(jpath, path); +} + extern "C" jint Java_org_linphone_core_LinphoneCoreImpl_migrateToMultiTransport(JNIEnv* env ,jobject thiz ,jlong lc) { diff --git a/java/common/org/linphone/core/LinphoneCore.java b/java/common/org/linphone/core/LinphoneCore.java index 4b8f42a1b..c9de0e2e4 100644 --- a/java/common/org/linphone/core/LinphoneCore.java +++ b/java/common/org/linphone/core/LinphoneCore.java @@ -430,6 +430,45 @@ public interface LinphoneCore { return mStringValue; } } + /** + * linphone log collection upload states + */ + static public class LogCollectionUploadState { + + static private Vector values = new Vector(); + /** + * Delivery in progress + */ + static public LogCollectionUploadState LogCollectionUploadStateInProgress = new LogCollectionUploadState(0,"LinphoneCoreLogCollectionUploadStateInProgress"); + /** + * Log collection upload successfully delivered and acknowledged by remote end point + */ + static public LogCollectionUploadState LogCollectionUploadStateDelivered = new LogCollectionUploadState(1,"LinphoneCoreLogCollectionUploadStateDelivered"); + /** + * Log collection upload was not delivered + */ + static public LogCollectionUploadState LogCollectionUploadStateNotDelivered = new LogCollectionUploadState(2,"LinphoneCoreLogCollectionUploadStateNotDelivered"); + + private final int mValue; + private final String mStringValue; + + private LogCollectionUploadState(int value, String stringValue) { + mValue = value; + values.addElement(this); + mStringValue=stringValue; + } + public static LogCollectionUploadState fromInt(int value) { + + for (int i=0; i