diff --git a/coreapi/linphonecore_jni.cc b/coreapi/linphonecore_jni.cc index 1b4a4e09f..084869204 100644 --- a/coreapi/linphonecore_jni.cc +++ b/coreapi/linphonecore_jni.cc @@ -5330,12 +5330,19 @@ JNIEXPORT jobject JNICALL Java_org_linphone_core_LinphoneCoreImpl_publish(JNIEnv // LpConfig extern "C" jlong Java_org_linphone_core_LpConfigImpl_newLpConfigImpl(JNIEnv *env, jobject thiz, jstring file) { - const char *cfile = env->GetStringUTFChars(file, NULL); - LpConfig *lp = lp_config_new(cfile); + const char *cfile = env->GetStringUTFChars(file, NULL); + LpConfig *lp = lp_config_new(cfile); env->ReleaseStringUTFChars(file, cfile); return (jlong) lp; } +extern "C" jlong Java_org_linphone_core_LpConfigImpl_newLpConfigImplFromBuffer(JNIEnv *env, jobject thiz, jstring buffer) { + const char *cbuffer = env->GetStringUTFChars(buffer, NULL); + LpConfig *lp = lp_config_new_from_buffer(cbuffer); + env->ReleaseStringUTFChars(buffer, cbuffer); + return (jlong) lp; +} + extern "C" void Java_org_linphone_core_LpConfigImpl_sync(JNIEnv *env, jobject thiz, jlong lpc) { LpConfig *lp = (LpConfig *)lpc; lp_config_sync(lp); diff --git a/java/common/org/linphone/core/LinphoneCoreFactory.java b/java/common/org/linphone/core/LinphoneCoreFactory.java index 88a7651e4..a61e585d2 100644 --- a/java/common/org/linphone/core/LinphoneCoreFactory.java +++ b/java/common/org/linphone/core/LinphoneCoreFactory.java @@ -103,6 +103,7 @@ abstract public class LinphoneCoreFactory { */ abstract public LinphoneAddress createLinphoneAddress(String address) throws LinphoneCoreException; abstract public LpConfig createLpConfig(String file); + abstract public LpConfig createLpConfigFromString(String buffer); /** * Enable verbose traces diff --git a/java/impl/org/linphone/core/LinphoneCoreFactoryImpl.java b/java/impl/org/linphone/core/LinphoneCoreFactoryImpl.java index 29f97aaa4..4b33bdf4b 100644 --- a/java/impl/org/linphone/core/LinphoneCoreFactoryImpl.java +++ b/java/impl/org/linphone/core/LinphoneCoreFactoryImpl.java @@ -85,7 +85,11 @@ public class LinphoneCoreFactoryImpl extends LinphoneCoreFactory { @Override public LpConfig createLpConfig(String file) { - return new LpConfigImpl(file); + return LpConfigImpl.fromFile(file); + } + + public LpConfig createLpConfigFromString(String buffer) { + return LpConfigImpl.fromBuffer(buffer); } @Override diff --git a/java/impl/org/linphone/core/LpConfigImpl.java b/java/impl/org/linphone/core/LpConfigImpl.java index d2c24e93b..a11cea023 100644 --- a/java/impl/org/linphone/core/LpConfigImpl.java +++ b/java/impl/org/linphone/core/LpConfigImpl.java @@ -18,11 +18,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ package org.linphone.core; - - class LpConfigImpl implements LpConfig { - private final long nativePtr; + private long nativePtr; boolean ownPtr = false; public LpConfigImpl(long ptr) { @@ -30,13 +28,34 @@ class LpConfigImpl implements LpConfig { } private native long newLpConfigImpl(String file); + private native long newLpConfigImplFromBuffer(String buffer); private native void delete(long ptr); + @Deprecated public LpConfigImpl(String file) { nativePtr = newLpConfigImpl(file); ownPtr = true; } + private LpConfigImpl() { + nativePtr = -1; + ownPtr = false; + } + + public static LpConfigImpl fromFile(String file) { + LpConfigImpl impl = new LpConfigImpl(); + impl.nativePtr = impl.newLpConfigImpl(file); + impl.ownPtr = true; + return impl; + } + + public static LpConfigImpl fromBuffer(String buffer) { + LpConfigImpl impl = new LpConfigImpl(); + impl.nativePtr = impl.newLpConfigImplFromBuffer(buffer); + impl.ownPtr = true; + return impl; + } + protected void finalize() throws Throwable { if(ownPtr) { delete(nativePtr);