diff --git a/build-daemon.sh b/build-daemon.sh
index 9c2bda49ad36774e9abf8c2906374fdd830c3177..be76ff340851041c42e0917cd53576ef1ce7ac19 100755
--- a/build-daemon.sh
+++ b/build-daemon.sh
@@ -85,7 +85,7 @@ make .gas
 # Generate JNI interface
 JNIDIR=$DAEMON_DIR/bin/jni
 cd $JNIDIR
-PACKAGEDIR=$ANDROID_APP_DIR/libringclient/src/main/java/net/jami/daemon $JNIDIR/make-swig.sh
+PACKAGEDIR=$ANDROID_APP_DIR/libjamiclient/src/main/java/net/jami/daemon $JNIDIR/make-swig.sh
 
 # Setup cross-compilation build environemnt
 export AR=$TOOLCHAIN/bin/llvm-ar
diff --git a/ring-android/app/build.gradle b/ring-android/app/build.gradle
index 7a0bc197028a5ba7f9803bc5a77a22cd81d494b9..8c341eebde80347ad0170b51988c5865d0a1fe5c 100644
--- a/ring-android/app/build.gradle
+++ b/ring-android/app/build.gradle
@@ -81,7 +81,7 @@ android {
 
 dependencies {
     implementation fileTree(include: '*.jar', dir: 'libs')
-    implementation project(':libringclient')
+    implementation project(':libjamiclient')
 
     implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
     implementation 'androidx.core:core-ktx:1.6.0'
diff --git a/ring-android/app/src/main/java/cx/ring/tv/call/TVCallFragment.kt b/ring-android/app/src/main/java/cx/ring/tv/call/TVCallFragment.kt
index a75ccb56bd72b08dab71da7c2bb94fb628fb0b56..7943c454eb9b7ffe8a9153824b93c22f0bfb761e 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/call/TVCallFragment.kt
+++ b/ring-android/app/src/main/java/cx/ring/tv/call/TVCallFragment.kt
@@ -21,6 +21,7 @@
 package cx.ring.tv.call
 
 import android.Manifest
+import android.annotation.SuppressLint
 import android.app.Activity
 import android.app.PictureInPictureParams
 import android.content.ComponentName
@@ -575,6 +576,7 @@ class TVCallFragment : BaseSupportFragment<CallPresenter, CallView>(), CallView
             binding.confControlGroup!!.visibility = View.VISIBLE
             if (confAdapter == null) {
                 confAdapter = ConfParticipantAdapter(object : ConfParticipantSelected {
+                    @SuppressLint("RestrictedApi")
                     override fun onParticipantSelected(view: View, contact: ParticipantInfo) {
                         val context = requireContext()
                         val popup = PopupMenu(context, view)
diff --git a/ring-android/libringclient/.gitignore b/ring-android/libjamiclient/.gitignore
similarity index 100%
rename from ring-android/libringclient/.gitignore
rename to ring-android/libjamiclient/.gitignore
diff --git a/ring-android/libringclient/build.gradle b/ring-android/libjamiclient/build.gradle
similarity index 100%
rename from ring-android/libringclient/build.gradle
rename to ring-android/libjamiclient/build.gradle
diff --git a/ring-android/libringclient/src/main/java/net/jami/account/AccountWizardPresenter.kt b/ring-android/libjamiclient/src/main/java/net/jami/account/AccountWizardPresenter.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/account/AccountWizardPresenter.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/account/AccountWizardPresenter.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/account/AccountWizardView.kt b/ring-android/libjamiclient/src/main/java/net/jami/account/AccountWizardView.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/account/AccountWizardView.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/account/AccountWizardView.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/account/HomeAccountCreationPresenter.kt b/ring-android/libjamiclient/src/main/java/net/jami/account/HomeAccountCreationPresenter.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/account/HomeAccountCreationPresenter.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/account/HomeAccountCreationPresenter.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/account/HomeAccountCreationView.kt b/ring-android/libjamiclient/src/main/java/net/jami/account/HomeAccountCreationView.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/account/HomeAccountCreationView.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/account/HomeAccountCreationView.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/account/JamiAccountConnectPresenter.kt b/ring-android/libjamiclient/src/main/java/net/jami/account/JamiAccountConnectPresenter.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/account/JamiAccountConnectPresenter.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/account/JamiAccountConnectPresenter.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/account/JamiAccountCreationPresenter.kt b/ring-android/libjamiclient/src/main/java/net/jami/account/JamiAccountCreationPresenter.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/account/JamiAccountCreationPresenter.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/account/JamiAccountCreationPresenter.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/account/JamiAccountCreationView.kt b/ring-android/libjamiclient/src/main/java/net/jami/account/JamiAccountCreationView.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/account/JamiAccountCreationView.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/account/JamiAccountCreationView.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/account/JamiAccountSummaryPresenter.kt b/ring-android/libjamiclient/src/main/java/net/jami/account/JamiAccountSummaryPresenter.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/account/JamiAccountSummaryPresenter.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/account/JamiAccountSummaryPresenter.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/account/JamiAccountSummaryView.kt b/ring-android/libjamiclient/src/main/java/net/jami/account/JamiAccountSummaryView.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/account/JamiAccountSummaryView.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/account/JamiAccountSummaryView.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/account/JamiConnectAccountView.kt b/ring-android/libjamiclient/src/main/java/net/jami/account/JamiConnectAccountView.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/account/JamiConnectAccountView.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/account/JamiConnectAccountView.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/account/JamiLinkAccountPresenter.kt b/ring-android/libjamiclient/src/main/java/net/jami/account/JamiLinkAccountPresenter.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/account/JamiLinkAccountPresenter.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/account/JamiLinkAccountPresenter.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/account/JamiLinkAccountView.kt b/ring-android/libjamiclient/src/main/java/net/jami/account/JamiLinkAccountView.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/account/JamiLinkAccountView.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/account/JamiLinkAccountView.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/account/LinkDevicePresenter.kt b/ring-android/libjamiclient/src/main/java/net/jami/account/LinkDevicePresenter.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/account/LinkDevicePresenter.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/account/LinkDevicePresenter.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/account/LinkDeviceView.kt b/ring-android/libjamiclient/src/main/java/net/jami/account/LinkDeviceView.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/account/LinkDeviceView.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/account/LinkDeviceView.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/account/ProfileCreationPresenter.kt b/ring-android/libjamiclient/src/main/java/net/jami/account/ProfileCreationPresenter.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/account/ProfileCreationPresenter.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/account/ProfileCreationPresenter.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/account/ProfileCreationView.kt b/ring-android/libjamiclient/src/main/java/net/jami/account/ProfileCreationView.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/account/ProfileCreationView.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/account/ProfileCreationView.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/account/SIPCreationPresenter.kt b/ring-android/libjamiclient/src/main/java/net/jami/account/SIPCreationPresenter.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/account/SIPCreationPresenter.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/account/SIPCreationPresenter.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/account/SIPCreationView.kt b/ring-android/libjamiclient/src/main/java/net/jami/account/SIPCreationView.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/account/SIPCreationView.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/account/SIPCreationView.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/account/SecurityAccountPresenter.kt b/ring-android/libjamiclient/src/main/java/net/jami/account/SecurityAccountPresenter.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/account/SecurityAccountPresenter.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/account/SecurityAccountPresenter.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/account/SecurityAccountView.kt b/ring-android/libjamiclient/src/main/java/net/jami/account/SecurityAccountView.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/account/SecurityAccountView.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/account/SecurityAccountView.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/call/CallPresenter.kt b/ring-android/libjamiclient/src/main/java/net/jami/call/CallPresenter.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/call/CallPresenter.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/call/CallPresenter.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/call/CallView.kt b/ring-android/libjamiclient/src/main/java/net/jami/call/CallView.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/call/CallView.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/call/CallView.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/contactrequests/BlockListPresenter.kt b/ring-android/libjamiclient/src/main/java/net/jami/contactrequests/BlockListPresenter.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/contactrequests/BlockListPresenter.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/contactrequests/BlockListPresenter.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/contactrequests/BlockListView.kt b/ring-android/libjamiclient/src/main/java/net/jami/contactrequests/BlockListView.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/contactrequests/BlockListView.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/contactrequests/BlockListView.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/contactrequests/ContactRequestsPresenter.kt b/ring-android/libjamiclient/src/main/java/net/jami/contactrequests/ContactRequestsPresenter.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/contactrequests/ContactRequestsPresenter.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/contactrequests/ContactRequestsPresenter.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/contactrequests/ContactRequestsView.kt b/ring-android/libjamiclient/src/main/java/net/jami/contactrequests/ContactRequestsView.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/contactrequests/ContactRequestsView.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/contactrequests/ContactRequestsView.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/conversation/ConversationPresenter.kt b/ring-android/libjamiclient/src/main/java/net/jami/conversation/ConversationPresenter.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/conversation/ConversationPresenter.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/conversation/ConversationPresenter.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/conversation/ConversationView.kt b/ring-android/libjamiclient/src/main/java/net/jami/conversation/ConversationView.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/conversation/ConversationView.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/conversation/ConversationView.kt
diff --git a/ring-android/libjamiclient/src/main/java/net/jami/daemon/Blob.java b/ring-android/libjamiclient/src/main/java/net/jami/daemon/Blob.java
new file mode 100644
index 0000000000000000000000000000000000000000..536cc1b2c29c98d609e1ea2e98a44665ad98a8d7
--- /dev/null
+++ b/ring-android/libjamiclient/src/main/java/net/jami/daemon/Blob.java
@@ -0,0 +1,170 @@
+/* ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version 4.0.2
+ *
+ * Do not make changes to this file unless you know what you are doing--modify
+ * the SWIG interface file instead.
+ * ----------------------------------------------------------------------------- */
+
+package net.jami.daemon;
+
+public class Blob extends java.util.AbstractList<Byte> implements java.util.RandomAccess {
+  private transient long swigCPtr;
+  protected transient boolean swigCMemOwn;
+
+  protected Blob(long cPtr, boolean cMemoryOwn) {
+    swigCMemOwn = cMemoryOwn;
+    swigCPtr = cPtr;
+  }
+
+  protected static long getCPtr(Blob obj) {
+    return (obj == null) ? 0 : obj.swigCPtr;
+  }
+
+  @SuppressWarnings("deprecation")
+  protected void finalize() {
+    delete();
+  }
+
+  public synchronized void delete() {
+    if (swigCPtr != 0) {
+      if (swigCMemOwn) {
+        swigCMemOwn = false;
+        JamiServiceJNI.delete_Blob(swigCPtr);
+      }
+      swigCPtr = 0;
+    }
+  }
+
+  public static Blob fromString(String in) {
+    byte[] dat;
+    try {
+      dat = in.getBytes("UTF-8");
+    } catch (java.io.UnsupportedEncodingException e) {
+      dat = in.getBytes();
+    }
+    Blob n = new Blob();
+    n.reserve(dat.length);
+    for (int i=0; i<dat.length; i++) {
+      n.add(dat[i]);
+    }
+    return n;
+  }
+  public String toJavaString() {
+    byte[] dat = new byte[(int)size()];
+    for (int i=0; i<dat.length; i++) {
+        dat[i] = (byte)get(i);
+    }
+    try {
+        return new String(dat, "utf-8");
+    } catch (java.io.UnsupportedEncodingException e) {
+        return "";
+    }
+  }
+
+  public Blob(byte[] initialElements) {
+    this();
+    reserve(initialElements.length);
+
+    for (byte element : initialElements) {
+      add(element);
+    }
+  }
+
+  public Blob(Iterable<Byte> initialElements) {
+    this();
+    for (byte element : initialElements) {
+      add(element);
+    }
+  }
+
+  public Byte get(int index) {
+    return doGet(index);
+  }
+
+  public Byte set(int index, Byte e) {
+    return doSet(index, e);
+  }
+
+  public boolean add(Byte e) {
+    modCount++;
+    doAdd(e);
+    return true;
+  }
+
+  public void add(int index, Byte e) {
+    modCount++;
+    doAdd(index, e);
+  }
+
+  public Byte remove(int index) {
+    modCount++;
+    return doRemove(index);
+  }
+
+  protected void removeRange(int fromIndex, int toIndex) {
+    modCount++;
+    doRemoveRange(fromIndex, toIndex);
+  }
+
+  public int size() {
+    return doSize();
+  }
+
+  public Blob() {
+    this(JamiServiceJNI.new_Blob__SWIG_0(), true);
+  }
+
+  public Blob(Blob other) {
+    this(JamiServiceJNI.new_Blob__SWIG_1(Blob.getCPtr(other), other), true);
+  }
+
+  public long capacity() {
+    return JamiServiceJNI.Blob_capacity(swigCPtr, this);
+  }
+
+  public void reserve(long n) {
+    JamiServiceJNI.Blob_reserve(swigCPtr, this, n);
+  }
+
+  public boolean isEmpty() {
+    return JamiServiceJNI.Blob_isEmpty(swigCPtr, this);
+  }
+
+  public void clear() {
+    JamiServiceJNI.Blob_clear(swigCPtr, this);
+  }
+
+  public Blob(int count, byte value) {
+    this(JamiServiceJNI.new_Blob__SWIG_2(count, value), true);
+  }
+
+  private int doSize() {
+    return JamiServiceJNI.Blob_doSize(swigCPtr, this);
+  }
+
+  private void doAdd(byte x) {
+    JamiServiceJNI.Blob_doAdd__SWIG_0(swigCPtr, this, x);
+  }
+
+  private void doAdd(int index, byte x) {
+    JamiServiceJNI.Blob_doAdd__SWIG_1(swigCPtr, this, index, x);
+  }
+
+  private byte doRemove(int index) {
+    return JamiServiceJNI.Blob_doRemove(swigCPtr, this, index);
+  }
+
+  private byte doGet(int index) {
+    return JamiServiceJNI.Blob_doGet(swigCPtr, this, index);
+  }
+
+  private byte doSet(int index, byte val) {
+    return JamiServiceJNI.Blob_doSet(swigCPtr, this, index, val);
+  }
+
+  private void doRemoveRange(int fromIndex, int toIndex) {
+    JamiServiceJNI.Blob_doRemoveRange(swigCPtr, this, fromIndex, toIndex);
+  }
+
+}
diff --git a/ring-android/libjamiclient/src/main/java/net/jami/daemon/Callback.java b/ring-android/libjamiclient/src/main/java/net/jami/daemon/Callback.java
new file mode 100644
index 0000000000000000000000000000000000000000..54d8959c1ec4fae201b01c91cb2cd7a537d37c0d
--- /dev/null
+++ b/ring-android/libjamiclient/src/main/java/net/jami/daemon/Callback.java
@@ -0,0 +1,155 @@
+/* ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version 4.0.2
+ *
+ * Do not make changes to this file unless you know what you are doing--modify
+ * the SWIG interface file instead.
+ * ----------------------------------------------------------------------------- */
+
+package net.jami.daemon;
+
+public class Callback {
+  private transient long swigCPtr;
+  protected transient boolean swigCMemOwn;
+
+  protected Callback(long cPtr, boolean cMemoryOwn) {
+    swigCMemOwn = cMemoryOwn;
+    swigCPtr = cPtr;
+  }
+
+  protected static long getCPtr(Callback obj) {
+    return (obj == null) ? 0 : obj.swigCPtr;
+  }
+
+  @SuppressWarnings("deprecation")
+  protected void finalize() {
+    delete();
+  }
+
+  public synchronized void delete() {
+    if (swigCPtr != 0) {
+      if (swigCMemOwn) {
+        swigCMemOwn = false;
+        JamiServiceJNI.delete_Callback(swigCPtr);
+      }
+      swigCPtr = 0;
+    }
+  }
+
+  protected void swigDirectorDisconnect() {
+    swigCMemOwn = false;
+    delete();
+  }
+
+  public void swigReleaseOwnership() {
+    swigCMemOwn = false;
+    JamiServiceJNI.Callback_change_ownership(this, swigCPtr, false);
+  }
+
+  public void swigTakeOwnership() {
+    swigCMemOwn = true;
+    JamiServiceJNI.Callback_change_ownership(this, swigCPtr, true);
+  }
+
+  public void callStateChanged(String call_id, String state, int detail_code) {
+    if (getClass() == Callback.class) JamiServiceJNI.Callback_callStateChanged(swigCPtr, this, call_id, state, detail_code); else JamiServiceJNI.Callback_callStateChangedSwigExplicitCallback(swigCPtr, this, call_id, state, detail_code);
+  }
+
+  public void transferFailed() {
+    if (getClass() == Callback.class) JamiServiceJNI.Callback_transferFailed(swigCPtr, this); else JamiServiceJNI.Callback_transferFailedSwigExplicitCallback(swigCPtr, this);
+  }
+
+  public void transferSucceeded() {
+    if (getClass() == Callback.class) JamiServiceJNI.Callback_transferSucceeded(swigCPtr, this); else JamiServiceJNI.Callback_transferSucceededSwigExplicitCallback(swigCPtr, this);
+  }
+
+  public void recordPlaybackStopped(String path) {
+    if (getClass() == Callback.class) JamiServiceJNI.Callback_recordPlaybackStopped(swigCPtr, this, path); else JamiServiceJNI.Callback_recordPlaybackStoppedSwigExplicitCallback(swigCPtr, this, path);
+  }
+
+  public void voiceMailNotify(String accountId, int newCount, int oldCount, int urgentCount) {
+    if (getClass() == Callback.class) JamiServiceJNI.Callback_voiceMailNotify(swigCPtr, this, accountId, newCount, oldCount, urgentCount); else JamiServiceJNI.Callback_voiceMailNotifySwigExplicitCallback(swigCPtr, this, accountId, newCount, oldCount, urgentCount);
+  }
+
+  public void incomingMessage(String id, String from, StringMap messages) {
+    if (getClass() == Callback.class) JamiServiceJNI.Callback_incomingMessage(swigCPtr, this, id, from, StringMap.getCPtr(messages), messages); else JamiServiceJNI.Callback_incomingMessageSwigExplicitCallback(swigCPtr, this, id, from, StringMap.getCPtr(messages), messages);
+  }
+
+  public void incomingCall(String account_id, String call_id, String from) {
+    if (getClass() == Callback.class) JamiServiceJNI.Callback_incomingCall(swigCPtr, this, account_id, call_id, from); else JamiServiceJNI.Callback_incomingCallSwigExplicitCallback(swigCPtr, this, account_id, call_id, from);
+  }
+
+  public void incomingCallWithMedia(String account_id, String call_id, String from, VectMap mediaList) {
+    if (getClass() == Callback.class) JamiServiceJNI.Callback_incomingCallWithMedia(swigCPtr, this, account_id, call_id, from, VectMap.getCPtr(mediaList), mediaList); else JamiServiceJNI.Callback_incomingCallWithMediaSwigExplicitCallback(swigCPtr, this, account_id, call_id, from, VectMap.getCPtr(mediaList), mediaList);
+  }
+
+  public void mediaChangeRequested(String account_id, String call_id, VectMap mediaList) {
+    if (getClass() == Callback.class) JamiServiceJNI.Callback_mediaChangeRequested(swigCPtr, this, account_id, call_id, VectMap.getCPtr(mediaList), mediaList); else JamiServiceJNI.Callback_mediaChangeRequestedSwigExplicitCallback(swigCPtr, this, account_id, call_id, VectMap.getCPtr(mediaList), mediaList);
+  }
+
+  public void recordPlaybackFilepath(String id, String filename) {
+    if (getClass() == Callback.class) JamiServiceJNI.Callback_recordPlaybackFilepath(swigCPtr, this, id, filename); else JamiServiceJNI.Callback_recordPlaybackFilepathSwigExplicitCallback(swigCPtr, this, id, filename);
+  }
+
+  public void conferenceCreated(String conf_id) {
+    if (getClass() == Callback.class) JamiServiceJNI.Callback_conferenceCreated(swigCPtr, this, conf_id); else JamiServiceJNI.Callback_conferenceCreatedSwigExplicitCallback(swigCPtr, this, conf_id);
+  }
+
+  public void conferenceChanged(String conf_id, String state) {
+    if (getClass() == Callback.class) JamiServiceJNI.Callback_conferenceChanged(swigCPtr, this, conf_id, state); else JamiServiceJNI.Callback_conferenceChangedSwigExplicitCallback(swigCPtr, this, conf_id, state);
+  }
+
+  public void conferenceRemoved(String conf_id) {
+    if (getClass() == Callback.class) JamiServiceJNI.Callback_conferenceRemoved(swigCPtr, this, conf_id); else JamiServiceJNI.Callback_conferenceRemovedSwigExplicitCallback(swigCPtr, this, conf_id);
+  }
+
+  public void updatePlaybackScale(String filepath, int position, int scale) {
+    if (getClass() == Callback.class) JamiServiceJNI.Callback_updatePlaybackScale(swigCPtr, this, filepath, position, scale); else JamiServiceJNI.Callback_updatePlaybackScaleSwigExplicitCallback(swigCPtr, this, filepath, position, scale);
+  }
+
+  public void newCall(String account_id, String call_id, String to) {
+    if (getClass() == Callback.class) JamiServiceJNI.Callback_newCall(swigCPtr, this, account_id, call_id, to); else JamiServiceJNI.Callback_newCallSwigExplicitCallback(swigCPtr, this, account_id, call_id, to);
+  }
+
+  public void sipCallStateChange(String call_id, String state, int code) {
+    if (getClass() == Callback.class) JamiServiceJNI.Callback_sipCallStateChange(swigCPtr, this, call_id, state, code); else JamiServiceJNI.Callback_sipCallStateChangeSwigExplicitCallback(swigCPtr, this, call_id, state, code);
+  }
+
+  public void recordingStateChanged(String call_id, int code) {
+    if (getClass() == Callback.class) JamiServiceJNI.Callback_recordingStateChanged(swigCPtr, this, call_id, code); else JamiServiceJNI.Callback_recordingStateChangedSwigExplicitCallback(swigCPtr, this, call_id, code);
+  }
+
+  public void recordStateChange(String call_id, int state) {
+    if (getClass() == Callback.class) JamiServiceJNI.Callback_recordStateChange(swigCPtr, this, call_id, state); else JamiServiceJNI.Callback_recordStateChangeSwigExplicitCallback(swigCPtr, this, call_id, state);
+  }
+
+  public void onRtcpReportReceived(String call_id, IntegerMap stats) {
+    if (getClass() == Callback.class) JamiServiceJNI.Callback_onRtcpReportReceived(swigCPtr, this, call_id, IntegerMap.getCPtr(stats), stats); else JamiServiceJNI.Callback_onRtcpReportReceivedSwigExplicitCallback(swigCPtr, this, call_id, IntegerMap.getCPtr(stats), stats);
+  }
+
+  public void onConferenceInfosUpdated(String confId, VectMap infos) {
+    if (getClass() == Callback.class) JamiServiceJNI.Callback_onConferenceInfosUpdated(swigCPtr, this, confId, VectMap.getCPtr(infos), infos); else JamiServiceJNI.Callback_onConferenceInfosUpdatedSwigExplicitCallback(swigCPtr, this, confId, VectMap.getCPtr(infos), infos);
+  }
+
+  public void peerHold(String call_id, boolean holding) {
+    if (getClass() == Callback.class) JamiServiceJNI.Callback_peerHold(swigCPtr, this, call_id, holding); else JamiServiceJNI.Callback_peerHoldSwigExplicitCallback(swigCPtr, this, call_id, holding);
+  }
+
+  public void connectionUpdate(String id, int state) {
+    if (getClass() == Callback.class) JamiServiceJNI.Callback_connectionUpdate(swigCPtr, this, id, state); else JamiServiceJNI.Callback_connectionUpdateSwigExplicitCallback(swigCPtr, this, id, state);
+  }
+
+  public void remoteRecordingChanged(String call_id, String peer_number, boolean state) {
+    if (getClass() == Callback.class) JamiServiceJNI.Callback_remoteRecordingChanged(swigCPtr, this, call_id, peer_number, state); else JamiServiceJNI.Callback_remoteRecordingChangedSwigExplicitCallback(swigCPtr, this, call_id, peer_number, state);
+  }
+
+  public void mediaNegotiationStatus(String call_id, String event, VectMap mediaList) {
+    if (getClass() == Callback.class) JamiServiceJNI.Callback_mediaNegotiationStatus(swigCPtr, this, call_id, event, VectMap.getCPtr(mediaList), mediaList); else JamiServiceJNI.Callback_mediaNegotiationStatusSwigExplicitCallback(swigCPtr, this, call_id, event, VectMap.getCPtr(mediaList), mediaList);
+  }
+
+  public Callback() {
+    this(JamiServiceJNI.new_Callback(), true);
+    JamiServiceJNI.Callback_director_connect(this, swigCPtr, true, true);
+  }
+
+}
diff --git a/ring-android/libjamiclient/src/main/java/net/jami/daemon/ConfigurationCallback.java b/ring-android/libjamiclient/src/main/java/net/jami/daemon/ConfigurationCallback.java
new file mode 100644
index 0000000000000000000000000000000000000000..d99c15607e74b351e10b65df55cf0e086f5591aa
--- /dev/null
+++ b/ring-android/libjamiclient/src/main/java/net/jami/daemon/ConfigurationCallback.java
@@ -0,0 +1,195 @@
+/* ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version 4.0.2
+ *
+ * Do not make changes to this file unless you know what you are doing--modify
+ * the SWIG interface file instead.
+ * ----------------------------------------------------------------------------- */
+
+package net.jami.daemon;
+
+public class ConfigurationCallback {
+  private transient long swigCPtr;
+  protected transient boolean swigCMemOwn;
+
+  protected ConfigurationCallback(long cPtr, boolean cMemoryOwn) {
+    swigCMemOwn = cMemoryOwn;
+    swigCPtr = cPtr;
+  }
+
+  protected static long getCPtr(ConfigurationCallback obj) {
+    return (obj == null) ? 0 : obj.swigCPtr;
+  }
+
+  @SuppressWarnings("deprecation")
+  protected void finalize() {
+    delete();
+  }
+
+  public synchronized void delete() {
+    if (swigCPtr != 0) {
+      if (swigCMemOwn) {
+        swigCMemOwn = false;
+        JamiServiceJNI.delete_ConfigurationCallback(swigCPtr);
+      }
+      swigCPtr = 0;
+    }
+  }
+
+  protected void swigDirectorDisconnect() {
+    swigCMemOwn = false;
+    delete();
+  }
+
+  public void swigReleaseOwnership() {
+    swigCMemOwn = false;
+    JamiServiceJNI.ConfigurationCallback_change_ownership(this, swigCPtr, false);
+  }
+
+  public void swigTakeOwnership() {
+    swigCMemOwn = true;
+    JamiServiceJNI.ConfigurationCallback_change_ownership(this, swigCPtr, true);
+  }
+
+  public void volumeChanged(String device, int value) {
+    if (getClass() == ConfigurationCallback.class) JamiServiceJNI.ConfigurationCallback_volumeChanged(swigCPtr, this, device, value); else JamiServiceJNI.ConfigurationCallback_volumeChangedSwigExplicitConfigurationCallback(swigCPtr, this, device, value);
+  }
+
+  public void accountsChanged() {
+    if (getClass() == ConfigurationCallback.class) JamiServiceJNI.ConfigurationCallback_accountsChanged(swigCPtr, this); else JamiServiceJNI.ConfigurationCallback_accountsChangedSwigExplicitConfigurationCallback(swigCPtr, this);
+  }
+
+  public void historyChanged() {
+    if (getClass() == ConfigurationCallback.class) JamiServiceJNI.ConfigurationCallback_historyChanged(swigCPtr, this); else JamiServiceJNI.ConfigurationCallback_historyChangedSwigExplicitConfigurationCallback(swigCPtr, this);
+  }
+
+  public void stunStatusFailure(String account_id) {
+    if (getClass() == ConfigurationCallback.class) JamiServiceJNI.ConfigurationCallback_stunStatusFailure(swigCPtr, this, account_id); else JamiServiceJNI.ConfigurationCallback_stunStatusFailureSwigExplicitConfigurationCallback(swigCPtr, this, account_id);
+  }
+
+  public void accountDetailsChanged(String account_id, StringMap details) {
+    if (getClass() == ConfigurationCallback.class) JamiServiceJNI.ConfigurationCallback_accountDetailsChanged(swigCPtr, this, account_id, StringMap.getCPtr(details), details); else JamiServiceJNI.ConfigurationCallback_accountDetailsChangedSwigExplicitConfigurationCallback(swigCPtr, this, account_id, StringMap.getCPtr(details), details);
+  }
+
+  public void profileReceived(String arg0, String arg1, String arg2) {
+    if (getClass() == ConfigurationCallback.class) JamiServiceJNI.ConfigurationCallback_profileReceived(swigCPtr, this, arg0, arg1, arg2); else JamiServiceJNI.ConfigurationCallback_profileReceivedSwigExplicitConfigurationCallback(swigCPtr, this, arg0, arg1, arg2);
+  }
+
+  public void registrationStateChanged(String account_id, String state, int code, String detail_str) {
+    if (getClass() == ConfigurationCallback.class) JamiServiceJNI.ConfigurationCallback_registrationStateChanged(swigCPtr, this, account_id, state, code, detail_str); else JamiServiceJNI.ConfigurationCallback_registrationStateChangedSwigExplicitConfigurationCallback(swigCPtr, this, account_id, state, code, detail_str);
+  }
+
+  public void volatileAccountDetailsChanged(String account_id, StringMap details) {
+    if (getClass() == ConfigurationCallback.class) JamiServiceJNI.ConfigurationCallback_volatileAccountDetailsChanged(swigCPtr, this, account_id, StringMap.getCPtr(details), details); else JamiServiceJNI.ConfigurationCallback_volatileAccountDetailsChangedSwigExplicitConfigurationCallback(swigCPtr, this, account_id, StringMap.getCPtr(details), details);
+  }
+
+  public void incomingAccountMessage(String arg0, String arg1, String arg2, StringMap arg3) {
+    if (getClass() == ConfigurationCallback.class) JamiServiceJNI.ConfigurationCallback_incomingAccountMessage(swigCPtr, this, arg0, arg1, arg2, StringMap.getCPtr(arg3), arg3); else JamiServiceJNI.ConfigurationCallback_incomingAccountMessageSwigExplicitConfigurationCallback(swigCPtr, this, arg0, arg1, arg2, StringMap.getCPtr(arg3), arg3);
+  }
+
+  public void accountMessageStatusChanged(String arg0, String arg1, String arg2, String arg3, int arg4) {
+    if (getClass() == ConfigurationCallback.class) JamiServiceJNI.ConfigurationCallback_accountMessageStatusChanged(swigCPtr, this, arg0, arg1, arg2, arg3, arg4); else JamiServiceJNI.ConfigurationCallback_accountMessageStatusChangedSwigExplicitConfigurationCallback(swigCPtr, this, arg0, arg1, arg2, arg3, arg4);
+  }
+
+  public void composingStatusChanged(String arg0, String arg1, String arg2, int arg3) {
+    if (getClass() == ConfigurationCallback.class) JamiServiceJNI.ConfigurationCallback_composingStatusChanged(swigCPtr, this, arg0, arg1, arg2, arg3); else JamiServiceJNI.ConfigurationCallback_composingStatusChangedSwigExplicitConfigurationCallback(swigCPtr, this, arg0, arg1, arg2, arg3);
+  }
+
+  public void knownDevicesChanged(String arg0, StringMap arg1) {
+    if (getClass() == ConfigurationCallback.class) JamiServiceJNI.ConfigurationCallback_knownDevicesChanged(swigCPtr, this, arg0, StringMap.getCPtr(arg1), arg1); else JamiServiceJNI.ConfigurationCallback_knownDevicesChangedSwigExplicitConfigurationCallback(swigCPtr, this, arg0, StringMap.getCPtr(arg1), arg1);
+  }
+
+  public void exportOnRingEnded(String arg0, int arg1, String arg2) {
+    if (getClass() == ConfigurationCallback.class) JamiServiceJNI.ConfigurationCallback_exportOnRingEnded(swigCPtr, this, arg0, arg1, arg2); else JamiServiceJNI.ConfigurationCallback_exportOnRingEndedSwigExplicitConfigurationCallback(swigCPtr, this, arg0, arg1, arg2);
+  }
+
+  public void incomingTrustRequest(String arg0, String arg1, String arg2, Blob arg3, long received) {
+    if (getClass() == ConfigurationCallback.class) JamiServiceJNI.ConfigurationCallback_incomingTrustRequest(swigCPtr, this, arg0, arg1, arg2, Blob.getCPtr(arg3), arg3, received); else JamiServiceJNI.ConfigurationCallback_incomingTrustRequestSwigExplicitConfigurationCallback(swigCPtr, this, arg0, arg1, arg2, Blob.getCPtr(arg3), arg3, received);
+  }
+
+  public void contactAdded(String arg0, String arg1, boolean confirmed) {
+    if (getClass() == ConfigurationCallback.class) JamiServiceJNI.ConfigurationCallback_contactAdded(swigCPtr, this, arg0, arg1, confirmed); else JamiServiceJNI.ConfigurationCallback_contactAddedSwigExplicitConfigurationCallback(swigCPtr, this, arg0, arg1, confirmed);
+  }
+
+  public void contactRemoved(String arg0, String arg1, boolean banned) {
+    if (getClass() == ConfigurationCallback.class) JamiServiceJNI.ConfigurationCallback_contactRemoved(swigCPtr, this, arg0, arg1, banned); else JamiServiceJNI.ConfigurationCallback_contactRemovedSwigExplicitConfigurationCallback(swigCPtr, this, arg0, arg1, banned);
+  }
+
+  public void certificatePinned(String arg0) {
+    if (getClass() == ConfigurationCallback.class) JamiServiceJNI.ConfigurationCallback_certificatePinned(swigCPtr, this, arg0); else JamiServiceJNI.ConfigurationCallback_certificatePinnedSwigExplicitConfigurationCallback(swigCPtr, this, arg0);
+  }
+
+  public void certificatePathPinned(String arg0, StringVect arg1) {
+    if (getClass() == ConfigurationCallback.class) JamiServiceJNI.ConfigurationCallback_certificatePathPinned(swigCPtr, this, arg0, StringVect.getCPtr(arg1), arg1); else JamiServiceJNI.ConfigurationCallback_certificatePathPinnedSwigExplicitConfigurationCallback(swigCPtr, this, arg0, StringVect.getCPtr(arg1), arg1);
+  }
+
+  public void certificateExpired(String arg0) {
+    if (getClass() == ConfigurationCallback.class) JamiServiceJNI.ConfigurationCallback_certificateExpired(swigCPtr, this, arg0); else JamiServiceJNI.ConfigurationCallback_certificateExpiredSwigExplicitConfigurationCallback(swigCPtr, this, arg0);
+  }
+
+  public void certificateStateChanged(String arg0, String arg1, String arg2) {
+    if (getClass() == ConfigurationCallback.class) JamiServiceJNI.ConfigurationCallback_certificateStateChanged(swigCPtr, this, arg0, arg1, arg2); else JamiServiceJNI.ConfigurationCallback_certificateStateChangedSwigExplicitConfigurationCallback(swigCPtr, this, arg0, arg1, arg2);
+  }
+
+  public void errorAlert(int alert) {
+    if (getClass() == ConfigurationCallback.class) JamiServiceJNI.ConfigurationCallback_errorAlert(swigCPtr, this, alert); else JamiServiceJNI.ConfigurationCallback_errorAlertSwigExplicitConfigurationCallback(swigCPtr, this, alert);
+  }
+
+  public void getHardwareAudioFormat(IntVect arg0) {
+    if (getClass() == ConfigurationCallback.class) JamiServiceJNI.ConfigurationCallback_getHardwareAudioFormat(swigCPtr, this, IntVect.getCPtr(arg0), arg0); else JamiServiceJNI.ConfigurationCallback_getHardwareAudioFormatSwigExplicitConfigurationCallback(swigCPtr, this, IntVect.getCPtr(arg0), arg0);
+  }
+
+  public void getAppDataPath(String arg0, StringVect arg1) {
+    if (getClass() == ConfigurationCallback.class) JamiServiceJNI.ConfigurationCallback_getAppDataPath(swigCPtr, this, arg0, StringVect.getCPtr(arg1), arg1); else JamiServiceJNI.ConfigurationCallback_getAppDataPathSwigExplicitConfigurationCallback(swigCPtr, this, arg0, StringVect.getCPtr(arg1), arg1);
+  }
+
+  public void getDeviceName(StringVect arg0) {
+    if (getClass() == ConfigurationCallback.class) JamiServiceJNI.ConfigurationCallback_getDeviceName(swigCPtr, this, StringVect.getCPtr(arg0), arg0); else JamiServiceJNI.ConfigurationCallback_getDeviceNameSwigExplicitConfigurationCallback(swigCPtr, this, StringVect.getCPtr(arg0), arg0);
+  }
+
+  public void nameRegistrationEnded(String arg0, int state, String arg2) {
+    if (getClass() == ConfigurationCallback.class) JamiServiceJNI.ConfigurationCallback_nameRegistrationEnded(swigCPtr, this, arg0, state, arg2); else JamiServiceJNI.ConfigurationCallback_nameRegistrationEndedSwigExplicitConfigurationCallback(swigCPtr, this, arg0, state, arg2);
+  }
+
+  public void registeredNameFound(String arg0, int state, String arg2, String arg3) {
+    if (getClass() == ConfigurationCallback.class) JamiServiceJNI.ConfigurationCallback_registeredNameFound(swigCPtr, this, arg0, state, arg2, arg3); else JamiServiceJNI.ConfigurationCallback_registeredNameFoundSwigExplicitConfigurationCallback(swigCPtr, this, arg0, state, arg2, arg3);
+  }
+
+  public void userSearchEnded(String arg0, int state, String arg2, VectMap arg3) {
+    if (getClass() == ConfigurationCallback.class) JamiServiceJNI.ConfigurationCallback_userSearchEnded(swigCPtr, this, arg0, state, arg2, VectMap.getCPtr(arg3), arg3); else JamiServiceJNI.ConfigurationCallback_userSearchEndedSwigExplicitConfigurationCallback(swigCPtr, this, arg0, state, arg2, VectMap.getCPtr(arg3), arg3);
+  }
+
+  public void migrationEnded(String arg0, String arg1) {
+    if (getClass() == ConfigurationCallback.class) JamiServiceJNI.ConfigurationCallback_migrationEnded(swigCPtr, this, arg0, arg1); else JamiServiceJNI.ConfigurationCallback_migrationEndedSwigExplicitConfigurationCallback(swigCPtr, this, arg0, arg1);
+  }
+
+  public void deviceRevocationEnded(String arg0, String arg1, int arg2) {
+    if (getClass() == ConfigurationCallback.class) JamiServiceJNI.ConfigurationCallback_deviceRevocationEnded(swigCPtr, this, arg0, arg1, arg2); else JamiServiceJNI.ConfigurationCallback_deviceRevocationEndedSwigExplicitConfigurationCallback(swigCPtr, this, arg0, arg1, arg2);
+  }
+
+  public void accountProfileReceived(String arg0, String arg1, String arg2) {
+    if (getClass() == ConfigurationCallback.class) JamiServiceJNI.ConfigurationCallback_accountProfileReceived(swigCPtr, this, arg0, arg1, arg2); else JamiServiceJNI.ConfigurationCallback_accountProfileReceivedSwigExplicitConfigurationCallback(swigCPtr, this, arg0, arg1, arg2);
+  }
+
+  public void hardwareDecodingChanged(boolean arg0) {
+    if (getClass() == ConfigurationCallback.class) JamiServiceJNI.ConfigurationCallback_hardwareDecodingChanged(swigCPtr, this, arg0); else JamiServiceJNI.ConfigurationCallback_hardwareDecodingChangedSwigExplicitConfigurationCallback(swigCPtr, this, arg0);
+  }
+
+  public void hardwareEncodingChanged(boolean arg0) {
+    if (getClass() == ConfigurationCallback.class) JamiServiceJNI.ConfigurationCallback_hardwareEncodingChanged(swigCPtr, this, arg0); else JamiServiceJNI.ConfigurationCallback_hardwareEncodingChangedSwigExplicitConfigurationCallback(swigCPtr, this, arg0);
+  }
+
+  public void audioMeter(String arg0, float arg1) {
+    if (getClass() == ConfigurationCallback.class) JamiServiceJNI.ConfigurationCallback_audioMeter(swigCPtr, this, arg0, arg1); else JamiServiceJNI.ConfigurationCallback_audioMeterSwigExplicitConfigurationCallback(swigCPtr, this, arg0, arg1);
+  }
+
+  public void messageSend(String arg0) {
+    if (getClass() == ConfigurationCallback.class) JamiServiceJNI.ConfigurationCallback_messageSend(swigCPtr, this, arg0); else JamiServiceJNI.ConfigurationCallback_messageSendSwigExplicitConfigurationCallback(swigCPtr, this, arg0);
+  }
+
+  public ConfigurationCallback() {
+    this(JamiServiceJNI.new_ConfigurationCallback(), true);
+    JamiServiceJNI.ConfigurationCallback_director_connect(this, swigCPtr, true, true);
+  }
+
+}
diff --git a/ring-android/libjamiclient/src/main/java/net/jami/daemon/ConversationCallback.java b/ring-android/libjamiclient/src/main/java/net/jami/daemon/ConversationCallback.java
new file mode 100644
index 0000000000000000000000000000000000000000..3e5f1ccfb79c6de353c39dda45f9f66aa1a1d9ae
--- /dev/null
+++ b/ring-android/libjamiclient/src/main/java/net/jami/daemon/ConversationCallback.java
@@ -0,0 +1,91 @@
+/* ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version 4.0.2
+ *
+ * Do not make changes to this file unless you know what you are doing--modify
+ * the SWIG interface file instead.
+ * ----------------------------------------------------------------------------- */
+
+package net.jami.daemon;
+
+public class ConversationCallback {
+  private transient long swigCPtr;
+  protected transient boolean swigCMemOwn;
+
+  protected ConversationCallback(long cPtr, boolean cMemoryOwn) {
+    swigCMemOwn = cMemoryOwn;
+    swigCPtr = cPtr;
+  }
+
+  protected static long getCPtr(ConversationCallback obj) {
+    return (obj == null) ? 0 : obj.swigCPtr;
+  }
+
+  @SuppressWarnings("deprecation")
+  protected void finalize() {
+    delete();
+  }
+
+  public synchronized void delete() {
+    if (swigCPtr != 0) {
+      if (swigCMemOwn) {
+        swigCMemOwn = false;
+        JamiServiceJNI.delete_ConversationCallback(swigCPtr);
+      }
+      swigCPtr = 0;
+    }
+  }
+
+  protected void swigDirectorDisconnect() {
+    swigCMemOwn = false;
+    delete();
+  }
+
+  public void swigReleaseOwnership() {
+    swigCMemOwn = false;
+    JamiServiceJNI.ConversationCallback_change_ownership(this, swigCPtr, false);
+  }
+
+  public void swigTakeOwnership() {
+    swigCMemOwn = true;
+    JamiServiceJNI.ConversationCallback_change_ownership(this, swigCPtr, true);
+  }
+
+  public void conversationLoaded(long arg0, String arg1, String arg2, VectMap arg3) {
+    if (getClass() == ConversationCallback.class) JamiServiceJNI.ConversationCallback_conversationLoaded(swigCPtr, this, arg0, arg1, arg2, VectMap.getCPtr(arg3), arg3); else JamiServiceJNI.ConversationCallback_conversationLoadedSwigExplicitConversationCallback(swigCPtr, this, arg0, arg1, arg2, VectMap.getCPtr(arg3), arg3);
+  }
+
+  public void messageReceived(String arg0, String arg1, StringMap arg2) {
+    if (getClass() == ConversationCallback.class) JamiServiceJNI.ConversationCallback_messageReceived(swigCPtr, this, arg0, arg1, StringMap.getCPtr(arg2), arg2); else JamiServiceJNI.ConversationCallback_messageReceivedSwigExplicitConversationCallback(swigCPtr, this, arg0, arg1, StringMap.getCPtr(arg2), arg2);
+  }
+
+  public void conversationRequestReceived(String arg0, String arg1, StringMap arg2) {
+    if (getClass() == ConversationCallback.class) JamiServiceJNI.ConversationCallback_conversationRequestReceived(swigCPtr, this, arg0, arg1, StringMap.getCPtr(arg2), arg2); else JamiServiceJNI.ConversationCallback_conversationRequestReceivedSwigExplicitConversationCallback(swigCPtr, this, arg0, arg1, StringMap.getCPtr(arg2), arg2);
+  }
+
+  public void conversationRequestDeclined(String arg0, String arg1) {
+    if (getClass() == ConversationCallback.class) JamiServiceJNI.ConversationCallback_conversationRequestDeclined(swigCPtr, this, arg0, arg1); else JamiServiceJNI.ConversationCallback_conversationRequestDeclinedSwigExplicitConversationCallback(swigCPtr, this, arg0, arg1);
+  }
+
+  public void conversationReady(String arg0, String arg1) {
+    if (getClass() == ConversationCallback.class) JamiServiceJNI.ConversationCallback_conversationReady(swigCPtr, this, arg0, arg1); else JamiServiceJNI.ConversationCallback_conversationReadySwigExplicitConversationCallback(swigCPtr, this, arg0, arg1);
+  }
+
+  public void conversationRemoved(String arg0, String arg1) {
+    if (getClass() == ConversationCallback.class) JamiServiceJNI.ConversationCallback_conversationRemoved(swigCPtr, this, arg0, arg1); else JamiServiceJNI.ConversationCallback_conversationRemovedSwigExplicitConversationCallback(swigCPtr, this, arg0, arg1);
+  }
+
+  public void conversationMemberEvent(String arg0, String arg1, String arg2, int arg3) {
+    if (getClass() == ConversationCallback.class) JamiServiceJNI.ConversationCallback_conversationMemberEvent(swigCPtr, this, arg0, arg1, arg2, arg3); else JamiServiceJNI.ConversationCallback_conversationMemberEventSwigExplicitConversationCallback(swigCPtr, this, arg0, arg1, arg2, arg3);
+  }
+
+  public void onConversationError(String arg0, String arg1, long arg2, String arg3) {
+    if (getClass() == ConversationCallback.class) JamiServiceJNI.ConversationCallback_onConversationError(swigCPtr, this, arg0, arg1, arg2, arg3); else JamiServiceJNI.ConversationCallback_onConversationErrorSwigExplicitConversationCallback(swigCPtr, this, arg0, arg1, arg2, arg3);
+  }
+
+  public ConversationCallback() {
+    this(JamiServiceJNI.new_ConversationCallback(), true);
+    JamiServiceJNI.ConversationCallback_director_connect(this, swigCPtr, true, true);
+  }
+
+}
diff --git a/ring-android/libjamiclient/src/main/java/net/jami/daemon/DataTransferCallback.java b/ring-android/libjamiclient/src/main/java/net/jami/daemon/DataTransferCallback.java
new file mode 100644
index 0000000000000000000000000000000000000000..56be43d19c48cef475b6904f77ca416a41c22b54
--- /dev/null
+++ b/ring-android/libjamiclient/src/main/java/net/jami/daemon/DataTransferCallback.java
@@ -0,0 +1,63 @@
+/* ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version 4.0.2
+ *
+ * Do not make changes to this file unless you know what you are doing--modify
+ * the SWIG interface file instead.
+ * ----------------------------------------------------------------------------- */
+
+package net.jami.daemon;
+
+public class DataTransferCallback {
+  private transient long swigCPtr;
+  protected transient boolean swigCMemOwn;
+
+  protected DataTransferCallback(long cPtr, boolean cMemoryOwn) {
+    swigCMemOwn = cMemoryOwn;
+    swigCPtr = cPtr;
+  }
+
+  protected static long getCPtr(DataTransferCallback obj) {
+    return (obj == null) ? 0 : obj.swigCPtr;
+  }
+
+  @SuppressWarnings("deprecation")
+  protected void finalize() {
+    delete();
+  }
+
+  public synchronized void delete() {
+    if (swigCPtr != 0) {
+      if (swigCMemOwn) {
+        swigCMemOwn = false;
+        JamiServiceJNI.delete_DataTransferCallback(swigCPtr);
+      }
+      swigCPtr = 0;
+    }
+  }
+
+  protected void swigDirectorDisconnect() {
+    swigCMemOwn = false;
+    delete();
+  }
+
+  public void swigReleaseOwnership() {
+    swigCMemOwn = false;
+    JamiServiceJNI.DataTransferCallback_change_ownership(this, swigCPtr, false);
+  }
+
+  public void swigTakeOwnership() {
+    swigCMemOwn = true;
+    JamiServiceJNI.DataTransferCallback_change_ownership(this, swigCPtr, true);
+  }
+
+  public void dataTransferEvent(String accountId, String conversationId, String interactionId, String fileId, int eventCode) {
+    if (getClass() == DataTransferCallback.class) JamiServiceJNI.DataTransferCallback_dataTransferEvent(swigCPtr, this, accountId, conversationId, interactionId, fileId, eventCode); else JamiServiceJNI.DataTransferCallback_dataTransferEventSwigExplicitDataTransferCallback(swigCPtr, this, accountId, conversationId, interactionId, fileId, eventCode);
+  }
+
+  public DataTransferCallback() {
+    this(JamiServiceJNI.new_DataTransferCallback(), true);
+    JamiServiceJNI.DataTransferCallback_director_connect(this, swigCPtr, true, true);
+  }
+
+}
diff --git a/ring-android/libjamiclient/src/main/java/net/jami/daemon/DataTransferInfo.java b/ring-android/libjamiclient/src/main/java/net/jami/daemon/DataTransferInfo.java
new file mode 100644
index 0000000000000000000000000000000000000000..c83ec764aa58deff000be6f082cd1b35bebf5434
--- /dev/null
+++ b/ring-android/libjamiclient/src/main/java/net/jami/daemon/DataTransferInfo.java
@@ -0,0 +1,131 @@
+/* ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version 4.0.2
+ *
+ * Do not make changes to this file unless you know what you are doing--modify
+ * the SWIG interface file instead.
+ * ----------------------------------------------------------------------------- */
+
+package net.jami.daemon;
+
+public class DataTransferInfo {
+  private transient long swigCPtr;
+  protected transient boolean swigCMemOwn;
+
+  protected DataTransferInfo(long cPtr, boolean cMemoryOwn) {
+    swigCMemOwn = cMemoryOwn;
+    swigCPtr = cPtr;
+  }
+
+  protected static long getCPtr(DataTransferInfo obj) {
+    return (obj == null) ? 0 : obj.swigCPtr;
+  }
+
+  @SuppressWarnings("deprecation")
+  protected void finalize() {
+    delete();
+  }
+
+  public synchronized void delete() {
+    if (swigCPtr != 0) {
+      if (swigCMemOwn) {
+        swigCMemOwn = false;
+        JamiServiceJNI.delete_DataTransferInfo(swigCPtr);
+      }
+      swigCPtr = 0;
+    }
+  }
+
+  public void setAccountId(String value) {
+    JamiServiceJNI.DataTransferInfo_accountId_set(swigCPtr, this, value);
+  }
+
+  public String getAccountId() {
+    return JamiServiceJNI.DataTransferInfo_accountId_get(swigCPtr, this);
+  }
+
+  public void setLastEvent(long value) {
+    JamiServiceJNI.DataTransferInfo_lastEvent_set(swigCPtr, this, value);
+  }
+
+  public long getLastEvent() {
+    return JamiServiceJNI.DataTransferInfo_lastEvent_get(swigCPtr, this);
+  }
+
+  public void setFlags(long value) {
+    JamiServiceJNI.DataTransferInfo_flags_set(swigCPtr, this, value);
+  }
+
+  public long getFlags() {
+    return JamiServiceJNI.DataTransferInfo_flags_get(swigCPtr, this);
+  }
+
+  public void setTotalSize(long value) {
+    JamiServiceJNI.DataTransferInfo_totalSize_set(swigCPtr, this, value);
+  }
+
+  public long getTotalSize() {
+    return JamiServiceJNI.DataTransferInfo_totalSize_get(swigCPtr, this);
+  }
+
+  public void setBytesProgress(long value) {
+    JamiServiceJNI.DataTransferInfo_bytesProgress_set(swigCPtr, this, value);
+  }
+
+  public long getBytesProgress() {
+    return JamiServiceJNI.DataTransferInfo_bytesProgress_get(swigCPtr, this);
+  }
+
+  public void setAuthor(String value) {
+    JamiServiceJNI.DataTransferInfo_author_set(swigCPtr, this, value);
+  }
+
+  public String getAuthor() {
+    return JamiServiceJNI.DataTransferInfo_author_get(swigCPtr, this);
+  }
+
+  public void setPeer(String value) {
+    JamiServiceJNI.DataTransferInfo_peer_set(swigCPtr, this, value);
+  }
+
+  public String getPeer() {
+    return JamiServiceJNI.DataTransferInfo_peer_get(swigCPtr, this);
+  }
+
+  public void setConversationId(String value) {
+    JamiServiceJNI.DataTransferInfo_conversationId_set(swigCPtr, this, value);
+  }
+
+  public String getConversationId() {
+    return JamiServiceJNI.DataTransferInfo_conversationId_get(swigCPtr, this);
+  }
+
+  public void setDisplayName(String value) {
+    JamiServiceJNI.DataTransferInfo_displayName_set(swigCPtr, this, value);
+  }
+
+  public String getDisplayName() {
+    return JamiServiceJNI.DataTransferInfo_displayName_get(swigCPtr, this);
+  }
+
+  public void setPath(String value) {
+    JamiServiceJNI.DataTransferInfo_path_set(swigCPtr, this, value);
+  }
+
+  public String getPath() {
+    return JamiServiceJNI.DataTransferInfo_path_get(swigCPtr, this);
+  }
+
+  public void setMimetype(String value) {
+    JamiServiceJNI.DataTransferInfo_mimetype_set(swigCPtr, this, value);
+  }
+
+  public String getMimetype() {
+    return JamiServiceJNI.DataTransferInfo_mimetype_get(swigCPtr, this);
+  }
+
+  public DataTransferInfo() {
+    this(JamiServiceJNI.new_DataTransferInfo(), true);
+  }
+
+}
diff --git a/ring-android/libjamiclient/src/main/java/net/jami/daemon/FloatVect.java b/ring-android/libjamiclient/src/main/java/net/jami/daemon/FloatVect.java
new file mode 100644
index 0000000000000000000000000000000000000000..b4d587c01d03b209300b63b0d73fcf4826ca4e90
--- /dev/null
+++ b/ring-android/libjamiclient/src/main/java/net/jami/daemon/FloatVect.java
@@ -0,0 +1,144 @@
+/* ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version 4.0.2
+ *
+ * Do not make changes to this file unless you know what you are doing--modify
+ * the SWIG interface file instead.
+ * ----------------------------------------------------------------------------- */
+
+package net.jami.daemon;
+
+public class FloatVect extends java.util.AbstractList<Float> implements java.util.RandomAccess {
+  private transient long swigCPtr;
+  protected transient boolean swigCMemOwn;
+
+  protected FloatVect(long cPtr, boolean cMemoryOwn) {
+    swigCMemOwn = cMemoryOwn;
+    swigCPtr = cPtr;
+  }
+
+  protected static long getCPtr(FloatVect obj) {
+    return (obj == null) ? 0 : obj.swigCPtr;
+  }
+
+  @SuppressWarnings("deprecation")
+  protected void finalize() {
+    delete();
+  }
+
+  public synchronized void delete() {
+    if (swigCPtr != 0) {
+      if (swigCMemOwn) {
+        swigCMemOwn = false;
+        JamiServiceJNI.delete_FloatVect(swigCPtr);
+      }
+      swigCPtr = 0;
+    }
+  }
+
+  public FloatVect(float[] initialElements) {
+    this();
+    reserve(initialElements.length);
+
+    for (float element : initialElements) {
+      add(element);
+    }
+  }
+
+  public FloatVect(Iterable<Float> initialElements) {
+    this();
+    for (float element : initialElements) {
+      add(element);
+    }
+  }
+
+  public Float get(int index) {
+    return doGet(index);
+  }
+
+  public Float set(int index, Float e) {
+    return doSet(index, e);
+  }
+
+  public boolean add(Float e) {
+    modCount++;
+    doAdd(e);
+    return true;
+  }
+
+  public void add(int index, Float e) {
+    modCount++;
+    doAdd(index, e);
+  }
+
+  public Float remove(int index) {
+    modCount++;
+    return doRemove(index);
+  }
+
+  protected void removeRange(int fromIndex, int toIndex) {
+    modCount++;
+    doRemoveRange(fromIndex, toIndex);
+  }
+
+  public int size() {
+    return doSize();
+  }
+
+  public FloatVect() {
+    this(JamiServiceJNI.new_FloatVect__SWIG_0(), true);
+  }
+
+  public FloatVect(FloatVect other) {
+    this(JamiServiceJNI.new_FloatVect__SWIG_1(FloatVect.getCPtr(other), other), true);
+  }
+
+  public long capacity() {
+    return JamiServiceJNI.FloatVect_capacity(swigCPtr, this);
+  }
+
+  public void reserve(long n) {
+    JamiServiceJNI.FloatVect_reserve(swigCPtr, this, n);
+  }
+
+  public boolean isEmpty() {
+    return JamiServiceJNI.FloatVect_isEmpty(swigCPtr, this);
+  }
+
+  public void clear() {
+    JamiServiceJNI.FloatVect_clear(swigCPtr, this);
+  }
+
+  public FloatVect(int count, float value) {
+    this(JamiServiceJNI.new_FloatVect__SWIG_2(count, value), true);
+  }
+
+  private int doSize() {
+    return JamiServiceJNI.FloatVect_doSize(swigCPtr, this);
+  }
+
+  private void doAdd(float x) {
+    JamiServiceJNI.FloatVect_doAdd__SWIG_0(swigCPtr, this, x);
+  }
+
+  private void doAdd(int index, float x) {
+    JamiServiceJNI.FloatVect_doAdd__SWIG_1(swigCPtr, this, index, x);
+  }
+
+  private float doRemove(int index) {
+    return JamiServiceJNI.FloatVect_doRemove(swigCPtr, this, index);
+  }
+
+  private float doGet(int index) {
+    return JamiServiceJNI.FloatVect_doGet(swigCPtr, this, index);
+  }
+
+  private float doSet(int index, float val) {
+    return JamiServiceJNI.FloatVect_doSet(swigCPtr, this, index, val);
+  }
+
+  private void doRemoveRange(int fromIndex, int toIndex) {
+    JamiServiceJNI.FloatVect_doRemoveRange(swigCPtr, this, fromIndex, toIndex);
+  }
+
+}
diff --git a/ring-android/libjamiclient/src/main/java/net/jami/daemon/IntVect.java b/ring-android/libjamiclient/src/main/java/net/jami/daemon/IntVect.java
new file mode 100644
index 0000000000000000000000000000000000000000..a8f0d142541988b4b64006891e4dd4a2b765f165
--- /dev/null
+++ b/ring-android/libjamiclient/src/main/java/net/jami/daemon/IntVect.java
@@ -0,0 +1,144 @@
+/* ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version 4.0.2
+ *
+ * Do not make changes to this file unless you know what you are doing--modify
+ * the SWIG interface file instead.
+ * ----------------------------------------------------------------------------- */
+
+package net.jami.daemon;
+
+public class IntVect extends java.util.AbstractList<Integer> implements java.util.RandomAccess {
+  private transient long swigCPtr;
+  protected transient boolean swigCMemOwn;
+
+  protected IntVect(long cPtr, boolean cMemoryOwn) {
+    swigCMemOwn = cMemoryOwn;
+    swigCPtr = cPtr;
+  }
+
+  protected static long getCPtr(IntVect obj) {
+    return (obj == null) ? 0 : obj.swigCPtr;
+  }
+
+  @SuppressWarnings("deprecation")
+  protected void finalize() {
+    delete();
+  }
+
+  public synchronized void delete() {
+    if (swigCPtr != 0) {
+      if (swigCMemOwn) {
+        swigCMemOwn = false;
+        JamiServiceJNI.delete_IntVect(swigCPtr);
+      }
+      swigCPtr = 0;
+    }
+  }
+
+  public IntVect(int[] initialElements) {
+    this();
+    reserve(initialElements.length);
+
+    for (int element : initialElements) {
+      add(element);
+    }
+  }
+
+  public IntVect(Iterable<Integer> initialElements) {
+    this();
+    for (int element : initialElements) {
+      add(element);
+    }
+  }
+
+  public Integer get(int index) {
+    return doGet(index);
+  }
+
+  public Integer set(int index, Integer e) {
+    return doSet(index, e);
+  }
+
+  public boolean add(Integer e) {
+    modCount++;
+    doAdd(e);
+    return true;
+  }
+
+  public void add(int index, Integer e) {
+    modCount++;
+    doAdd(index, e);
+  }
+
+  public Integer remove(int index) {
+    modCount++;
+    return doRemove(index);
+  }
+
+  protected void removeRange(int fromIndex, int toIndex) {
+    modCount++;
+    doRemoveRange(fromIndex, toIndex);
+  }
+
+  public int size() {
+    return doSize();
+  }
+
+  public IntVect() {
+    this(JamiServiceJNI.new_IntVect__SWIG_0(), true);
+  }
+
+  public IntVect(IntVect other) {
+    this(JamiServiceJNI.new_IntVect__SWIG_1(IntVect.getCPtr(other), other), true);
+  }
+
+  public long capacity() {
+    return JamiServiceJNI.IntVect_capacity(swigCPtr, this);
+  }
+
+  public void reserve(long n) {
+    JamiServiceJNI.IntVect_reserve(swigCPtr, this, n);
+  }
+
+  public boolean isEmpty() {
+    return JamiServiceJNI.IntVect_isEmpty(swigCPtr, this);
+  }
+
+  public void clear() {
+    JamiServiceJNI.IntVect_clear(swigCPtr, this);
+  }
+
+  public IntVect(int count, int value) {
+    this(JamiServiceJNI.new_IntVect__SWIG_2(count, value), true);
+  }
+
+  private int doSize() {
+    return JamiServiceJNI.IntVect_doSize(swigCPtr, this);
+  }
+
+  private void doAdd(int x) {
+    JamiServiceJNI.IntVect_doAdd__SWIG_0(swigCPtr, this, x);
+  }
+
+  private void doAdd(int index, int x) {
+    JamiServiceJNI.IntVect_doAdd__SWIG_1(swigCPtr, this, index, x);
+  }
+
+  private int doRemove(int index) {
+    return JamiServiceJNI.IntVect_doRemove(swigCPtr, this, index);
+  }
+
+  private int doGet(int index) {
+    return JamiServiceJNI.IntVect_doGet(swigCPtr, this, index);
+  }
+
+  private int doSet(int index, int val) {
+    return JamiServiceJNI.IntVect_doSet(swigCPtr, this, index, val);
+  }
+
+  private void doRemoveRange(int fromIndex, int toIndex) {
+    JamiServiceJNI.IntVect_doRemoveRange(swigCPtr, this, fromIndex, toIndex);
+  }
+
+}
diff --git a/ring-android/libjamiclient/src/main/java/net/jami/daemon/IntegerMap.java b/ring-android/libjamiclient/src/main/java/net/jami/daemon/IntegerMap.java
new file mode 100644
index 0000000000000000000000000000000000000000..c17f2ef4c43869dbb3aa8edd4e4489c1d13a238f
--- /dev/null
+++ b/ring-android/libjamiclient/src/main/java/net/jami/daemon/IntegerMap.java
@@ -0,0 +1,221 @@
+/* ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version 4.0.2
+ *
+ * Do not make changes to this file unless you know what you are doing--modify
+ * the SWIG interface file instead.
+ * ----------------------------------------------------------------------------- */
+
+package net.jami.daemon;
+
+public class IntegerMap extends java.util.AbstractMap<String, Integer> {
+  private transient long swigCPtr;
+  protected transient boolean swigCMemOwn;
+
+  protected IntegerMap(long cPtr, boolean cMemoryOwn) {
+    swigCMemOwn = cMemoryOwn;
+    swigCPtr = cPtr;
+  }
+
+  protected static long getCPtr(IntegerMap obj) {
+    return (obj == null) ? 0 : obj.swigCPtr;
+  }
+
+  @SuppressWarnings("deprecation")
+  protected void finalize() {
+    delete();
+  }
+
+  public synchronized void delete() {
+    if (swigCPtr != 0) {
+      if (swigCMemOwn) {
+        swigCMemOwn = false;
+        JamiServiceJNI.delete_IntegerMap(swigCPtr);
+      }
+      swigCPtr = 0;
+    }
+  }
+
+
+  public int size() {
+    return sizeImpl();
+  }
+
+  public boolean containsKey(java.lang.Object key) {
+    if (!(key instanceof String)) {
+      return false;
+    }
+
+    return containsImpl((String)key);
+  }
+
+  public Integer get(java.lang.Object key) {
+    if (!(key instanceof String)) {
+      return null;
+    }
+
+    Iterator itr = find((String) key);
+    if (itr.isNot(end())) {
+      return itr.getValue();
+    }
+
+    return null;
+  }
+
+  public Integer put(String key, Integer value) {
+    Iterator itr = find((String) key);
+    if (itr.isNot(end())) {
+      Integer oldValue = itr.getValue();
+      itr.setValue(value);
+      return oldValue;
+    } else {
+      putUnchecked(key, value);
+      return null;
+    }
+  }
+
+  public Integer remove(java.lang.Object key) {
+    if (!(key instanceof String)) {
+      return null;
+    }
+
+    Iterator itr = find((String) key);
+    if (itr.isNot(end())) {
+      Integer oldValue = itr.getValue();
+      removeUnchecked(itr);
+      return oldValue;
+    } else {
+      return null;
+    }
+  }
+
+  public java.util.Set<Entry<String, Integer>> entrySet() {
+    java.util.Set<Entry<String, Integer>> setToReturn =
+        new java.util.HashSet<Entry<String, Integer>>();
+
+    Iterator itr = begin();
+    final Iterator end = end();
+    while (itr.isNot(end)) {
+      setToReturn.add(new Entry<String, Integer>() {
+        private Iterator iterator;
+
+        private Entry<String, Integer> init(Iterator iterator) {
+          this.iterator = iterator;
+          return this;
+        }
+
+        public String getKey() {
+          return iterator.getKey();
+        }
+
+        public Integer getValue() {
+          return iterator.getValue();
+        }
+
+        public Integer setValue(Integer newValue) {
+          Integer oldValue = iterator.getValue();
+          iterator.setValue(newValue);
+          return oldValue;
+        }
+      }.init(itr));
+      itr = itr.getNextUnchecked();
+    }
+
+    return setToReturn;
+  }
+
+  public IntegerMap() {
+    this(JamiServiceJNI.new_IntegerMap__SWIG_0(), true);
+  }
+
+  public IntegerMap(IntegerMap other) {
+    this(JamiServiceJNI.new_IntegerMap__SWIG_1(IntegerMap.getCPtr(other), other), true);
+  }
+
+  static protected class Iterator {
+    private transient long swigCPtr;
+    protected transient boolean swigCMemOwn;
+  
+    protected Iterator(long cPtr, boolean cMemoryOwn) {
+      swigCMemOwn = cMemoryOwn;
+      swigCPtr = cPtr;
+    }
+  
+    protected static long getCPtr(Iterator obj) {
+      return (obj == null) ? 0 : obj.swigCPtr;
+    }
+  
+    @SuppressWarnings("deprecation")
+    protected void finalize() {
+      delete();
+    }
+  
+    public synchronized void delete() {
+      if (swigCPtr != 0) {
+        if (swigCMemOwn) {
+          swigCMemOwn = false;
+          JamiServiceJNI.delete_IntegerMap_Iterator(swigCPtr);
+        }
+        swigCPtr = 0;
+      }
+    }
+  
+    private IntegerMap.Iterator getNextUnchecked() {
+      return new IntegerMap.Iterator(JamiServiceJNI.IntegerMap_Iterator_getNextUnchecked(swigCPtr, this), true);
+    }
+  
+    private boolean isNot(IntegerMap.Iterator other) {
+      return JamiServiceJNI.IntegerMap_Iterator_isNot(swigCPtr, this, IntegerMap.Iterator.getCPtr(other), other);
+    }
+  
+    private String getKey() {
+      return JamiServiceJNI.IntegerMap_Iterator_getKey(swigCPtr, this);
+    }
+  
+    private int getValue() {
+      return JamiServiceJNI.IntegerMap_Iterator_getValue(swigCPtr, this);
+    }
+  
+    private void setValue(int newValue) {
+      JamiServiceJNI.IntegerMap_Iterator_setValue(swigCPtr, this, newValue);
+    }
+  
+  }
+
+  public boolean isEmpty() {
+    return JamiServiceJNI.IntegerMap_isEmpty(swigCPtr, this);
+  }
+
+  public void clear() {
+    JamiServiceJNI.IntegerMap_clear(swigCPtr, this);
+  }
+
+  private IntegerMap.Iterator find(String key) {
+    return new IntegerMap.Iterator(JamiServiceJNI.IntegerMap_find(swigCPtr, this, key), true);
+  }
+
+  private IntegerMap.Iterator begin() {
+    return new IntegerMap.Iterator(JamiServiceJNI.IntegerMap_begin(swigCPtr, this), true);
+  }
+
+  private IntegerMap.Iterator end() {
+    return new IntegerMap.Iterator(JamiServiceJNI.IntegerMap_end(swigCPtr, this), true);
+  }
+
+  private int sizeImpl() {
+    return JamiServiceJNI.IntegerMap_sizeImpl(swigCPtr, this);
+  }
+
+  private boolean containsImpl(String key) {
+    return JamiServiceJNI.IntegerMap_containsImpl(swigCPtr, this, key);
+  }
+
+  private void putUnchecked(String key, int value) {
+    JamiServiceJNI.IntegerMap_putUnchecked(swigCPtr, this, key, value);
+  }
+
+  private void removeUnchecked(IntegerMap.Iterator itr) {
+    JamiServiceJNI.IntegerMap_removeUnchecked(swigCPtr, this, IntegerMap.Iterator.getCPtr(itr), itr);
+  }
+
+}
diff --git a/ring-android/libjamiclient/src/main/java/net/jami/daemon/JamiService.java b/ring-android/libjamiclient/src/main/java/net/jami/daemon/JamiService.java
new file mode 100644
index 0000000000000000000000000000000000000000..3457e0579774fd02274e688cf191176b5fcd3e8d
--- /dev/null
+++ b/ring-android/libjamiclient/src/main/java/net/jami/daemon/JamiService.java
@@ -0,0 +1,968 @@
+/* ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version 4.0.2
+ *
+ * Do not make changes to this file unless you know what you are doing--modify
+ * the SWIG interface file instead.
+ * ----------------------------------------------------------------------------- */
+
+package net.jami.daemon;
+
+public class JamiService {
+  public static void fini() {
+    JamiServiceJNI.fini();
+  }
+
+  public static String placeCall(String accountID, String to, StringMap volatileCallDetails) {
+    return JamiServiceJNI.placeCall(accountID, to, StringMap.getCPtr(volatileCallDetails), volatileCallDetails);
+  }
+
+  public static String placeCallWithMedia(String accountID, String to, VectMap mediaList) {
+    return JamiServiceJNI.placeCallWithMedia(accountID, to, VectMap.getCPtr(mediaList), mediaList);
+  }
+
+  public static boolean requestMediaChange(String callID, VectMap mediaList) {
+    return JamiServiceJNI.requestMediaChange(callID, VectMap.getCPtr(mediaList), mediaList);
+  }
+
+  public static boolean refuse(String callID) {
+    return JamiServiceJNI.refuse(callID);
+  }
+
+  public static boolean accept(String callID) {
+    return JamiServiceJNI.accept(callID);
+  }
+
+  public static boolean acceptWithMedia(String callID, VectMap mediaList) {
+    return JamiServiceJNI.acceptWithMedia(callID, VectMap.getCPtr(mediaList), mediaList);
+  }
+
+  public static boolean answerMediaChangeRequest(String callID, VectMap mediaList) {
+    return JamiServiceJNI.answerMediaChangeRequest(callID, VectMap.getCPtr(mediaList), mediaList);
+  }
+
+  public static boolean hangUp(String callID) {
+    return JamiServiceJNI.hangUp(callID);
+  }
+
+  public static boolean hold(String callID) {
+    return JamiServiceJNI.hold(callID);
+  }
+
+  public static boolean unhold(String callID) {
+    return JamiServiceJNI.unhold(callID);
+  }
+
+  public static boolean muteLocalMedia(String callid, String mediaType, boolean mute) {
+    return JamiServiceJNI.muteLocalMedia(callid, mediaType, mute);
+  }
+
+  public static boolean transfer(String callID, String to) {
+    return JamiServiceJNI.transfer(callID, to);
+  }
+
+  public static boolean attendedTransfer(String transferID, String targetID) {
+    return JamiServiceJNI.attendedTransfer(transferID, targetID);
+  }
+
+  public static StringMap getCallDetails(String callID) {
+    return new StringMap(JamiServiceJNI.getCallDetails(callID), true);
+  }
+
+  public static StringVect getCallList() {
+    return new StringVect(JamiServiceJNI.getCallList(), true);
+  }
+
+  public static void removeConference(String conference_id) {
+    JamiServiceJNI.removeConference(conference_id);
+  }
+
+  public static boolean joinParticipant(String sel_callID, String drag_callID) {
+    return JamiServiceJNI.joinParticipant(sel_callID, drag_callID);
+  }
+
+  public static void createConfFromParticipantList(StringVect participants) {
+    JamiServiceJNI.createConfFromParticipantList(StringVect.getCPtr(participants), participants);
+  }
+
+  public static void setConferenceLayout(String confId, int layout) {
+    JamiServiceJNI.setConferenceLayout(confId, layout);
+  }
+
+  public static void setActiveParticipant(String confId, String callId) {
+    JamiServiceJNI.setActiveParticipant(confId, callId);
+  }
+
+  public static boolean isConferenceParticipant(String call_id) {
+    return JamiServiceJNI.isConferenceParticipant(call_id);
+  }
+
+  public static boolean addParticipant(String callID, String confID) {
+    return JamiServiceJNI.addParticipant(callID, confID);
+  }
+
+  public static boolean addMainParticipant(String confID) {
+    return JamiServiceJNI.addMainParticipant(confID);
+  }
+
+  public static boolean detachParticipant(String callID) {
+    return JamiServiceJNI.detachParticipant(callID);
+  }
+
+  public static boolean joinConference(String sel_confID, String drag_confID) {
+    return JamiServiceJNI.joinConference(sel_confID, drag_confID);
+  }
+
+  public static boolean hangUpConference(String confID) {
+    return JamiServiceJNI.hangUpConference(confID);
+  }
+
+  public static boolean holdConference(String confID) {
+    return JamiServiceJNI.holdConference(confID);
+  }
+
+  public static boolean unholdConference(String confID) {
+    return JamiServiceJNI.unholdConference(confID);
+  }
+
+  public static StringVect getConferenceList() {
+    return new StringVect(JamiServiceJNI.getConferenceList(), true);
+  }
+
+  public static StringVect getParticipantList(String confID) {
+    return new StringVect(JamiServiceJNI.getParticipantList(confID), true);
+  }
+
+  public static StringVect getDisplayNames(String confID) {
+    return new StringVect(JamiServiceJNI.getDisplayNames(confID), true);
+  }
+
+  public static String getConferenceId(String callID) {
+    return JamiServiceJNI.getConferenceId(callID);
+  }
+
+  public static StringMap getConferenceDetails(String callID) {
+    return new StringMap(JamiServiceJNI.getConferenceDetails(callID), true);
+  }
+
+  public static VectMap getConferenceInfos(String confId) {
+    return new VectMap(JamiServiceJNI.getConferenceInfos(confId), true);
+  }
+
+  public static void setModerator(String confId, String peerId, boolean state) {
+    JamiServiceJNI.setModerator(confId, peerId, state);
+  }
+
+  public static void muteParticipant(String confId, String peerId, boolean state) {
+    JamiServiceJNI.muteParticipant(confId, peerId, state);
+  }
+
+  public static void hangupParticipant(String confId, String peerId) {
+    JamiServiceJNI.hangupParticipant(confId, peerId);
+  }
+
+  public static boolean startRecordedFilePlayback(String filepath) {
+    return JamiServiceJNI.startRecordedFilePlayback(filepath);
+  }
+
+  public static void stopRecordedFilePlayback() {
+    JamiServiceJNI.stopRecordedFilePlayback();
+  }
+
+  public static boolean toggleRecording(String callID) {
+    return JamiServiceJNI.toggleRecording(callID);
+  }
+
+  public static void setRecording(String callID) {
+    JamiServiceJNI.setRecording(callID);
+  }
+
+  public static void recordPlaybackSeek(double value) {
+    JamiServiceJNI.recordPlaybackSeek(value);
+  }
+
+  public static boolean getIsRecording(String callID) {
+    return JamiServiceJNI.getIsRecording(callID);
+  }
+
+  public static String getCurrentAudioCodecName(String callID) {
+    return JamiServiceJNI.getCurrentAudioCodecName(callID);
+  }
+
+  public static void playDTMF(String key) {
+    JamiServiceJNI.playDTMF(key);
+  }
+
+  public static void startTone(int start, int type) {
+    JamiServiceJNI.startTone(start, type);
+  }
+
+  public static boolean switchInput(String callID, String resource) {
+    return JamiServiceJNI.switchInput__SWIG_0(callID, resource);
+  }
+
+  public static void sendTextMessage(String callID, StringMap messages, String from, boolean isMixed) {
+    JamiServiceJNI.sendTextMessage(callID, StringMap.getCPtr(messages), messages, from, isMixed);
+  }
+
+  public static StringMap getAccountDetails(String accountID) {
+    return new StringMap(JamiServiceJNI.getAccountDetails(accountID), true);
+  }
+
+  public static StringMap getVolatileAccountDetails(String accountID) {
+    return new StringMap(JamiServiceJNI.getVolatileAccountDetails(accountID), true);
+  }
+
+  public static void setAccountDetails(String accountID, StringMap details) {
+    JamiServiceJNI.setAccountDetails(accountID, StringMap.getCPtr(details), details);
+  }
+
+  public static void setAccountActive(String accountID, boolean active) {
+    JamiServiceJNI.setAccountActive(accountID, active);
+  }
+
+  public static StringMap getAccountTemplate(String accountType) {
+    return new StringMap(JamiServiceJNI.getAccountTemplate(accountType), true);
+  }
+
+  public static void monitor(boolean continuous) {
+    JamiServiceJNI.monitor(continuous);
+  }
+
+  public static String addAccount(StringMap details) {
+    return JamiServiceJNI.addAccount(StringMap.getCPtr(details), details);
+  }
+
+  public static void removeAccount(String accountID) {
+    JamiServiceJNI.removeAccount(accountID);
+  }
+
+  public static StringVect getAccountList() {
+    return new StringVect(JamiServiceJNI.getAccountList(), true);
+  }
+
+  public static void sendRegister(String accountID, boolean enable) {
+    JamiServiceJNI.sendRegister(accountID, enable);
+  }
+
+  public static void registerAllAccounts() {
+    JamiServiceJNI.registerAllAccounts();
+  }
+
+  public static long sendAccountTextMessage(String accountID, String to, StringMap message) {
+    return JamiServiceJNI.sendAccountTextMessage(accountID, to, StringMap.getCPtr(message), message);
+  }
+
+  public static MessageVect getLastMessages(String accountID, long base_timestamp) {
+    return new MessageVect(JamiServiceJNI.getLastMessages(accountID, base_timestamp), true);
+  }
+
+  public static int getMessageStatus(long id) {
+    return JamiServiceJNI.getMessageStatus__SWIG_0(id);
+  }
+
+  public static int getMessageStatus(String accountID, long id) {
+    return JamiServiceJNI.getMessageStatus__SWIG_1(accountID, id);
+  }
+
+  public static boolean cancelMessage(String accountID, long id) {
+    return JamiServiceJNI.cancelMessage(accountID, id);
+  }
+
+  public static void setIsComposing(String accountID, String conversationUri, boolean isWriting) {
+    JamiServiceJNI.setIsComposing(accountID, conversationUri, isWriting);
+  }
+
+  public static boolean setMessageDisplayed(String accountID, String conversationUri, String messageId, int status) {
+    return JamiServiceJNI.setMessageDisplayed(accountID, conversationUri, messageId, status);
+  }
+
+  public static boolean changeAccountPassword(String accountID, String password_old, String password_new) {
+    return JamiServiceJNI.changeAccountPassword(accountID, password_old, password_new);
+  }
+
+  public static boolean lookupName(String account, String nameserver, String name) {
+    return JamiServiceJNI.lookupName(account, nameserver, name);
+  }
+
+  public static boolean lookupAddress(String account, String nameserver, String address) {
+    return JamiServiceJNI.lookupAddress(account, nameserver, address);
+  }
+
+  public static boolean registerName(String account, String password, String name) {
+    return JamiServiceJNI.registerName(account, password, name);
+  }
+
+  public static boolean searchUser(String account, String query) {
+    return JamiServiceJNI.searchUser(account, query);
+  }
+
+  public static UintVect getCodecList() {
+    return new UintVect(JamiServiceJNI.getCodecList(), true);
+  }
+
+  public static StringVect getSupportedTlsMethod() {
+    return new StringVect(JamiServiceJNI.getSupportedTlsMethod(), true);
+  }
+
+  public static StringVect getSupportedCiphers(String accountID) {
+    return new StringVect(JamiServiceJNI.getSupportedCiphers(accountID), true);
+  }
+
+  public static StringMap getCodecDetails(String accountID, long codecId) {
+    return new StringMap(JamiServiceJNI.getCodecDetails(accountID, codecId), true);
+  }
+
+  public static boolean setCodecDetails(String accountID, long codecId, StringMap details) {
+    return JamiServiceJNI.setCodecDetails(accountID, codecId, StringMap.getCPtr(details), details);
+  }
+
+  public static UintVect getActiveCodecList(String accountID) {
+    return new UintVect(JamiServiceJNI.getActiveCodecList(accountID), true);
+  }
+
+  public static boolean exportOnRing(String accountID, String password) {
+    return JamiServiceJNI.exportOnRing(accountID, password);
+  }
+
+  public static boolean exportToFile(String accountID, String destinationPath, String password) {
+    return JamiServiceJNI.exportToFile(accountID, destinationPath, password);
+  }
+
+  public static StringMap getKnownRingDevices(String accountID) {
+    return new StringMap(JamiServiceJNI.getKnownRingDevices(accountID), true);
+  }
+
+  public static boolean revokeDevice(String accountID, String password, String deviceID) {
+    return JamiServiceJNI.revokeDevice(accountID, password, deviceID);
+  }
+
+  public static void setActiveCodecList(String accountID, UintVect list) {
+    JamiServiceJNI.setActiveCodecList(accountID, UintVect.getCPtr(list), list);
+  }
+
+  public static StringVect getAudioPluginList() {
+    return new StringVect(JamiServiceJNI.getAudioPluginList(), true);
+  }
+
+  public static void setAudioPlugin(String audioPlugin) {
+    JamiServiceJNI.setAudioPlugin(audioPlugin);
+  }
+
+  public static StringVect getAudioOutputDeviceList() {
+    return new StringVect(JamiServiceJNI.getAudioOutputDeviceList(), true);
+  }
+
+  public static void setAudioOutputDevice(int index) {
+    JamiServiceJNI.setAudioOutputDevice(index);
+  }
+
+  public static void setAudioInputDevice(int index) {
+    JamiServiceJNI.setAudioInputDevice(index);
+  }
+
+  public static void setAudioRingtoneDevice(int index) {
+    JamiServiceJNI.setAudioRingtoneDevice(index);
+  }
+
+  public static StringVect getAudioInputDeviceList() {
+    return new StringVect(JamiServiceJNI.getAudioInputDeviceList(), true);
+  }
+
+  public static StringVect getCurrentAudioDevicesIndex() {
+    return new StringVect(JamiServiceJNI.getCurrentAudioDevicesIndex(), true);
+  }
+
+  public static int getAudioInputDeviceIndex(String name) {
+    return JamiServiceJNI.getAudioInputDeviceIndex(name);
+  }
+
+  public static int getAudioOutputDeviceIndex(String name) {
+    return JamiServiceJNI.getAudioOutputDeviceIndex(name);
+  }
+
+  public static String getCurrentAudioOutputPlugin() {
+    return JamiServiceJNI.getCurrentAudioOutputPlugin();
+  }
+
+  public static boolean getNoiseSuppressState() {
+    return JamiServiceJNI.getNoiseSuppressState();
+  }
+
+  public static void setNoiseSuppressState(boolean state) {
+    JamiServiceJNI.setNoiseSuppressState(state);
+  }
+
+  public static boolean isAgcEnabled() {
+    return JamiServiceJNI.isAgcEnabled();
+  }
+
+  public static void setAgcState(boolean enabled) {
+    JamiServiceJNI.setAgcState(enabled);
+  }
+
+  public static void muteDtmf(boolean mute) {
+    JamiServiceJNI.muteDtmf(mute);
+  }
+
+  public static boolean isDtmfMuted() {
+    return JamiServiceJNI.isDtmfMuted();
+  }
+
+  public static boolean isCaptureMuted() {
+    return JamiServiceJNI.isCaptureMuted();
+  }
+
+  public static void muteCapture(boolean mute) {
+    JamiServiceJNI.muteCapture(mute);
+  }
+
+  public static boolean isPlaybackMuted() {
+    return JamiServiceJNI.isPlaybackMuted();
+  }
+
+  public static void mutePlayback(boolean mute) {
+    JamiServiceJNI.mutePlayback(mute);
+  }
+
+  public static boolean isRingtoneMuted() {
+    return JamiServiceJNI.isRingtoneMuted();
+  }
+
+  public static void muteRingtone(boolean mute) {
+    JamiServiceJNI.muteRingtone(mute);
+  }
+
+  public static String getAudioManager() {
+    return JamiServiceJNI.getAudioManager();
+  }
+
+  public static boolean setAudioManager(String api) {
+    return JamiServiceJNI.setAudioManager(api);
+  }
+
+  public static String getRecordPath() {
+    return JamiServiceJNI.getRecordPath();
+  }
+
+  public static void setRecordPath(String recPath) {
+    JamiServiceJNI.setRecordPath(recPath);
+  }
+
+  public static boolean getIsAlwaysRecording() {
+    return JamiServiceJNI.getIsAlwaysRecording();
+  }
+
+  public static void setIsAlwaysRecording(boolean rec) {
+    JamiServiceJNI.setIsAlwaysRecording(rec);
+  }
+
+  public static boolean getRecordPreview() {
+    return JamiServiceJNI.getRecordPreview();
+  }
+
+  public static void setRecordPreview(boolean rec) {
+    JamiServiceJNI.setRecordPreview(rec);
+  }
+
+  public static int getRecordQuality() {
+    return JamiServiceJNI.getRecordQuality();
+  }
+
+  public static void setRecordQuality(int rec) {
+    JamiServiceJNI.setRecordQuality(rec);
+  }
+
+  public static void setHistoryLimit(int days) {
+    JamiServiceJNI.setHistoryLimit(days);
+  }
+
+  public static int getHistoryLimit() {
+    return JamiServiceJNI.getHistoryLimit();
+  }
+
+  public static void setRingingTimeout(int timeout) {
+    JamiServiceJNI.setRingingTimeout(timeout);
+  }
+
+  public static int getRingingTimeout() {
+    return JamiServiceJNI.getRingingTimeout();
+  }
+
+  public static void setAccountsOrder(String order) {
+    JamiServiceJNI.setAccountsOrder(order);
+  }
+
+  public static VectMap getCredentials(String accountID) {
+    return new VectMap(JamiServiceJNI.getCredentials(accountID), true);
+  }
+
+  public static void setCredentials(String accountID, VectMap details) {
+    JamiServiceJNI.setCredentials(accountID, VectMap.getCPtr(details), details);
+  }
+
+  public static String getAddrFromInterfaceName(String _interface) {
+    return JamiServiceJNI.getAddrFromInterfaceName(_interface);
+  }
+
+  public static StringVect getAllIpInterface() {
+    return new StringVect(JamiServiceJNI.getAllIpInterface(), true);
+  }
+
+  public static StringVect getAllIpInterfaceByName() {
+    return new StringVect(JamiServiceJNI.getAllIpInterfaceByName(), true);
+  }
+
+  public static StringMap getShortcuts() {
+    return new StringMap(JamiServiceJNI.getShortcuts(), true);
+  }
+
+  public static void setShortcuts(StringMap shortcutsMap) {
+    JamiServiceJNI.setShortcuts(StringMap.getCPtr(shortcutsMap), shortcutsMap);
+  }
+
+  public static void setVolume(String device, double value) {
+    JamiServiceJNI.setVolume(device, value);
+  }
+
+  public static double getVolume(String device) {
+    return JamiServiceJNI.getVolume(device);
+  }
+
+  public static StringMap validateCertificatePath(String accountId, String certificate, String privateKey, String privateKeyPassword, String caList) {
+    return new StringMap(JamiServiceJNI.validateCertificatePath(accountId, certificate, privateKey, privateKeyPassword, caList), true);
+  }
+
+  public static StringMap validateCertificate(String accountId, String certificate) {
+    return new StringMap(JamiServiceJNI.validateCertificate(accountId, certificate), true);
+  }
+
+  public static StringMap getCertificateDetails(String certificate) {
+    return new StringMap(JamiServiceJNI.getCertificateDetails(certificate), true);
+  }
+
+  public static StringMap getCertificateDetailsPath(String certificate, String privateKey, String privateKeyPass) {
+    return new StringMap(JamiServiceJNI.getCertificateDetailsPath(certificate, privateKey, privateKeyPass), true);
+  }
+
+  public static StringVect getPinnedCertificates() {
+    return new StringVect(JamiServiceJNI.getPinnedCertificates(), true);
+  }
+
+  public static StringVect pinCertificate(Blob certificate, boolean local) {
+    return new StringVect(JamiServiceJNI.pinCertificate(Blob.getCPtr(certificate), certificate, local), true);
+  }
+
+  public static boolean unpinCertificate(String certId) {
+    return JamiServiceJNI.unpinCertificate(certId);
+  }
+
+  public static void pinCertificatePath(String path) {
+    JamiServiceJNI.pinCertificatePath(path);
+  }
+
+  public static long unpinCertificatePath(String path) {
+    return JamiServiceJNI.unpinCertificatePath(path);
+  }
+
+  public static boolean pinRemoteCertificate(String accountId, String certId) {
+    return JamiServiceJNI.pinRemoteCertificate(accountId, certId);
+  }
+
+  public static boolean setCertificateStatus(String account, String certId, String status) {
+    return JamiServiceJNI.setCertificateStatus(account, certId, status);
+  }
+
+  public static StringVect getCertificatesByStatus(String account, String status) {
+    return new StringVect(JamiServiceJNI.getCertificatesByStatus(account, status), true);
+  }
+
+  public static VectMap getTrustRequests(String accountId) {
+    return new VectMap(JamiServiceJNI.getTrustRequests(accountId), true);
+  }
+
+  public static boolean acceptTrustRequest(String accountId, String from) {
+    return JamiServiceJNI.acceptTrustRequest(accountId, from);
+  }
+
+  public static boolean discardTrustRequest(String accountId, String from) {
+    return JamiServiceJNI.discardTrustRequest(accountId, from);
+  }
+
+  public static void sendTrustRequest(String accountId, String to, Blob payload) {
+    JamiServiceJNI.sendTrustRequest(accountId, to, Blob.getCPtr(payload), payload);
+  }
+
+  public static void addContact(String accountId, String uri) {
+    JamiServiceJNI.addContact(accountId, uri);
+  }
+
+  public static void removeContact(String accountId, String uri, boolean ban) {
+    JamiServiceJNI.removeContact(accountId, uri, ban);
+  }
+
+  public static VectMap getContacts(String accountId) {
+    return new VectMap(JamiServiceJNI.getContacts(accountId), true);
+  }
+
+  public static StringMap getContactDetails(String accountId, String uri) {
+    return new StringMap(JamiServiceJNI.getContactDetails(accountId, uri), true);
+  }
+
+  public static void connectivityChanged() {
+    JamiServiceJNI.connectivityChanged();
+  }
+
+  public static void enableProxyClient(String accountID, boolean enable) {
+    JamiServiceJNI.enableProxyClient(accountID, enable);
+  }
+
+  public static void setPushNotificationToken(String pushDeviceToken) {
+    JamiServiceJNI.setPushNotificationToken(pushDeviceToken);
+  }
+
+  public static void pushNotificationReceived(String from, StringMap data) {
+    JamiServiceJNI.pushNotificationReceived(from, StringMap.getCPtr(data), data);
+  }
+
+  public static boolean isAudioMeterActive(String id) {
+    return JamiServiceJNI.isAudioMeterActive(id);
+  }
+
+  public static void setAudioMeterState(String id, boolean state) {
+    JamiServiceJNI.setAudioMeterState(id, state);
+  }
+
+  public static void setDefaultModerator(String accountID, String peerURI, boolean state) {
+    JamiServiceJNI.setDefaultModerator(accountID, peerURI, state);
+  }
+
+  public static StringVect getDefaultModerators(String accountID) {
+    return new StringVect(JamiServiceJNI.getDefaultModerators(accountID), true);
+  }
+
+  public static void enableLocalModerators(String accountID, boolean isModEnabled) {
+    JamiServiceJNI.enableLocalModerators(accountID, isModEnabled);
+  }
+
+  public static boolean isLocalModeratorsEnabled(String accountID) {
+    return JamiServiceJNI.isLocalModeratorsEnabled(accountID);
+  }
+
+  public static void setAllModerators(String accountID, boolean allModerators) {
+    JamiServiceJNI.setAllModerators(accountID, allModerators);
+  }
+
+  public static boolean isAllModerators(String accountID) {
+    return JamiServiceJNI.isAllModerators(accountID);
+  }
+
+  public static void sendFile(String accountId, String conversationId, String path, String displayName, String parent) {
+    JamiServiceJNI.sendFile(accountId, conversationId, path, displayName, parent);
+  }
+
+  public static long sendFileLegacy(DataTransferInfo info, long[] id) {
+    return JamiServiceJNI.sendFileLegacy(DataTransferInfo.getCPtr(info), info, id);
+  }
+
+  public static long acceptFileTransfer(String accountId, String fileId, String file_path) {
+    return JamiServiceJNI.acceptFileTransfer(accountId, fileId, file_path);
+  }
+
+  public static long downloadFile(String accountId, String conversationId, String interactionId, String fileId, String path) {
+    return JamiServiceJNI.downloadFile(accountId, conversationId, interactionId, fileId, path);
+  }
+
+  public static long cancelDataTransfer(String accountId, String conversationId, String fileId) {
+    return JamiServiceJNI.cancelDataTransfer(accountId, conversationId, fileId);
+  }
+
+  public static long dataTransferInfo(String accountId, String fileId, DataTransferInfo info) {
+    return JamiServiceJNI.dataTransferInfo(accountId, fileId, DataTransferInfo.getCPtr(info), info);
+  }
+
+  public static long fileTransferInfo(String accountId, String conversationId, String fileId, String[] path_out, long[] total_out, long[] progress_out) {
+    return JamiServiceJNI.fileTransferInfo(accountId, conversationId, fileId, path_out, total_out, progress_out);
+  }
+
+  public static void publish(String accountID, boolean status, String note) {
+    JamiServiceJNI.publish(accountID, status, note);
+  }
+
+  public static void answerServerRequest(String uri, boolean flag) {
+    JamiServiceJNI.answerServerRequest(uri, flag);
+  }
+
+  public static void subscribeBuddy(String accountID, String uri, boolean flag) {
+    JamiServiceJNI.subscribeBuddy(accountID, uri, flag);
+  }
+
+  public static VectMap getSubscriptions(String accountID) {
+    return new VectMap(JamiServiceJNI.getSubscriptions(accountID), true);
+  }
+
+  public static void setSubscriptions(String accountID, StringVect uris) {
+    JamiServiceJNI.setSubscriptions(accountID, StringVect.getCPtr(uris), uris);
+  }
+
+  public static void setVideoFrame(byte[] arg0, int arg1, long arg2, int arg3, int arg4, int arg5) {
+    JamiServiceJNI.setVideoFrame(arg0, arg1, arg2, arg3, arg4, arg5);
+  }
+
+  public static long acquireNativeWindow(java.lang.Object arg0) {
+    return JamiServiceJNI.acquireNativeWindow(arg0);
+  }
+
+  public static void releaseNativeWindow(long arg0) {
+    JamiServiceJNI.releaseNativeWindow(arg0);
+  }
+
+  public static void setNativeWindowGeometry(long arg0, int arg1, int arg2) {
+    JamiServiceJNI.setNativeWindowGeometry(arg0, arg1, arg2);
+  }
+
+  public static void registerVideoCallback(String arg0, long arg1) {
+    JamiServiceJNI.registerVideoCallback(arg0, arg1);
+  }
+
+  public static void unregisterVideoCallback(String arg0, long arg1) {
+    JamiServiceJNI.unregisterVideoCallback(arg0, arg1);
+  }
+
+  public static void captureVideoFrame(java.lang.Object arg0, int arg1) {
+    JamiServiceJNI.captureVideoFrame(arg0, arg1);
+  }
+
+  public static void captureVideoPacket(java.lang.Object arg0, int arg1, int arg2, boolean arg3, long arg4, int arg5) {
+    JamiServiceJNI.captureVideoPacket(arg0, arg1, arg2, arg3, arg4, arg5);
+  }
+
+  public static void setDefaultDevice(String name) {
+    JamiServiceJNI.setDefaultDevice(name);
+  }
+
+  public static String getDefaultDevice() {
+    return JamiServiceJNI.getDefaultDevice();
+  }
+
+  public static void startCamera() {
+    JamiServiceJNI.startCamera();
+  }
+
+  public static void stopCamera() {
+    JamiServiceJNI.stopCamera();
+  }
+
+  public static boolean hasCameraStarted() {
+    return JamiServiceJNI.hasCameraStarted();
+  }
+
+  public static void startAudioDevice() {
+    JamiServiceJNI.startAudioDevice();
+  }
+
+  public static void stopAudioDevice() {
+    JamiServiceJNI.stopAudioDevice();
+  }
+
+  public static boolean switchInput(String resource) {
+    return JamiServiceJNI.switchInput__SWIG_1(resource);
+  }
+
+  public static boolean switchToCamera() {
+    return JamiServiceJNI.switchToCamera();
+  }
+
+  public static StringMap getSettings(String name) {
+    return new StringMap(JamiServiceJNI.getSettings(name), true);
+  }
+
+  public static void applySettings(String name, StringMap settings) {
+    JamiServiceJNI.applySettings(name, StringMap.getCPtr(settings), settings);
+  }
+
+  public static void addVideoDevice(String node) {
+    JamiServiceJNI.addVideoDevice(node);
+  }
+
+  public static void removeVideoDevice(String node) {
+    JamiServiceJNI.removeVideoDevice(node);
+  }
+
+  public static void setDeviceOrientation(String name, int angle) {
+    JamiServiceJNI.setDeviceOrientation(name, angle);
+  }
+
+  public static void registerSinkTarget(String sinkId, SWIGTYPE_p_DRing__SinkTarget target) {
+    JamiServiceJNI.registerSinkTarget(sinkId, SWIGTYPE_p_DRing__SinkTarget.getCPtr(target));
+  }
+
+  public static String startLocalRecorder(boolean audioOnly, String filepath) {
+    return JamiServiceJNI.startLocalRecorder(audioOnly, filepath);
+  }
+
+  public static void stopLocalRecorder(String filepath) {
+    JamiServiceJNI.stopLocalRecorder(filepath);
+  }
+
+  public static boolean getDecodingAccelerated() {
+    return JamiServiceJNI.getDecodingAccelerated();
+  }
+
+  public static void setDecodingAccelerated(boolean state) {
+    JamiServiceJNI.setDecodingAccelerated(state);
+  }
+
+  public static boolean getEncodingAccelerated() {
+    return JamiServiceJNI.getEncodingAccelerated();
+  }
+
+  public static void setEncodingAccelerated(boolean state) {
+    JamiServiceJNI.setEncodingAccelerated(state);
+  }
+
+  public static boolean loadPlugin(String path) {
+    return JamiServiceJNI.loadPlugin(path);
+  }
+
+  public static boolean unloadPlugin(String path) {
+    return JamiServiceJNI.unloadPlugin(path);
+  }
+
+  public static StringMap getPluginDetails(String path) {
+    return new StringMap(JamiServiceJNI.getPluginDetails(path), true);
+  }
+
+  public static VectMap getPluginPreferences(String path) {
+    return new VectMap(JamiServiceJNI.getPluginPreferences(path), true);
+  }
+
+  public static boolean setPluginPreference(String path, String key, String value) {
+    return JamiServiceJNI.setPluginPreference(path, key, value);
+  }
+
+  public static StringMap getPluginPreferencesValues(String path) {
+    return new StringMap(JamiServiceJNI.getPluginPreferencesValues(path), true);
+  }
+
+  public static boolean resetPluginPreferencesValues(String path) {
+    return JamiServiceJNI.resetPluginPreferencesValues(path);
+  }
+
+  public static StringVect getInstalledPlugins() {
+    return new StringVect(JamiServiceJNI.getInstalledPlugins(), true);
+  }
+
+  public static StringVect getLoadedPlugins() {
+    return new StringVect(JamiServiceJNI.getLoadedPlugins(), true);
+  }
+
+  public static int installPlugin(String jplPath, boolean force) {
+    return JamiServiceJNI.installPlugin(jplPath, force);
+  }
+
+  public static int uninstallPlugin(String pluginRootPath) {
+    return JamiServiceJNI.uninstallPlugin(pluginRootPath);
+  }
+
+  public static StringVect getCallMediaHandlers() {
+    return new StringVect(JamiServiceJNI.getCallMediaHandlers(), true);
+  }
+
+  public static StringVect getChatHandlers() {
+    return new StringVect(JamiServiceJNI.getChatHandlers(), true);
+  }
+
+  public static void toggleCallMediaHandler(String mediaHandlerId, String callId, boolean toggle) {
+    JamiServiceJNI.toggleCallMediaHandler(mediaHandlerId, callId, toggle);
+  }
+
+  public static void toggleChatHandler(String chatHandlerId, String accountId, String peerId, boolean toggle) {
+    JamiServiceJNI.toggleChatHandler(chatHandlerId, accountId, peerId, toggle);
+  }
+
+  public static StringMap getCallMediaHandlerDetails(String mediaHandlerId) {
+    return new StringMap(JamiServiceJNI.getCallMediaHandlerDetails(mediaHandlerId), true);
+  }
+
+  public static StringVect getCallMediaHandlerStatus(String callId) {
+    return new StringVect(JamiServiceJNI.getCallMediaHandlerStatus(callId), true);
+  }
+
+  public static StringMap getChatHandlerDetails(String chatHandlerId) {
+    return new StringMap(JamiServiceJNI.getChatHandlerDetails(chatHandlerId), true);
+  }
+
+  public static StringVect getChatHandlerStatus(String accountId, String peerId) {
+    return new StringVect(JamiServiceJNI.getChatHandlerStatus(accountId, peerId), true);
+  }
+
+  public static boolean getPluginsEnabled() {
+    return JamiServiceJNI.getPluginsEnabled();
+  }
+
+  public static void setPluginsEnabled(boolean state) {
+    JamiServiceJNI.setPluginsEnabled(state);
+  }
+
+  public static String startConversation(String accountId) {
+    return JamiServiceJNI.startConversation(accountId);
+  }
+
+  public static void acceptConversationRequest(String accountId, String conversationId) {
+    JamiServiceJNI.acceptConversationRequest(accountId, conversationId);
+  }
+
+  public static void declineConversationRequest(String accountId, String conversationId) {
+    JamiServiceJNI.declineConversationRequest(accountId, conversationId);
+  }
+
+  public static boolean removeConversation(String accountId, String conversationId) {
+    return JamiServiceJNI.removeConversation(accountId, conversationId);
+  }
+
+  public static StringVect getConversations(String accountId) {
+    return new StringVect(JamiServiceJNI.getConversations(accountId), true);
+  }
+
+  public static VectMap getConversationRequests(String accountId) {
+    return new VectMap(JamiServiceJNI.getConversationRequests(accountId), true);
+  }
+
+  public static void updateConversationInfos(String accountId, String conversationId, StringMap infos) {
+    JamiServiceJNI.updateConversationInfos(accountId, conversationId, StringMap.getCPtr(infos), infos);
+  }
+
+  public static StringMap conversationInfos(String accountId, String conversationId) {
+    return new StringMap(JamiServiceJNI.conversationInfos(accountId, conversationId), true);
+  }
+
+  public static void addConversationMember(String accountId, String conversationId, String contactUri) {
+    JamiServiceJNI.addConversationMember(accountId, conversationId, contactUri);
+  }
+
+  public static void removeConversationMember(String accountId, String conversationId, String contactUri) {
+    JamiServiceJNI.removeConversationMember(accountId, conversationId, contactUri);
+  }
+
+  public static VectMap getConversationMembers(String accountId, String conversationId) {
+    return new VectMap(JamiServiceJNI.getConversationMembers(accountId, conversationId), true);
+  }
+
+  public static void sendMessage(String accountId, String conversationId, String message, String parent) {
+    JamiServiceJNI.sendMessage(accountId, conversationId, message, parent);
+  }
+
+  public static long loadConversationMessages(String accountId, String conversationId, String fromMessage, long n) {
+    return JamiServiceJNI.loadConversationMessages(accountId, conversationId, fromMessage, n);
+  }
+
+  public static long countInteractions(String accountId, String conversationId, String toId, String fromId, String authorUri) {
+    return JamiServiceJNI.countInteractions(accountId, conversationId, toId, fromId, authorUri);
+  }
+
+  public static void init(ConfigurationCallback confM, Callback callM, PresenceCallback presM, DataTransferCallback dataM, VideoCallback videoM, ConversationCallback convM) {
+    JamiServiceJNI.init(ConfigurationCallback.getCPtr(confM), confM, Callback.getCPtr(callM), callM, PresenceCallback.getCPtr(presM), presM, DataTransferCallback.getCPtr(dataM), dataM, VideoCallback.getCPtr(videoM), videoM, ConversationCallback.getCPtr(convM), convM);
+  }
+
+}
diff --git a/ring-android/libjamiclient/src/main/java/net/jami/daemon/JamiServiceJNI.java b/ring-android/libjamiclient/src/main/java/net/jami/daemon/JamiServiceJNI.java
new file mode 100644
index 0000000000000000000000000000000000000000..c05d98b6d92b313604d29db7c8aebb018de3caa0
--- /dev/null
+++ b/ring-android/libjamiclient/src/main/java/net/jami/daemon/JamiServiceJNI.java
@@ -0,0 +1,857 @@
+/* ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version 4.0.2
+ *
+ * Do not make changes to this file unless you know what you are doing--modify
+ * the SWIG interface file instead.
+ * ----------------------------------------------------------------------------- */
+
+package net.jami.daemon;
+
+public class JamiServiceJNI {
+  public final static native long new_StringMap__SWIG_0();
+  public final static native long new_StringMap__SWIG_1(long jarg1, StringMap jarg1_);
+  public final static native long StringMap_Iterator_getNextUnchecked(long jarg1, StringMap.Iterator jarg1_);
+  public final static native boolean StringMap_Iterator_isNot(long jarg1, StringMap.Iterator jarg1_, long jarg2, StringMap.Iterator jarg2_);
+  public final static native String StringMap_Iterator_getKey(long jarg1, StringMap.Iterator jarg1_);
+  public final static native String StringMap_Iterator_getValue(long jarg1, StringMap.Iterator jarg1_);
+  public final static native void StringMap_Iterator_setValue(long jarg1, StringMap.Iterator jarg1_, String jarg2);
+  public final static native void delete_StringMap_Iterator(long jarg1);
+  public final static native boolean StringMap_isEmpty(long jarg1, StringMap jarg1_);
+  public final static native void StringMap_clear(long jarg1, StringMap jarg1_);
+  public final static native long StringMap_find(long jarg1, StringMap jarg1_, String jarg2);
+  public final static native long StringMap_begin(long jarg1, StringMap jarg1_);
+  public final static native long StringMap_end(long jarg1, StringMap jarg1_);
+  public final static native int StringMap_sizeImpl(long jarg1, StringMap jarg1_);
+  public final static native boolean StringMap_containsImpl(long jarg1, StringMap jarg1_, String jarg2);
+  public final static native void StringMap_putUnchecked(long jarg1, StringMap jarg1_, String jarg2, String jarg3);
+  public final static native void StringMap_removeUnchecked(long jarg1, StringMap jarg1_, long jarg2, StringMap.Iterator jarg2_);
+  public final static native long StringMap_keys(long jarg1, StringMap jarg1_);
+  public final static native void StringMap_setRaw(long jarg1, StringMap jarg1_, String jarg2, long jarg3, Blob jarg3_);
+  public final static native long StringMap_getRaw(long jarg1, StringMap jarg1_, String jarg2);
+  public final static native void delete_StringMap(long jarg1);
+  public final static native long new_StringVect__SWIG_0();
+  public final static native long new_StringVect__SWIG_1(long jarg1, StringVect jarg1_);
+  public final static native long StringVect_capacity(long jarg1, StringVect jarg1_);
+  public final static native void StringVect_reserve(long jarg1, StringVect jarg1_, long jarg2);
+  public final static native boolean StringVect_isEmpty(long jarg1, StringVect jarg1_);
+  public final static native void StringVect_clear(long jarg1, StringVect jarg1_);
+  public final static native long new_StringVect__SWIG_2(int jarg1, String jarg2);
+  public final static native int StringVect_doSize(long jarg1, StringVect jarg1_);
+  public final static native void StringVect_doAdd__SWIG_0(long jarg1, StringVect jarg1_, String jarg2);
+  public final static native void StringVect_doAdd__SWIG_1(long jarg1, StringVect jarg1_, int jarg2, String jarg3);
+  public final static native String StringVect_doRemove(long jarg1, StringVect jarg1_, int jarg2);
+  public final static native String StringVect_doGet(long jarg1, StringVect jarg1_, int jarg2);
+  public final static native String StringVect_doSet(long jarg1, StringVect jarg1_, int jarg2, String jarg3);
+  public final static native void StringVect_doRemoveRange(long jarg1, StringVect jarg1_, int jarg2, int jarg3);
+  public final static native void delete_StringVect(long jarg1);
+  public final static native long new_VectMap__SWIG_0();
+  public final static native long new_VectMap__SWIG_1(long jarg1, VectMap jarg1_);
+  public final static native long VectMap_capacity(long jarg1, VectMap jarg1_);
+  public final static native void VectMap_reserve(long jarg1, VectMap jarg1_, long jarg2);
+  public final static native boolean VectMap_isEmpty(long jarg1, VectMap jarg1_);
+  public final static native void VectMap_clear(long jarg1, VectMap jarg1_);
+  public final static native long new_VectMap__SWIG_2(int jarg1, long jarg2, StringMap jarg2_);
+  public final static native int VectMap_doSize(long jarg1, VectMap jarg1_);
+  public final static native void VectMap_doAdd__SWIG_0(long jarg1, VectMap jarg1_, long jarg2, StringMap jarg2_);
+  public final static native void VectMap_doAdd__SWIG_1(long jarg1, VectMap jarg1_, int jarg2, long jarg3, StringMap jarg3_);
+  public final static native long VectMap_doRemove(long jarg1, VectMap jarg1_, int jarg2);
+  public final static native long VectMap_doGet(long jarg1, VectMap jarg1_, int jarg2);
+  public final static native long VectMap_doSet(long jarg1, VectMap jarg1_, int jarg2, long jarg3, StringMap jarg3_);
+  public final static native void VectMap_doRemoveRange(long jarg1, VectMap jarg1_, int jarg2, int jarg3);
+  public final static native void delete_VectMap(long jarg1);
+  public final static native long new_IntegerMap__SWIG_0();
+  public final static native long new_IntegerMap__SWIG_1(long jarg1, IntegerMap jarg1_);
+  public final static native long IntegerMap_Iterator_getNextUnchecked(long jarg1, IntegerMap.Iterator jarg1_);
+  public final static native boolean IntegerMap_Iterator_isNot(long jarg1, IntegerMap.Iterator jarg1_, long jarg2, IntegerMap.Iterator jarg2_);
+  public final static native String IntegerMap_Iterator_getKey(long jarg1, IntegerMap.Iterator jarg1_);
+  public final static native int IntegerMap_Iterator_getValue(long jarg1, IntegerMap.Iterator jarg1_);
+  public final static native void IntegerMap_Iterator_setValue(long jarg1, IntegerMap.Iterator jarg1_, int jarg2);
+  public final static native void delete_IntegerMap_Iterator(long jarg1);
+  public final static native boolean IntegerMap_isEmpty(long jarg1, IntegerMap jarg1_);
+  public final static native void IntegerMap_clear(long jarg1, IntegerMap jarg1_);
+  public final static native long IntegerMap_find(long jarg1, IntegerMap jarg1_, String jarg2);
+  public final static native long IntegerMap_begin(long jarg1, IntegerMap jarg1_);
+  public final static native long IntegerMap_end(long jarg1, IntegerMap jarg1_);
+  public final static native int IntegerMap_sizeImpl(long jarg1, IntegerMap jarg1_);
+  public final static native boolean IntegerMap_containsImpl(long jarg1, IntegerMap jarg1_, String jarg2);
+  public final static native void IntegerMap_putUnchecked(long jarg1, IntegerMap jarg1_, String jarg2, int jarg3);
+  public final static native void IntegerMap_removeUnchecked(long jarg1, IntegerMap jarg1_, long jarg2, IntegerMap.Iterator jarg2_);
+  public final static native void delete_IntegerMap(long jarg1);
+  public final static native long new_IntVect__SWIG_0();
+  public final static native long new_IntVect__SWIG_1(long jarg1, IntVect jarg1_);
+  public final static native long IntVect_capacity(long jarg1, IntVect jarg1_);
+  public final static native void IntVect_reserve(long jarg1, IntVect jarg1_, long jarg2);
+  public final static native boolean IntVect_isEmpty(long jarg1, IntVect jarg1_);
+  public final static native void IntVect_clear(long jarg1, IntVect jarg1_);
+  public final static native long new_IntVect__SWIG_2(int jarg1, int jarg2);
+  public final static native int IntVect_doSize(long jarg1, IntVect jarg1_);
+  public final static native void IntVect_doAdd__SWIG_0(long jarg1, IntVect jarg1_, int jarg2);
+  public final static native void IntVect_doAdd__SWIG_1(long jarg1, IntVect jarg1_, int jarg2, int jarg3);
+  public final static native int IntVect_doRemove(long jarg1, IntVect jarg1_, int jarg2);
+  public final static native int IntVect_doGet(long jarg1, IntVect jarg1_, int jarg2);
+  public final static native int IntVect_doSet(long jarg1, IntVect jarg1_, int jarg2, int jarg3);
+  public final static native void IntVect_doRemoveRange(long jarg1, IntVect jarg1_, int jarg2, int jarg3);
+  public final static native void delete_IntVect(long jarg1);
+  public final static native long new_UintVect__SWIG_0();
+  public final static native long new_UintVect__SWIG_1(long jarg1, UintVect jarg1_);
+  public final static native long UintVect_capacity(long jarg1, UintVect jarg1_);
+  public final static native void UintVect_reserve(long jarg1, UintVect jarg1_, long jarg2);
+  public final static native boolean UintVect_isEmpty(long jarg1, UintVect jarg1_);
+  public final static native void UintVect_clear(long jarg1, UintVect jarg1_);
+  public final static native long new_UintVect__SWIG_2(int jarg1, long jarg2);
+  public final static native int UintVect_doSize(long jarg1, UintVect jarg1_);
+  public final static native void UintVect_doAdd__SWIG_0(long jarg1, UintVect jarg1_, long jarg2);
+  public final static native void UintVect_doAdd__SWIG_1(long jarg1, UintVect jarg1_, int jarg2, long jarg3);
+  public final static native long UintVect_doRemove(long jarg1, UintVect jarg1_, int jarg2);
+  public final static native long UintVect_doGet(long jarg1, UintVect jarg1_, int jarg2);
+  public final static native long UintVect_doSet(long jarg1, UintVect jarg1_, int jarg2, long jarg3);
+  public final static native void UintVect_doRemoveRange(long jarg1, UintVect jarg1_, int jarg2, int jarg3);
+  public final static native void delete_UintVect(long jarg1);
+  public final static native long new_Blob__SWIG_0();
+  public final static native long new_Blob__SWIG_1(long jarg1, Blob jarg1_);
+  public final static native long Blob_capacity(long jarg1, Blob jarg1_);
+  public final static native void Blob_reserve(long jarg1, Blob jarg1_, long jarg2);
+  public final static native boolean Blob_isEmpty(long jarg1, Blob jarg1_);
+  public final static native void Blob_clear(long jarg1, Blob jarg1_);
+  public final static native long new_Blob__SWIG_2(int jarg1, byte jarg2);
+  public final static native int Blob_doSize(long jarg1, Blob jarg1_);
+  public final static native void Blob_doAdd__SWIG_0(long jarg1, Blob jarg1_, byte jarg2);
+  public final static native void Blob_doAdd__SWIG_1(long jarg1, Blob jarg1_, int jarg2, byte jarg3);
+  public final static native byte Blob_doRemove(long jarg1, Blob jarg1_, int jarg2);
+  public final static native byte Blob_doGet(long jarg1, Blob jarg1_, int jarg2);
+  public final static native byte Blob_doSet(long jarg1, Blob jarg1_, int jarg2, byte jarg3);
+  public final static native void Blob_doRemoveRange(long jarg1, Blob jarg1_, int jarg2, int jarg3);
+  public final static native void delete_Blob(long jarg1);
+  public final static native long new_FloatVect__SWIG_0();
+  public final static native long new_FloatVect__SWIG_1(long jarg1, FloatVect jarg1_);
+  public final static native long FloatVect_capacity(long jarg1, FloatVect jarg1_);
+  public final static native void FloatVect_reserve(long jarg1, FloatVect jarg1_, long jarg2);
+  public final static native boolean FloatVect_isEmpty(long jarg1, FloatVect jarg1_);
+  public final static native void FloatVect_clear(long jarg1, FloatVect jarg1_);
+  public final static native long new_FloatVect__SWIG_2(int jarg1, float jarg2);
+  public final static native int FloatVect_doSize(long jarg1, FloatVect jarg1_);
+  public final static native void FloatVect_doAdd__SWIG_0(long jarg1, FloatVect jarg1_, float jarg2);
+  public final static native void FloatVect_doAdd__SWIG_1(long jarg1, FloatVect jarg1_, int jarg2, float jarg3);
+  public final static native float FloatVect_doRemove(long jarg1, FloatVect jarg1_, int jarg2);
+  public final static native float FloatVect_doGet(long jarg1, FloatVect jarg1_, int jarg2);
+  public final static native float FloatVect_doSet(long jarg1, FloatVect jarg1_, int jarg2, float jarg3);
+  public final static native void FloatVect_doRemoveRange(long jarg1, FloatVect jarg1_, int jarg2, int jarg3);
+  public final static native void delete_FloatVect(long jarg1);
+  public final static native void fini();
+  public final static native String placeCall(String jarg1, String jarg2, long jarg3, StringMap jarg3_);
+  public final static native String placeCallWithMedia(String jarg1, String jarg2, long jarg3, VectMap jarg3_);
+  public final static native boolean requestMediaChange(String jarg1, long jarg2, VectMap jarg2_);
+  public final static native boolean refuse(String jarg1);
+  public final static native boolean accept(String jarg1);
+  public final static native boolean acceptWithMedia(String jarg1, long jarg2, VectMap jarg2_);
+  public final static native boolean answerMediaChangeRequest(String jarg1, long jarg2, VectMap jarg2_);
+  public final static native boolean hangUp(String jarg1);
+  public final static native boolean hold(String jarg1);
+  public final static native boolean unhold(String jarg1);
+  public final static native boolean muteLocalMedia(String jarg1, String jarg2, boolean jarg3);
+  public final static native boolean transfer(String jarg1, String jarg2);
+  public final static native boolean attendedTransfer(String jarg1, String jarg2);
+  public final static native long getCallDetails(String jarg1);
+  public final static native long getCallList();
+  public final static native void removeConference(String jarg1);
+  public final static native boolean joinParticipant(String jarg1, String jarg2);
+  public final static native void createConfFromParticipantList(long jarg1, StringVect jarg1_);
+  public final static native void setConferenceLayout(String jarg1, int jarg2);
+  public final static native void setActiveParticipant(String jarg1, String jarg2);
+  public final static native boolean isConferenceParticipant(String jarg1);
+  public final static native boolean addParticipant(String jarg1, String jarg2);
+  public final static native boolean addMainParticipant(String jarg1);
+  public final static native boolean detachParticipant(String jarg1);
+  public final static native boolean joinConference(String jarg1, String jarg2);
+  public final static native boolean hangUpConference(String jarg1);
+  public final static native boolean holdConference(String jarg1);
+  public final static native boolean unholdConference(String jarg1);
+  public final static native long getConferenceList();
+  public final static native long getParticipantList(String jarg1);
+  public final static native long getDisplayNames(String jarg1);
+  public final static native String getConferenceId(String jarg1);
+  public final static native long getConferenceDetails(String jarg1);
+  public final static native long getConferenceInfos(String jarg1);
+  public final static native void setModerator(String jarg1, String jarg2, boolean jarg3);
+  public final static native void muteParticipant(String jarg1, String jarg2, boolean jarg3);
+  public final static native void hangupParticipant(String jarg1, String jarg2);
+  public final static native boolean startRecordedFilePlayback(String jarg1);
+  public final static native void stopRecordedFilePlayback();
+  public final static native boolean toggleRecording(String jarg1);
+  public final static native void setRecording(String jarg1);
+  public final static native void recordPlaybackSeek(double jarg1);
+  public final static native boolean getIsRecording(String jarg1);
+  public final static native String getCurrentAudioCodecName(String jarg1);
+  public final static native void playDTMF(String jarg1);
+  public final static native void startTone(int jarg1, int jarg2);
+  public final static native boolean switchInput__SWIG_0(String jarg1, String jarg2);
+  public final static native void sendTextMessage(String jarg1, long jarg2, StringMap jarg2_, String jarg3, boolean jarg4);
+  public final static native void delete_Callback(long jarg1);
+  public final static native void Callback_callStateChanged(long jarg1, Callback jarg1_, String jarg2, String jarg3, int jarg4);
+  public final static native void Callback_callStateChangedSwigExplicitCallback(long jarg1, Callback jarg1_, String jarg2, String jarg3, int jarg4);
+  public final static native void Callback_transferFailed(long jarg1, Callback jarg1_);
+  public final static native void Callback_transferFailedSwigExplicitCallback(long jarg1, Callback jarg1_);
+  public final static native void Callback_transferSucceeded(long jarg1, Callback jarg1_);
+  public final static native void Callback_transferSucceededSwigExplicitCallback(long jarg1, Callback jarg1_);
+  public final static native void Callback_recordPlaybackStopped(long jarg1, Callback jarg1_, String jarg2);
+  public final static native void Callback_recordPlaybackStoppedSwigExplicitCallback(long jarg1, Callback jarg1_, String jarg2);
+  public final static native void Callback_voiceMailNotify(long jarg1, Callback jarg1_, String jarg2, int jarg3, int jarg4, int jarg5);
+  public final static native void Callback_voiceMailNotifySwigExplicitCallback(long jarg1, Callback jarg1_, String jarg2, int jarg3, int jarg4, int jarg5);
+  public final static native void Callback_incomingMessage(long jarg1, Callback jarg1_, String jarg2, String jarg3, long jarg4, StringMap jarg4_);
+  public final static native void Callback_incomingMessageSwigExplicitCallback(long jarg1, Callback jarg1_, String jarg2, String jarg3, long jarg4, StringMap jarg4_);
+  public final static native void Callback_incomingCall(long jarg1, Callback jarg1_, String jarg2, String jarg3, String jarg4);
+  public final static native void Callback_incomingCallSwigExplicitCallback(long jarg1, Callback jarg1_, String jarg2, String jarg3, String jarg4);
+  public final static native void Callback_incomingCallWithMedia(long jarg1, Callback jarg1_, String jarg2, String jarg3, String jarg4, long jarg5, VectMap jarg5_);
+  public final static native void Callback_incomingCallWithMediaSwigExplicitCallback(long jarg1, Callback jarg1_, String jarg2, String jarg3, String jarg4, long jarg5, VectMap jarg5_);
+  public final static native void Callback_mediaChangeRequested(long jarg1, Callback jarg1_, String jarg2, String jarg3, long jarg4, VectMap jarg4_);
+  public final static native void Callback_mediaChangeRequestedSwigExplicitCallback(long jarg1, Callback jarg1_, String jarg2, String jarg3, long jarg4, VectMap jarg4_);
+  public final static native void Callback_recordPlaybackFilepath(long jarg1, Callback jarg1_, String jarg2, String jarg3);
+  public final static native void Callback_recordPlaybackFilepathSwigExplicitCallback(long jarg1, Callback jarg1_, String jarg2, String jarg3);
+  public final static native void Callback_conferenceCreated(long jarg1, Callback jarg1_, String jarg2);
+  public final static native void Callback_conferenceCreatedSwigExplicitCallback(long jarg1, Callback jarg1_, String jarg2);
+  public final static native void Callback_conferenceChanged(long jarg1, Callback jarg1_, String jarg2, String jarg3);
+  public final static native void Callback_conferenceChangedSwigExplicitCallback(long jarg1, Callback jarg1_, String jarg2, String jarg3);
+  public final static native void Callback_conferenceRemoved(long jarg1, Callback jarg1_, String jarg2);
+  public final static native void Callback_conferenceRemovedSwigExplicitCallback(long jarg1, Callback jarg1_, String jarg2);
+  public final static native void Callback_updatePlaybackScale(long jarg1, Callback jarg1_, String jarg2, int jarg3, int jarg4);
+  public final static native void Callback_updatePlaybackScaleSwigExplicitCallback(long jarg1, Callback jarg1_, String jarg2, int jarg3, int jarg4);
+  public final static native void Callback_newCall(long jarg1, Callback jarg1_, String jarg2, String jarg3, String jarg4);
+  public final static native void Callback_newCallSwigExplicitCallback(long jarg1, Callback jarg1_, String jarg2, String jarg3, String jarg4);
+  public final static native void Callback_sipCallStateChange(long jarg1, Callback jarg1_, String jarg2, String jarg3, int jarg4);
+  public final static native void Callback_sipCallStateChangeSwigExplicitCallback(long jarg1, Callback jarg1_, String jarg2, String jarg3, int jarg4);
+  public final static native void Callback_recordingStateChanged(long jarg1, Callback jarg1_, String jarg2, int jarg3);
+  public final static native void Callback_recordingStateChangedSwigExplicitCallback(long jarg1, Callback jarg1_, String jarg2, int jarg3);
+  public final static native void Callback_recordStateChange(long jarg1, Callback jarg1_, String jarg2, int jarg3);
+  public final static native void Callback_recordStateChangeSwigExplicitCallback(long jarg1, Callback jarg1_, String jarg2, int jarg3);
+  public final static native void Callback_onRtcpReportReceived(long jarg1, Callback jarg1_, String jarg2, long jarg3, IntegerMap jarg3_);
+  public final static native void Callback_onRtcpReportReceivedSwigExplicitCallback(long jarg1, Callback jarg1_, String jarg2, long jarg3, IntegerMap jarg3_);
+  public final static native void Callback_onConferenceInfosUpdated(long jarg1, Callback jarg1_, String jarg2, long jarg3, VectMap jarg3_);
+  public final static native void Callback_onConferenceInfosUpdatedSwigExplicitCallback(long jarg1, Callback jarg1_, String jarg2, long jarg3, VectMap jarg3_);
+  public final static native void Callback_peerHold(long jarg1, Callback jarg1_, String jarg2, boolean jarg3);
+  public final static native void Callback_peerHoldSwigExplicitCallback(long jarg1, Callback jarg1_, String jarg2, boolean jarg3);
+  public final static native void Callback_connectionUpdate(long jarg1, Callback jarg1_, String jarg2, int jarg3);
+  public final static native void Callback_connectionUpdateSwigExplicitCallback(long jarg1, Callback jarg1_, String jarg2, int jarg3);
+  public final static native void Callback_remoteRecordingChanged(long jarg1, Callback jarg1_, String jarg2, String jarg3, boolean jarg4);
+  public final static native void Callback_remoteRecordingChangedSwigExplicitCallback(long jarg1, Callback jarg1_, String jarg2, String jarg3, boolean jarg4);
+  public final static native void Callback_mediaNegotiationStatus(long jarg1, Callback jarg1_, String jarg2, String jarg3, long jarg4, VectMap jarg4_);
+  public final static native void Callback_mediaNegotiationStatusSwigExplicitCallback(long jarg1, Callback jarg1_, String jarg2, String jarg3, long jarg4, VectMap jarg4_);
+  public final static native long new_Callback();
+  public final static native void Callback_director_connect(Callback obj, long cptr, boolean mem_own, boolean weak_global);
+  public final static native void Callback_change_ownership(Callback obj, long cptr, boolean take_or_release);
+  public final static native long new_MessageVect__SWIG_0();
+  public final static native long new_MessageVect__SWIG_1(long jarg1, MessageVect jarg1_);
+  public final static native long MessageVect_capacity(long jarg1, MessageVect jarg1_);
+  public final static native void MessageVect_reserve(long jarg1, MessageVect jarg1_, long jarg2);
+  public final static native boolean MessageVect_isEmpty(long jarg1, MessageVect jarg1_);
+  public final static native void MessageVect_clear(long jarg1, MessageVect jarg1_);
+  public final static native long new_MessageVect__SWIG_2(int jarg1, long jarg2, Message jarg2_);
+  public final static native int MessageVect_doSize(long jarg1, MessageVect jarg1_);
+  public final static native void MessageVect_doAdd__SWIG_0(long jarg1, MessageVect jarg1_, long jarg2, Message jarg2_);
+  public final static native void MessageVect_doAdd__SWIG_1(long jarg1, MessageVect jarg1_, int jarg2, long jarg3, Message jarg3_);
+  public final static native long MessageVect_doRemove(long jarg1, MessageVect jarg1_, int jarg2);
+  public final static native long MessageVect_doGet(long jarg1, MessageVect jarg1_, int jarg2);
+  public final static native long MessageVect_doSet(long jarg1, MessageVect jarg1_, int jarg2, long jarg3, Message jarg3_);
+  public final static native void MessageVect_doRemoveRange(long jarg1, MessageVect jarg1_, int jarg2, int jarg3);
+  public final static native void delete_MessageVect(long jarg1);
+  public final static native void Message_from_set(long jarg1, Message jarg1_, String jarg2);
+  public final static native String Message_from_get(long jarg1, Message jarg1_);
+  public final static native void Message_payloads_set(long jarg1, Message jarg1_, long jarg2, StringMap jarg2_);
+  public final static native long Message_payloads_get(long jarg1, Message jarg1_);
+  public final static native void Message_received_set(long jarg1, Message jarg1_, long jarg2);
+  public final static native long Message_received_get(long jarg1, Message jarg1_);
+  public final static native long new_Message();
+  public final static native void delete_Message(long jarg1);
+  public final static native long getAccountDetails(String jarg1);
+  public final static native long getVolatileAccountDetails(String jarg1);
+  public final static native void setAccountDetails(String jarg1, long jarg2, StringMap jarg2_);
+  public final static native void setAccountActive(String jarg1, boolean jarg2);
+  public final static native long getAccountTemplate(String jarg1);
+  public final static native void monitor(boolean jarg1);
+  public final static native String addAccount(long jarg1, StringMap jarg1_);
+  public final static native void removeAccount(String jarg1);
+  public final static native long getAccountList();
+  public final static native void sendRegister(String jarg1, boolean jarg2);
+  public final static native void registerAllAccounts();
+  public final static native long sendAccountTextMessage(String jarg1, String jarg2, long jarg3, StringMap jarg3_);
+  public final static native long getLastMessages(String jarg1, long jarg2);
+  public final static native int getMessageStatus__SWIG_0(long jarg1);
+  public final static native int getMessageStatus__SWIG_1(String jarg1, long jarg2);
+  public final static native boolean cancelMessage(String jarg1, long jarg2);
+  public final static native void setIsComposing(String jarg1, String jarg2, boolean jarg3);
+  public final static native boolean setMessageDisplayed(String jarg1, String jarg2, String jarg3, int jarg4);
+  public final static native boolean changeAccountPassword(String jarg1, String jarg2, String jarg3);
+  public final static native boolean lookupName(String jarg1, String jarg2, String jarg3);
+  public final static native boolean lookupAddress(String jarg1, String jarg2, String jarg3);
+  public final static native boolean registerName(String jarg1, String jarg2, String jarg3);
+  public final static native boolean searchUser(String jarg1, String jarg2);
+  public final static native long getCodecList();
+  public final static native long getSupportedTlsMethod();
+  public final static native long getSupportedCiphers(String jarg1);
+  public final static native long getCodecDetails(String jarg1, long jarg2);
+  public final static native boolean setCodecDetails(String jarg1, long jarg2, long jarg3, StringMap jarg3_);
+  public final static native long getActiveCodecList(String jarg1);
+  public final static native boolean exportOnRing(String jarg1, String jarg2);
+  public final static native boolean exportToFile(String jarg1, String jarg2, String jarg3);
+  public final static native long getKnownRingDevices(String jarg1);
+  public final static native boolean revokeDevice(String jarg1, String jarg2, String jarg3);
+  public final static native void setActiveCodecList(String jarg1, long jarg2, UintVect jarg2_);
+  public final static native long getAudioPluginList();
+  public final static native void setAudioPlugin(String jarg1);
+  public final static native long getAudioOutputDeviceList();
+  public final static native void setAudioOutputDevice(int jarg1);
+  public final static native void setAudioInputDevice(int jarg1);
+  public final static native void setAudioRingtoneDevice(int jarg1);
+  public final static native long getAudioInputDeviceList();
+  public final static native long getCurrentAudioDevicesIndex();
+  public final static native int getAudioInputDeviceIndex(String jarg1);
+  public final static native int getAudioOutputDeviceIndex(String jarg1);
+  public final static native String getCurrentAudioOutputPlugin();
+  public final static native boolean getNoiseSuppressState();
+  public final static native void setNoiseSuppressState(boolean jarg1);
+  public final static native boolean isAgcEnabled();
+  public final static native void setAgcState(boolean jarg1);
+  public final static native void muteDtmf(boolean jarg1);
+  public final static native boolean isDtmfMuted();
+  public final static native boolean isCaptureMuted();
+  public final static native void muteCapture(boolean jarg1);
+  public final static native boolean isPlaybackMuted();
+  public final static native void mutePlayback(boolean jarg1);
+  public final static native boolean isRingtoneMuted();
+  public final static native void muteRingtone(boolean jarg1);
+  public final static native String getAudioManager();
+  public final static native boolean setAudioManager(String jarg1);
+  public final static native String getRecordPath();
+  public final static native void setRecordPath(String jarg1);
+  public final static native boolean getIsAlwaysRecording();
+  public final static native void setIsAlwaysRecording(boolean jarg1);
+  public final static native boolean getRecordPreview();
+  public final static native void setRecordPreview(boolean jarg1);
+  public final static native int getRecordQuality();
+  public final static native void setRecordQuality(int jarg1);
+  public final static native void setHistoryLimit(int jarg1);
+  public final static native int getHistoryLimit();
+  public final static native void setRingingTimeout(int jarg1);
+  public final static native int getRingingTimeout();
+  public final static native void setAccountsOrder(String jarg1);
+  public final static native long getCredentials(String jarg1);
+  public final static native void setCredentials(String jarg1, long jarg2, VectMap jarg2_);
+  public final static native String getAddrFromInterfaceName(String jarg1);
+  public final static native long getAllIpInterface();
+  public final static native long getAllIpInterfaceByName();
+  public final static native long getShortcuts();
+  public final static native void setShortcuts(long jarg1, StringMap jarg1_);
+  public final static native void setVolume(String jarg1, double jarg2);
+  public final static native double getVolume(String jarg1);
+  public final static native long validateCertificatePath(String jarg1, String jarg2, String jarg3, String jarg4, String jarg5);
+  public final static native long validateCertificate(String jarg1, String jarg2);
+  public final static native long getCertificateDetails(String jarg1);
+  public final static native long getCertificateDetailsPath(String jarg1, String jarg2, String jarg3);
+  public final static native long getPinnedCertificates();
+  public final static native long pinCertificate(long jarg1, Blob jarg1_, boolean jarg2);
+  public final static native boolean unpinCertificate(String jarg1);
+  public final static native void pinCertificatePath(String jarg1);
+  public final static native long unpinCertificatePath(String jarg1);
+  public final static native boolean pinRemoteCertificate(String jarg1, String jarg2);
+  public final static native boolean setCertificateStatus(String jarg1, String jarg2, String jarg3);
+  public final static native long getCertificatesByStatus(String jarg1, String jarg2);
+  public final static native long getTrustRequests(String jarg1);
+  public final static native boolean acceptTrustRequest(String jarg1, String jarg2);
+  public final static native boolean discardTrustRequest(String jarg1, String jarg2);
+  public final static native void sendTrustRequest(String jarg1, String jarg2, long jarg3, Blob jarg3_);
+  public final static native void addContact(String jarg1, String jarg2);
+  public final static native void removeContact(String jarg1, String jarg2, boolean jarg3);
+  public final static native long getContacts(String jarg1);
+  public final static native long getContactDetails(String jarg1, String jarg2);
+  public final static native void connectivityChanged();
+  public final static native void enableProxyClient(String jarg1, boolean jarg2);
+  public final static native void setPushNotificationToken(String jarg1);
+  public final static native void pushNotificationReceived(String jarg1, long jarg2, StringMap jarg2_);
+  public final static native boolean isAudioMeterActive(String jarg1);
+  public final static native void setAudioMeterState(String jarg1, boolean jarg2);
+  public final static native void setDefaultModerator(String jarg1, String jarg2, boolean jarg3);
+  public final static native long getDefaultModerators(String jarg1);
+  public final static native void enableLocalModerators(String jarg1, boolean jarg2);
+  public final static native boolean isLocalModeratorsEnabled(String jarg1);
+  public final static native void setAllModerators(String jarg1, boolean jarg2);
+  public final static native boolean isAllModerators(String jarg1);
+  public final static native void delete_ConfigurationCallback(long jarg1);
+  public final static native void ConfigurationCallback_volumeChanged(long jarg1, ConfigurationCallback jarg1_, String jarg2, int jarg3);
+  public final static native void ConfigurationCallback_volumeChangedSwigExplicitConfigurationCallback(long jarg1, ConfigurationCallback jarg1_, String jarg2, int jarg3);
+  public final static native void ConfigurationCallback_accountsChanged(long jarg1, ConfigurationCallback jarg1_);
+  public final static native void ConfigurationCallback_accountsChangedSwigExplicitConfigurationCallback(long jarg1, ConfigurationCallback jarg1_);
+  public final static native void ConfigurationCallback_historyChanged(long jarg1, ConfigurationCallback jarg1_);
+  public final static native void ConfigurationCallback_historyChangedSwigExplicitConfigurationCallback(long jarg1, ConfigurationCallback jarg1_);
+  public final static native void ConfigurationCallback_stunStatusFailure(long jarg1, ConfigurationCallback jarg1_, String jarg2);
+  public final static native void ConfigurationCallback_stunStatusFailureSwigExplicitConfigurationCallback(long jarg1, ConfigurationCallback jarg1_, String jarg2);
+  public final static native void ConfigurationCallback_accountDetailsChanged(long jarg1, ConfigurationCallback jarg1_, String jarg2, long jarg3, StringMap jarg3_);
+  public final static native void ConfigurationCallback_accountDetailsChangedSwigExplicitConfigurationCallback(long jarg1, ConfigurationCallback jarg1_, String jarg2, long jarg3, StringMap jarg3_);
+  public final static native void ConfigurationCallback_profileReceived(long jarg1, ConfigurationCallback jarg1_, String jarg2, String jarg3, String jarg4);
+  public final static native void ConfigurationCallback_profileReceivedSwigExplicitConfigurationCallback(long jarg1, ConfigurationCallback jarg1_, String jarg2, String jarg3, String jarg4);
+  public final static native void ConfigurationCallback_registrationStateChanged(long jarg1, ConfigurationCallback jarg1_, String jarg2, String jarg3, int jarg4, String jarg5);
+  public final static native void ConfigurationCallback_registrationStateChangedSwigExplicitConfigurationCallback(long jarg1, ConfigurationCallback jarg1_, String jarg2, String jarg3, int jarg4, String jarg5);
+  public final static native void ConfigurationCallback_volatileAccountDetailsChanged(long jarg1, ConfigurationCallback jarg1_, String jarg2, long jarg3, StringMap jarg3_);
+  public final static native void ConfigurationCallback_volatileAccountDetailsChangedSwigExplicitConfigurationCallback(long jarg1, ConfigurationCallback jarg1_, String jarg2, long jarg3, StringMap jarg3_);
+  public final static native void ConfigurationCallback_incomingAccountMessage(long jarg1, ConfigurationCallback jarg1_, String jarg2, String jarg3, String jarg4, long jarg5, StringMap jarg5_);
+  public final static native void ConfigurationCallback_incomingAccountMessageSwigExplicitConfigurationCallback(long jarg1, ConfigurationCallback jarg1_, String jarg2, String jarg3, String jarg4, long jarg5, StringMap jarg5_);
+  public final static native void ConfigurationCallback_accountMessageStatusChanged(long jarg1, ConfigurationCallback jarg1_, String jarg2, String jarg3, String jarg4, String jarg5, int jarg6);
+  public final static native void ConfigurationCallback_accountMessageStatusChangedSwigExplicitConfigurationCallback(long jarg1, ConfigurationCallback jarg1_, String jarg2, String jarg3, String jarg4, String jarg5, int jarg6);
+  public final static native void ConfigurationCallback_composingStatusChanged(long jarg1, ConfigurationCallback jarg1_, String jarg2, String jarg3, String jarg4, int jarg5);
+  public final static native void ConfigurationCallback_composingStatusChangedSwigExplicitConfigurationCallback(long jarg1, ConfigurationCallback jarg1_, String jarg2, String jarg3, String jarg4, int jarg5);
+  public final static native void ConfigurationCallback_knownDevicesChanged(long jarg1, ConfigurationCallback jarg1_, String jarg2, long jarg3, StringMap jarg3_);
+  public final static native void ConfigurationCallback_knownDevicesChangedSwigExplicitConfigurationCallback(long jarg1, ConfigurationCallback jarg1_, String jarg2, long jarg3, StringMap jarg3_);
+  public final static native void ConfigurationCallback_exportOnRingEnded(long jarg1, ConfigurationCallback jarg1_, String jarg2, int jarg3, String jarg4);
+  public final static native void ConfigurationCallback_exportOnRingEndedSwigExplicitConfigurationCallback(long jarg1, ConfigurationCallback jarg1_, String jarg2, int jarg3, String jarg4);
+  public final static native void ConfigurationCallback_incomingTrustRequest(long jarg1, ConfigurationCallback jarg1_, String jarg2, String jarg3, String jarg4, long jarg5, Blob jarg5_, long jarg6);
+  public final static native void ConfigurationCallback_incomingTrustRequestSwigExplicitConfigurationCallback(long jarg1, ConfigurationCallback jarg1_, String jarg2, String jarg3, String jarg4, long jarg5, Blob jarg5_, long jarg6);
+  public final static native void ConfigurationCallback_contactAdded(long jarg1, ConfigurationCallback jarg1_, String jarg2, String jarg3, boolean jarg4);
+  public final static native void ConfigurationCallback_contactAddedSwigExplicitConfigurationCallback(long jarg1, ConfigurationCallback jarg1_, String jarg2, String jarg3, boolean jarg4);
+  public final static native void ConfigurationCallback_contactRemoved(long jarg1, ConfigurationCallback jarg1_, String jarg2, String jarg3, boolean jarg4);
+  public final static native void ConfigurationCallback_contactRemovedSwigExplicitConfigurationCallback(long jarg1, ConfigurationCallback jarg1_, String jarg2, String jarg3, boolean jarg4);
+  public final static native void ConfigurationCallback_certificatePinned(long jarg1, ConfigurationCallback jarg1_, String jarg2);
+  public final static native void ConfigurationCallback_certificatePinnedSwigExplicitConfigurationCallback(long jarg1, ConfigurationCallback jarg1_, String jarg2);
+  public final static native void ConfigurationCallback_certificatePathPinned(long jarg1, ConfigurationCallback jarg1_, String jarg2, long jarg3, StringVect jarg3_);
+  public final static native void ConfigurationCallback_certificatePathPinnedSwigExplicitConfigurationCallback(long jarg1, ConfigurationCallback jarg1_, String jarg2, long jarg3, StringVect jarg3_);
+  public final static native void ConfigurationCallback_certificateExpired(long jarg1, ConfigurationCallback jarg1_, String jarg2);
+  public final static native void ConfigurationCallback_certificateExpiredSwigExplicitConfigurationCallback(long jarg1, ConfigurationCallback jarg1_, String jarg2);
+  public final static native void ConfigurationCallback_certificateStateChanged(long jarg1, ConfigurationCallback jarg1_, String jarg2, String jarg3, String jarg4);
+  public final static native void ConfigurationCallback_certificateStateChangedSwigExplicitConfigurationCallback(long jarg1, ConfigurationCallback jarg1_, String jarg2, String jarg3, String jarg4);
+  public final static native void ConfigurationCallback_errorAlert(long jarg1, ConfigurationCallback jarg1_, int jarg2);
+  public final static native void ConfigurationCallback_errorAlertSwigExplicitConfigurationCallback(long jarg1, ConfigurationCallback jarg1_, int jarg2);
+  public final static native void ConfigurationCallback_getHardwareAudioFormat(long jarg1, ConfigurationCallback jarg1_, long jarg2, IntVect jarg2_);
+  public final static native void ConfigurationCallback_getHardwareAudioFormatSwigExplicitConfigurationCallback(long jarg1, ConfigurationCallback jarg1_, long jarg2, IntVect jarg2_);
+  public final static native void ConfigurationCallback_getAppDataPath(long jarg1, ConfigurationCallback jarg1_, String jarg2, long jarg3, StringVect jarg3_);
+  public final static native void ConfigurationCallback_getAppDataPathSwigExplicitConfigurationCallback(long jarg1, ConfigurationCallback jarg1_, String jarg2, long jarg3, StringVect jarg3_);
+  public final static native void ConfigurationCallback_getDeviceName(long jarg1, ConfigurationCallback jarg1_, long jarg2, StringVect jarg2_);
+  public final static native void ConfigurationCallback_getDeviceNameSwigExplicitConfigurationCallback(long jarg1, ConfigurationCallback jarg1_, long jarg2, StringVect jarg2_);
+  public final static native void ConfigurationCallback_nameRegistrationEnded(long jarg1, ConfigurationCallback jarg1_, String jarg2, int jarg3, String jarg4);
+  public final static native void ConfigurationCallback_nameRegistrationEndedSwigExplicitConfigurationCallback(long jarg1, ConfigurationCallback jarg1_, String jarg2, int jarg3, String jarg4);
+  public final static native void ConfigurationCallback_registeredNameFound(long jarg1, ConfigurationCallback jarg1_, String jarg2, int jarg3, String jarg4, String jarg5);
+  public final static native void ConfigurationCallback_registeredNameFoundSwigExplicitConfigurationCallback(long jarg1, ConfigurationCallback jarg1_, String jarg2, int jarg3, String jarg4, String jarg5);
+  public final static native void ConfigurationCallback_userSearchEnded(long jarg1, ConfigurationCallback jarg1_, String jarg2, int jarg3, String jarg4, long jarg5, VectMap jarg5_);
+  public final static native void ConfigurationCallback_userSearchEndedSwigExplicitConfigurationCallback(long jarg1, ConfigurationCallback jarg1_, String jarg2, int jarg3, String jarg4, long jarg5, VectMap jarg5_);
+  public final static native void ConfigurationCallback_migrationEnded(long jarg1, ConfigurationCallback jarg1_, String jarg2, String jarg3);
+  public final static native void ConfigurationCallback_migrationEndedSwigExplicitConfigurationCallback(long jarg1, ConfigurationCallback jarg1_, String jarg2, String jarg3);
+  public final static native void ConfigurationCallback_deviceRevocationEnded(long jarg1, ConfigurationCallback jarg1_, String jarg2, String jarg3, int jarg4);
+  public final static native void ConfigurationCallback_deviceRevocationEndedSwigExplicitConfigurationCallback(long jarg1, ConfigurationCallback jarg1_, String jarg2, String jarg3, int jarg4);
+  public final static native void ConfigurationCallback_accountProfileReceived(long jarg1, ConfigurationCallback jarg1_, String jarg2, String jarg3, String jarg4);
+  public final static native void ConfigurationCallback_accountProfileReceivedSwigExplicitConfigurationCallback(long jarg1, ConfigurationCallback jarg1_, String jarg2, String jarg3, String jarg4);
+  public final static native void ConfigurationCallback_hardwareDecodingChanged(long jarg1, ConfigurationCallback jarg1_, boolean jarg2);
+  public final static native void ConfigurationCallback_hardwareDecodingChangedSwigExplicitConfigurationCallback(long jarg1, ConfigurationCallback jarg1_, boolean jarg2);
+  public final static native void ConfigurationCallback_hardwareEncodingChanged(long jarg1, ConfigurationCallback jarg1_, boolean jarg2);
+  public final static native void ConfigurationCallback_hardwareEncodingChangedSwigExplicitConfigurationCallback(long jarg1, ConfigurationCallback jarg1_, boolean jarg2);
+  public final static native void ConfigurationCallback_audioMeter(long jarg1, ConfigurationCallback jarg1_, String jarg2, float jarg3);
+  public final static native void ConfigurationCallback_audioMeterSwigExplicitConfigurationCallback(long jarg1, ConfigurationCallback jarg1_, String jarg2, float jarg3);
+  public final static native void ConfigurationCallback_messageSend(long jarg1, ConfigurationCallback jarg1_, String jarg2);
+  public final static native void ConfigurationCallback_messageSendSwigExplicitConfigurationCallback(long jarg1, ConfigurationCallback jarg1_, String jarg2);
+  public final static native long new_ConfigurationCallback();
+  public final static native void ConfigurationCallback_director_connect(ConfigurationCallback obj, long cptr, boolean mem_own, boolean weak_global);
+  public final static native void ConfigurationCallback_change_ownership(ConfigurationCallback obj, long cptr, boolean take_or_release);
+  public final static native void DataTransferInfo_accountId_set(long jarg1, DataTransferInfo jarg1_, String jarg2);
+  public final static native String DataTransferInfo_accountId_get(long jarg1, DataTransferInfo jarg1_);
+  public final static native void DataTransferInfo_lastEvent_set(long jarg1, DataTransferInfo jarg1_, long jarg2);
+  public final static native long DataTransferInfo_lastEvent_get(long jarg1, DataTransferInfo jarg1_);
+  public final static native void DataTransferInfo_flags_set(long jarg1, DataTransferInfo jarg1_, long jarg2);
+  public final static native long DataTransferInfo_flags_get(long jarg1, DataTransferInfo jarg1_);
+  public final static native void DataTransferInfo_totalSize_set(long jarg1, DataTransferInfo jarg1_, long jarg2);
+  public final static native long DataTransferInfo_totalSize_get(long jarg1, DataTransferInfo jarg1_);
+  public final static native void DataTransferInfo_bytesProgress_set(long jarg1, DataTransferInfo jarg1_, long jarg2);
+  public final static native long DataTransferInfo_bytesProgress_get(long jarg1, DataTransferInfo jarg1_);
+  public final static native void DataTransferInfo_author_set(long jarg1, DataTransferInfo jarg1_, String jarg2);
+  public final static native String DataTransferInfo_author_get(long jarg1, DataTransferInfo jarg1_);
+  public final static native void DataTransferInfo_peer_set(long jarg1, DataTransferInfo jarg1_, String jarg2);
+  public final static native String DataTransferInfo_peer_get(long jarg1, DataTransferInfo jarg1_);
+  public final static native void DataTransferInfo_conversationId_set(long jarg1, DataTransferInfo jarg1_, String jarg2);
+  public final static native String DataTransferInfo_conversationId_get(long jarg1, DataTransferInfo jarg1_);
+  public final static native void DataTransferInfo_displayName_set(long jarg1, DataTransferInfo jarg1_, String jarg2);
+  public final static native String DataTransferInfo_displayName_get(long jarg1, DataTransferInfo jarg1_);
+  public final static native void DataTransferInfo_path_set(long jarg1, DataTransferInfo jarg1_, String jarg2);
+  public final static native String DataTransferInfo_path_get(long jarg1, DataTransferInfo jarg1_);
+  public final static native void DataTransferInfo_mimetype_set(long jarg1, DataTransferInfo jarg1_, String jarg2);
+  public final static native String DataTransferInfo_mimetype_get(long jarg1, DataTransferInfo jarg1_);
+  public final static native long new_DataTransferInfo();
+  public final static native void delete_DataTransferInfo(long jarg1);
+  public final static native void sendFile(String jarg1, String jarg2, String jarg3, String jarg4, String jarg5);
+  public final static native long sendFileLegacy(long jarg1, DataTransferInfo jarg1_, long[] jarg2);
+  public final static native long acceptFileTransfer(String jarg1, String jarg2, String jarg3);
+  public final static native long downloadFile(String jarg1, String jarg2, String jarg3, String jarg4, String jarg5);
+  public final static native long cancelDataTransfer(String jarg1, String jarg2, String jarg3);
+  public final static native long dataTransferInfo(String jarg1, String jarg2, long jarg3, DataTransferInfo jarg3_);
+  public final static native long fileTransferInfo(String jarg1, String jarg2, String jarg3, String[] jarg4, long[] jarg5, long[] jarg6);
+  public final static native void delete_DataTransferCallback(long jarg1);
+  public final static native void DataTransferCallback_dataTransferEvent(long jarg1, DataTransferCallback jarg1_, String jarg2, String jarg3, String jarg4, String jarg5, int jarg6);
+  public final static native void DataTransferCallback_dataTransferEventSwigExplicitDataTransferCallback(long jarg1, DataTransferCallback jarg1_, String jarg2, String jarg3, String jarg4, String jarg5, int jarg6);
+  public final static native long new_DataTransferCallback();
+  public final static native void DataTransferCallback_director_connect(DataTransferCallback obj, long cptr, boolean mem_own, boolean weak_global);
+  public final static native void DataTransferCallback_change_ownership(DataTransferCallback obj, long cptr, boolean take_or_release);
+  public final static native void publish(String jarg1, boolean jarg2, String jarg3);
+  public final static native void answerServerRequest(String jarg1, boolean jarg2);
+  public final static native void subscribeBuddy(String jarg1, String jarg2, boolean jarg3);
+  public final static native long getSubscriptions(String jarg1);
+  public final static native void setSubscriptions(String jarg1, long jarg2, StringVect jarg2_);
+  public final static native void delete_PresenceCallback(long jarg1);
+  public final static native void PresenceCallback_newServerSubscriptionRequest(long jarg1, PresenceCallback jarg1_, String jarg2);
+  public final static native void PresenceCallback_newServerSubscriptionRequestSwigExplicitPresenceCallback(long jarg1, PresenceCallback jarg1_, String jarg2);
+  public final static native void PresenceCallback_serverError(long jarg1, PresenceCallback jarg1_, String jarg2, String jarg3, String jarg4);
+  public final static native void PresenceCallback_serverErrorSwigExplicitPresenceCallback(long jarg1, PresenceCallback jarg1_, String jarg2, String jarg3, String jarg4);
+  public final static native void PresenceCallback_newBuddyNotification(long jarg1, PresenceCallback jarg1_, String jarg2, String jarg3, int jarg4, String jarg5);
+  public final static native void PresenceCallback_newBuddyNotificationSwigExplicitPresenceCallback(long jarg1, PresenceCallback jarg1_, String jarg2, String jarg3, int jarg4, String jarg5);
+  public final static native void PresenceCallback_nearbyPeerNotification(long jarg1, PresenceCallback jarg1_, String jarg2, String jarg3, int jarg4, String jarg5);
+  public final static native void PresenceCallback_nearbyPeerNotificationSwigExplicitPresenceCallback(long jarg1, PresenceCallback jarg1_, String jarg2, String jarg3, int jarg4, String jarg5);
+  public final static native void PresenceCallback_subscriptionStateChanged(long jarg1, PresenceCallback jarg1_, String jarg2, String jarg3, int jarg4);
+  public final static native void PresenceCallback_subscriptionStateChangedSwigExplicitPresenceCallback(long jarg1, PresenceCallback jarg1_, String jarg2, String jarg3, int jarg4);
+  public final static native long new_PresenceCallback();
+  public final static native void PresenceCallback_director_connect(PresenceCallback obj, long cptr, boolean mem_own, boolean weak_global);
+  public final static native void PresenceCallback_change_ownership(PresenceCallback obj, long cptr, boolean take_or_release);
+  public final static native void setVideoFrame(byte[] jarg1, int jarg2, long jarg3, int jarg4, int jarg5, int jarg6);
+  public final static native long acquireNativeWindow(java.lang.Object jarg1);
+  public final static native void releaseNativeWindow(long jarg1);
+  public final static native void setNativeWindowGeometry(long jarg1, int jarg2, int jarg3);
+  public final static native void registerVideoCallback(String jarg1, long jarg2);
+  public final static native void unregisterVideoCallback(String jarg1, long jarg2);
+  public final static native void captureVideoFrame(java.lang.Object jarg1, int jarg2);
+  public final static native void captureVideoPacket(java.lang.Object jarg1, int jarg2, int jarg3, boolean jarg4, long jarg5, int jarg6);
+  public final static native void setDefaultDevice(String jarg1);
+  public final static native String getDefaultDevice();
+  public final static native void startCamera();
+  public final static native void stopCamera();
+  public final static native boolean hasCameraStarted();
+  public final static native void startAudioDevice();
+  public final static native void stopAudioDevice();
+  public final static native boolean switchInput__SWIG_1(String jarg1);
+  public final static native boolean switchToCamera();
+  public final static native long getSettings(String jarg1);
+  public final static native void applySettings(String jarg1, long jarg2, StringMap jarg2_);
+  public final static native void addVideoDevice(String jarg1);
+  public final static native void removeVideoDevice(String jarg1);
+  public final static native void setDeviceOrientation(String jarg1, int jarg2);
+  public final static native void registerSinkTarget(String jarg1, long jarg2);
+  public final static native String startLocalRecorder(boolean jarg1, String jarg2);
+  public final static native void stopLocalRecorder(String jarg1);
+  public final static native boolean getDecodingAccelerated();
+  public final static native void setDecodingAccelerated(boolean jarg1);
+  public final static native boolean getEncodingAccelerated();
+  public final static native void setEncodingAccelerated(boolean jarg1);
+  public final static native void delete_VideoCallback(long jarg1);
+  public final static native void VideoCallback_getCameraInfo(long jarg1, VideoCallback jarg1_, String jarg2, long jarg3, IntVect jarg3_, long jarg4, UintVect jarg4_, long jarg5, UintVect jarg5_);
+  public final static native void VideoCallback_getCameraInfoSwigExplicitVideoCallback(long jarg1, VideoCallback jarg1_, String jarg2, long jarg3, IntVect jarg3_, long jarg4, UintVect jarg4_, long jarg5, UintVect jarg5_);
+  public final static native void VideoCallback_setParameters(long jarg1, VideoCallback jarg1_, String jarg2, int jarg3, int jarg4, int jarg5, int jarg6);
+  public final static native void VideoCallback_setParametersSwigExplicitVideoCallback(long jarg1, VideoCallback jarg1_, String jarg2, int jarg3, int jarg4, int jarg5, int jarg6);
+  public final static native void VideoCallback_setBitrate(long jarg1, VideoCallback jarg1_, String jarg2, int jarg3);
+  public final static native void VideoCallback_setBitrateSwigExplicitVideoCallback(long jarg1, VideoCallback jarg1_, String jarg2, int jarg3);
+  public final static native void VideoCallback_requestKeyFrame(long jarg1, VideoCallback jarg1_);
+  public final static native void VideoCallback_requestKeyFrameSwigExplicitVideoCallback(long jarg1, VideoCallback jarg1_);
+  public final static native void VideoCallback_startCapture(long jarg1, VideoCallback jarg1_, String jarg2);
+  public final static native void VideoCallback_startCaptureSwigExplicitVideoCallback(long jarg1, VideoCallback jarg1_, String jarg2);
+  public final static native void VideoCallback_stopCapture(long jarg1, VideoCallback jarg1_);
+  public final static native void VideoCallback_stopCaptureSwigExplicitVideoCallback(long jarg1, VideoCallback jarg1_);
+  public final static native void VideoCallback_decodingStarted(long jarg1, VideoCallback jarg1_, String jarg2, String jarg3, int jarg4, int jarg5, boolean jarg6);
+  public final static native void VideoCallback_decodingStartedSwigExplicitVideoCallback(long jarg1, VideoCallback jarg1_, String jarg2, String jarg3, int jarg4, int jarg5, boolean jarg6);
+  public final static native void VideoCallback_decodingStopped(long jarg1, VideoCallback jarg1_, String jarg2, String jarg3, boolean jarg4);
+  public final static native void VideoCallback_decodingStoppedSwigExplicitVideoCallback(long jarg1, VideoCallback jarg1_, String jarg2, String jarg3, boolean jarg4);
+  public final static native long new_VideoCallback();
+  public final static native void VideoCallback_director_connect(VideoCallback obj, long cptr, boolean mem_own, boolean weak_global);
+  public final static native void VideoCallback_change_ownership(VideoCallback obj, long cptr, boolean take_or_release);
+  public final static native boolean loadPlugin(String jarg1);
+  public final static native boolean unloadPlugin(String jarg1);
+  public final static native long getPluginDetails(String jarg1);
+  public final static native long getPluginPreferences(String jarg1);
+  public final static native boolean setPluginPreference(String jarg1, String jarg2, String jarg3);
+  public final static native long getPluginPreferencesValues(String jarg1);
+  public final static native boolean resetPluginPreferencesValues(String jarg1);
+  public final static native long getInstalledPlugins();
+  public final static native long getLoadedPlugins();
+  public final static native int installPlugin(String jarg1, boolean jarg2);
+  public final static native int uninstallPlugin(String jarg1);
+  public final static native long getCallMediaHandlers();
+  public final static native long getChatHandlers();
+  public final static native void toggleCallMediaHandler(String jarg1, String jarg2, boolean jarg3);
+  public final static native void toggleChatHandler(String jarg1, String jarg2, String jarg3, boolean jarg4);
+  public final static native long getCallMediaHandlerDetails(String jarg1);
+  public final static native long getCallMediaHandlerStatus(String jarg1);
+  public final static native long getChatHandlerDetails(String jarg1);
+  public final static native long getChatHandlerStatus(String jarg1, String jarg2);
+  public final static native boolean getPluginsEnabled();
+  public final static native void setPluginsEnabled(boolean jarg1);
+  public final static native String startConversation(String jarg1);
+  public final static native void acceptConversationRequest(String jarg1, String jarg2);
+  public final static native void declineConversationRequest(String jarg1, String jarg2);
+  public final static native boolean removeConversation(String jarg1, String jarg2);
+  public final static native long getConversations(String jarg1);
+  public final static native long getConversationRequests(String jarg1);
+  public final static native void updateConversationInfos(String jarg1, String jarg2, long jarg3, StringMap jarg3_);
+  public final static native long conversationInfos(String jarg1, String jarg2);
+  public final static native void addConversationMember(String jarg1, String jarg2, String jarg3);
+  public final static native void removeConversationMember(String jarg1, String jarg2, String jarg3);
+  public final static native long getConversationMembers(String jarg1, String jarg2);
+  public final static native void sendMessage(String jarg1, String jarg2, String jarg3, String jarg4);
+  public final static native long loadConversationMessages(String jarg1, String jarg2, String jarg3, long jarg4);
+  public final static native long countInteractions(String jarg1, String jarg2, String jarg3, String jarg4, String jarg5);
+  public final static native void delete_ConversationCallback(long jarg1);
+  public final static native void ConversationCallback_conversationLoaded(long jarg1, ConversationCallback jarg1_, long jarg2, String jarg3, String jarg4, long jarg5, VectMap jarg5_);
+  public final static native void ConversationCallback_conversationLoadedSwigExplicitConversationCallback(long jarg1, ConversationCallback jarg1_, long jarg2, String jarg3, String jarg4, long jarg5, VectMap jarg5_);
+  public final static native void ConversationCallback_messageReceived(long jarg1, ConversationCallback jarg1_, String jarg2, String jarg3, long jarg4, StringMap jarg4_);
+  public final static native void ConversationCallback_messageReceivedSwigExplicitConversationCallback(long jarg1, ConversationCallback jarg1_, String jarg2, String jarg3, long jarg4, StringMap jarg4_);
+  public final static native void ConversationCallback_conversationRequestReceived(long jarg1, ConversationCallback jarg1_, String jarg2, String jarg3, long jarg4, StringMap jarg4_);
+  public final static native void ConversationCallback_conversationRequestReceivedSwigExplicitConversationCallback(long jarg1, ConversationCallback jarg1_, String jarg2, String jarg3, long jarg4, StringMap jarg4_);
+  public final static native void ConversationCallback_conversationRequestDeclined(long jarg1, ConversationCallback jarg1_, String jarg2, String jarg3);
+  public final static native void ConversationCallback_conversationRequestDeclinedSwigExplicitConversationCallback(long jarg1, ConversationCallback jarg1_, String jarg2, String jarg3);
+  public final static native void ConversationCallback_conversationReady(long jarg1, ConversationCallback jarg1_, String jarg2, String jarg3);
+  public final static native void ConversationCallback_conversationReadySwigExplicitConversationCallback(long jarg1, ConversationCallback jarg1_, String jarg2, String jarg3);
+  public final static native void ConversationCallback_conversationRemoved(long jarg1, ConversationCallback jarg1_, String jarg2, String jarg3);
+  public final static native void ConversationCallback_conversationRemovedSwigExplicitConversationCallback(long jarg1, ConversationCallback jarg1_, String jarg2, String jarg3);
+  public final static native void ConversationCallback_conversationMemberEvent(long jarg1, ConversationCallback jarg1_, String jarg2, String jarg3, String jarg4, int jarg5);
+  public final static native void ConversationCallback_conversationMemberEventSwigExplicitConversationCallback(long jarg1, ConversationCallback jarg1_, String jarg2, String jarg3, String jarg4, int jarg5);
+  public final static native void ConversationCallback_onConversationError(long jarg1, ConversationCallback jarg1_, String jarg2, String jarg3, long jarg4, String jarg5);
+  public final static native void ConversationCallback_onConversationErrorSwigExplicitConversationCallback(long jarg1, ConversationCallback jarg1_, String jarg2, String jarg3, long jarg4, String jarg5);
+  public final static native long new_ConversationCallback();
+  public final static native void ConversationCallback_director_connect(ConversationCallback obj, long cptr, boolean mem_own, boolean weak_global);
+  public final static native void ConversationCallback_change_ownership(ConversationCallback obj, long cptr, boolean take_or_release);
+  public final static native void init(long jarg1, ConfigurationCallback jarg1_, long jarg2, Callback jarg2_, long jarg3, PresenceCallback jarg3_, long jarg4, DataTransferCallback jarg4_, long jarg5, VideoCallback jarg5_, long jarg6, ConversationCallback jarg6_);
+
+  public static void SwigDirector_Callback_callStateChanged(Callback jself, String call_id, String state, int detail_code) {
+    jself.callStateChanged(call_id, state, detail_code);
+  }
+  public static void SwigDirector_Callback_transferFailed(Callback jself) {
+    jself.transferFailed();
+  }
+  public static void SwigDirector_Callback_transferSucceeded(Callback jself) {
+    jself.transferSucceeded();
+  }
+  public static void SwigDirector_Callback_recordPlaybackStopped(Callback jself, String path) {
+    jself.recordPlaybackStopped(path);
+  }
+  public static void SwigDirector_Callback_voiceMailNotify(Callback jself, String accountId, int newCount, int oldCount, int urgentCount) {
+    jself.voiceMailNotify(accountId, newCount, oldCount, urgentCount);
+  }
+  public static void SwigDirector_Callback_incomingMessage(Callback jself, String id, String from, long messages) {
+    jself.incomingMessage(id, from, new StringMap(messages, false));
+  }
+  public static void SwigDirector_Callback_incomingCall(Callback jself, String account_id, String call_id, String from) {
+    jself.incomingCall(account_id, call_id, from);
+  }
+  public static void SwigDirector_Callback_incomingCallWithMedia(Callback jself, String account_id, String call_id, String from, long mediaList) {
+    jself.incomingCallWithMedia(account_id, call_id, from, new VectMap(mediaList, false));
+  }
+  public static void SwigDirector_Callback_mediaChangeRequested(Callback jself, String account_id, String call_id, long mediaList) {
+    jself.mediaChangeRequested(account_id, call_id, new VectMap(mediaList, false));
+  }
+  public static void SwigDirector_Callback_recordPlaybackFilepath(Callback jself, String id, String filename) {
+    jself.recordPlaybackFilepath(id, filename);
+  }
+  public static void SwigDirector_Callback_conferenceCreated(Callback jself, String conf_id) {
+    jself.conferenceCreated(conf_id);
+  }
+  public static void SwigDirector_Callback_conferenceChanged(Callback jself, String conf_id, String state) {
+    jself.conferenceChanged(conf_id, state);
+  }
+  public static void SwigDirector_Callback_conferenceRemoved(Callback jself, String conf_id) {
+    jself.conferenceRemoved(conf_id);
+  }
+  public static void SwigDirector_Callback_updatePlaybackScale(Callback jself, String filepath, int position, int scale) {
+    jself.updatePlaybackScale(filepath, position, scale);
+  }
+  public static void SwigDirector_Callback_newCall(Callback jself, String account_id, String call_id, String to) {
+    jself.newCall(account_id, call_id, to);
+  }
+  public static void SwigDirector_Callback_sipCallStateChange(Callback jself, String call_id, String state, int code) {
+    jself.sipCallStateChange(call_id, state, code);
+  }
+  public static void SwigDirector_Callback_recordingStateChanged(Callback jself, String call_id, int code) {
+    jself.recordingStateChanged(call_id, code);
+  }
+  public static void SwigDirector_Callback_recordStateChange(Callback jself, String call_id, int state) {
+    jself.recordStateChange(call_id, state);
+  }
+  public static void SwigDirector_Callback_onRtcpReportReceived(Callback jself, String call_id, long stats) {
+    jself.onRtcpReportReceived(call_id, new IntegerMap(stats, false));
+  }
+  public static void SwigDirector_Callback_onConferenceInfosUpdated(Callback jself, String confId, long infos) {
+    jself.onConferenceInfosUpdated(confId, new VectMap(infos, false));
+  }
+  public static void SwigDirector_Callback_peerHold(Callback jself, String call_id, boolean holding) {
+    jself.peerHold(call_id, holding);
+  }
+  public static void SwigDirector_Callback_connectionUpdate(Callback jself, String id, int state) {
+    jself.connectionUpdate(id, state);
+  }
+  public static void SwigDirector_Callback_remoteRecordingChanged(Callback jself, String call_id, String peer_number, boolean state) {
+    jself.remoteRecordingChanged(call_id, peer_number, state);
+  }
+  public static void SwigDirector_Callback_mediaNegotiationStatus(Callback jself, String call_id, String event, long mediaList) {
+    jself.mediaNegotiationStatus(call_id, event, new VectMap(mediaList, false));
+  }
+  public static void SwigDirector_ConfigurationCallback_volumeChanged(ConfigurationCallback jself, String device, int value) {
+    jself.volumeChanged(device, value);
+  }
+  public static void SwigDirector_ConfigurationCallback_accountsChanged(ConfigurationCallback jself) {
+    jself.accountsChanged();
+  }
+  public static void SwigDirector_ConfigurationCallback_historyChanged(ConfigurationCallback jself) {
+    jself.historyChanged();
+  }
+  public static void SwigDirector_ConfigurationCallback_stunStatusFailure(ConfigurationCallback jself, String account_id) {
+    jself.stunStatusFailure(account_id);
+  }
+  public static void SwigDirector_ConfigurationCallback_accountDetailsChanged(ConfigurationCallback jself, String account_id, long details) {
+    jself.accountDetailsChanged(account_id, new StringMap(details, false));
+  }
+  public static void SwigDirector_ConfigurationCallback_profileReceived(ConfigurationCallback jself, String arg0, String arg1, String arg2) {
+    jself.profileReceived(arg0, arg1, arg2);
+  }
+  public static void SwigDirector_ConfigurationCallback_registrationStateChanged(ConfigurationCallback jself, String account_id, String state, int code, String detail_str) {
+    jself.registrationStateChanged(account_id, state, code, detail_str);
+  }
+  public static void SwigDirector_ConfigurationCallback_volatileAccountDetailsChanged(ConfigurationCallback jself, String account_id, long details) {
+    jself.volatileAccountDetailsChanged(account_id, new StringMap(details, false));
+  }
+  public static void SwigDirector_ConfigurationCallback_incomingAccountMessage(ConfigurationCallback jself, String arg0, String arg1, String arg2, long arg3) {
+    jself.incomingAccountMessage(arg0, arg1, arg2, new StringMap(arg3, false));
+  }
+  public static void SwigDirector_ConfigurationCallback_accountMessageStatusChanged(ConfigurationCallback jself, String arg0, String arg1, String arg2, String arg3, int arg4) {
+    jself.accountMessageStatusChanged(arg0, arg1, arg2, arg3, arg4);
+  }
+  public static void SwigDirector_ConfigurationCallback_composingStatusChanged(ConfigurationCallback jself, String arg0, String arg1, String arg2, int arg3) {
+    jself.composingStatusChanged(arg0, arg1, arg2, arg3);
+  }
+  public static void SwigDirector_ConfigurationCallback_knownDevicesChanged(ConfigurationCallback jself, String arg0, long arg1) {
+    jself.knownDevicesChanged(arg0, new StringMap(arg1, false));
+  }
+  public static void SwigDirector_ConfigurationCallback_exportOnRingEnded(ConfigurationCallback jself, String arg0, int arg1, String arg2) {
+    jself.exportOnRingEnded(arg0, arg1, arg2);
+  }
+  public static void SwigDirector_ConfigurationCallback_incomingTrustRequest(ConfigurationCallback jself, String arg0, String arg1, String arg2, long arg3, long received) {
+    jself.incomingTrustRequest(arg0, arg1, arg2, new Blob(arg3, false), received);
+  }
+  public static void SwigDirector_ConfigurationCallback_contactAdded(ConfigurationCallback jself, String arg0, String arg1, boolean confirmed) {
+    jself.contactAdded(arg0, arg1, confirmed);
+  }
+  public static void SwigDirector_ConfigurationCallback_contactRemoved(ConfigurationCallback jself, String arg0, String arg1, boolean banned) {
+    jself.contactRemoved(arg0, arg1, banned);
+  }
+  public static void SwigDirector_ConfigurationCallback_certificatePinned(ConfigurationCallback jself, String arg0) {
+    jself.certificatePinned(arg0);
+  }
+  public static void SwigDirector_ConfigurationCallback_certificatePathPinned(ConfigurationCallback jself, String arg0, long arg1) {
+    jself.certificatePathPinned(arg0, new StringVect(arg1, false));
+  }
+  public static void SwigDirector_ConfigurationCallback_certificateExpired(ConfigurationCallback jself, String arg0) {
+    jself.certificateExpired(arg0);
+  }
+  public static void SwigDirector_ConfigurationCallback_certificateStateChanged(ConfigurationCallback jself, String arg0, String arg1, String arg2) {
+    jself.certificateStateChanged(arg0, arg1, arg2);
+  }
+  public static void SwigDirector_ConfigurationCallback_errorAlert(ConfigurationCallback jself, int alert) {
+    jself.errorAlert(alert);
+  }
+  public static void SwigDirector_ConfigurationCallback_getHardwareAudioFormat(ConfigurationCallback jself, long arg0) {
+    jself.getHardwareAudioFormat((arg0 == 0) ? null : new IntVect(arg0, false));
+  }
+  public static void SwigDirector_ConfigurationCallback_getAppDataPath(ConfigurationCallback jself, String arg0, long arg1) {
+    jself.getAppDataPath(arg0, (arg1 == 0) ? null : new StringVect(arg1, false));
+  }
+  public static void SwigDirector_ConfigurationCallback_getDeviceName(ConfigurationCallback jself, long arg0) {
+    jself.getDeviceName((arg0 == 0) ? null : new StringVect(arg0, false));
+  }
+  public static void SwigDirector_ConfigurationCallback_nameRegistrationEnded(ConfigurationCallback jself, String arg0, int state, String arg2) {
+    jself.nameRegistrationEnded(arg0, state, arg2);
+  }
+  public static void SwigDirector_ConfigurationCallback_registeredNameFound(ConfigurationCallback jself, String arg0, int state, String arg2, String arg3) {
+    jself.registeredNameFound(arg0, state, arg2, arg3);
+  }
+  public static void SwigDirector_ConfigurationCallback_userSearchEnded(ConfigurationCallback jself, String arg0, int state, String arg2, long arg3) {
+    jself.userSearchEnded(arg0, state, arg2, new VectMap(arg3, false));
+  }
+  public static void SwigDirector_ConfigurationCallback_migrationEnded(ConfigurationCallback jself, String arg0, String arg1) {
+    jself.migrationEnded(arg0, arg1);
+  }
+  public static void SwigDirector_ConfigurationCallback_deviceRevocationEnded(ConfigurationCallback jself, String arg0, String arg1, int arg2) {
+    jself.deviceRevocationEnded(arg0, arg1, arg2);
+  }
+  public static void SwigDirector_ConfigurationCallback_accountProfileReceived(ConfigurationCallback jself, String arg0, String arg1, String arg2) {
+    jself.accountProfileReceived(arg0, arg1, arg2);
+  }
+  public static void SwigDirector_ConfigurationCallback_hardwareDecodingChanged(ConfigurationCallback jself, boolean arg0) {
+    jself.hardwareDecodingChanged(arg0);
+  }
+  public static void SwigDirector_ConfigurationCallback_hardwareEncodingChanged(ConfigurationCallback jself, boolean arg0) {
+    jself.hardwareEncodingChanged(arg0);
+  }
+  public static void SwigDirector_ConfigurationCallback_audioMeter(ConfigurationCallback jself, String arg0, float arg1) {
+    jself.audioMeter(arg0, arg1);
+  }
+  public static void SwigDirector_ConfigurationCallback_messageSend(ConfigurationCallback jself, String arg0) {
+    jself.messageSend(arg0);
+  }
+  public static void SwigDirector_DataTransferCallback_dataTransferEvent(DataTransferCallback jself, String accountId, String conversationId, String interactionId, String fileId, int eventCode) {
+    jself.dataTransferEvent(accountId, conversationId, interactionId, fileId, eventCode);
+  }
+  public static void SwigDirector_PresenceCallback_newServerSubscriptionRequest(PresenceCallback jself, String arg0) {
+    jself.newServerSubscriptionRequest(arg0);
+  }
+  public static void SwigDirector_PresenceCallback_serverError(PresenceCallback jself, String arg0, String arg1, String arg2) {
+    jself.serverError(arg0, arg1, arg2);
+  }
+  public static void SwigDirector_PresenceCallback_newBuddyNotification(PresenceCallback jself, String arg0, String arg1, int arg2, String arg3) {
+    jself.newBuddyNotification(arg0, arg1, arg2, arg3);
+  }
+  public static void SwigDirector_PresenceCallback_nearbyPeerNotification(PresenceCallback jself, String arg0, String arg1, int arg2, String arg3) {
+    jself.nearbyPeerNotification(arg0, arg1, arg2, arg3);
+  }
+  public static void SwigDirector_PresenceCallback_subscriptionStateChanged(PresenceCallback jself, String arg0, String arg1, int arg2) {
+    jself.subscriptionStateChanged(arg0, arg1, arg2);
+  }
+  public static void SwigDirector_VideoCallback_getCameraInfo(VideoCallback jself, String device, long formats, long sizes, long rates) {
+    jself.getCameraInfo(device, (formats == 0) ? null : new IntVect(formats, false), (sizes == 0) ? null : new UintVect(sizes, false), (rates == 0) ? null : new UintVect(rates, false));
+  }
+  public static void SwigDirector_VideoCallback_setParameters(VideoCallback jself, String arg0, int format, int width, int height, int rate) {
+    jself.setParameters(arg0, format, width, height, rate);
+  }
+  public static void SwigDirector_VideoCallback_setBitrate(VideoCallback jself, String arg0, int bitrate) {
+    jself.setBitrate(arg0, bitrate);
+  }
+  public static void SwigDirector_VideoCallback_requestKeyFrame(VideoCallback jself) {
+    jself.requestKeyFrame();
+  }
+  public static void SwigDirector_VideoCallback_startCapture(VideoCallback jself, String camid) {
+    jself.startCapture(camid);
+  }
+  public static void SwigDirector_VideoCallback_stopCapture(VideoCallback jself) {
+    jself.stopCapture();
+  }
+  public static void SwigDirector_VideoCallback_decodingStarted(VideoCallback jself, String id, String shm_path, int w, int h, boolean is_mixer) {
+    jself.decodingStarted(id, shm_path, w, h, is_mixer);
+  }
+  public static void SwigDirector_VideoCallback_decodingStopped(VideoCallback jself, String id, String shm_path, boolean is_mixer) {
+    jself.decodingStopped(id, shm_path, is_mixer);
+  }
+  public static void SwigDirector_ConversationCallback_conversationLoaded(ConversationCallback jself, long arg0, String arg1, String arg2, long arg3) {
+    jself.conversationLoaded(arg0, arg1, arg2, new VectMap(arg3, true));
+  }
+  public static void SwigDirector_ConversationCallback_messageReceived(ConversationCallback jself, String arg0, String arg1, long arg2) {
+    jself.messageReceived(arg0, arg1, new StringMap(arg2, true));
+  }
+  public static void SwigDirector_ConversationCallback_conversationRequestReceived(ConversationCallback jself, String arg0, String arg1, long arg2) {
+    jself.conversationRequestReceived(arg0, arg1, new StringMap(arg2, true));
+  }
+  public static void SwigDirector_ConversationCallback_conversationRequestDeclined(ConversationCallback jself, String arg0, String arg1) {
+    jself.conversationRequestDeclined(arg0, arg1);
+  }
+  public static void SwigDirector_ConversationCallback_conversationReady(ConversationCallback jself, String arg0, String arg1) {
+    jself.conversationReady(arg0, arg1);
+  }
+  public static void SwigDirector_ConversationCallback_conversationRemoved(ConversationCallback jself, String arg0, String arg1) {
+    jself.conversationRemoved(arg0, arg1);
+  }
+  public static void SwigDirector_ConversationCallback_conversationMemberEvent(ConversationCallback jself, String arg0, String arg1, String arg2, int arg3) {
+    jself.conversationMemberEvent(arg0, arg1, arg2, arg3);
+  }
+  public static void SwigDirector_ConversationCallback_onConversationError(ConversationCallback jself, String arg0, String arg1, long arg2, String arg3) {
+    jself.onConversationError(arg0, arg1, arg2, arg3);
+  }
+
+  private final static native void swig_module_init();
+  static {
+    swig_module_init();
+  }
+}
diff --git a/ring-android/libjamiclient/src/main/java/net/jami/daemon/Message.java b/ring-android/libjamiclient/src/main/java/net/jami/daemon/Message.java
new file mode 100644
index 0000000000000000000000000000000000000000..bb1d86a9f4be0b5770e5952f8ff737d7ae9b0c37
--- /dev/null
+++ b/ring-android/libjamiclient/src/main/java/net/jami/daemon/Message.java
@@ -0,0 +1,68 @@
+/* ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version 4.0.2
+ *
+ * Do not make changes to this file unless you know what you are doing--modify
+ * the SWIG interface file instead.
+ * ----------------------------------------------------------------------------- */
+
+package net.jami.daemon;
+
+public class Message {
+  private transient long swigCPtr;
+  protected transient boolean swigCMemOwn;
+
+  protected Message(long cPtr, boolean cMemoryOwn) {
+    swigCMemOwn = cMemoryOwn;
+    swigCPtr = cPtr;
+  }
+
+  protected static long getCPtr(Message obj) {
+    return (obj == null) ? 0 : obj.swigCPtr;
+  }
+
+  @SuppressWarnings("deprecation")
+  protected void finalize() {
+    delete();
+  }
+
+  public synchronized void delete() {
+    if (swigCPtr != 0) {
+      if (swigCMemOwn) {
+        swigCMemOwn = false;
+        JamiServiceJNI.delete_Message(swigCPtr);
+      }
+      swigCPtr = 0;
+    }
+  }
+
+  public void setFrom(String value) {
+    JamiServiceJNI.Message_from_set(swigCPtr, this, value);
+  }
+
+  public String getFrom() {
+    return JamiServiceJNI.Message_from_get(swigCPtr, this);
+  }
+
+  public void setPayloads(StringMap value) {
+    JamiServiceJNI.Message_payloads_set(swigCPtr, this, StringMap.getCPtr(value), value);
+  }
+
+  public StringMap getPayloads() {
+    long cPtr = JamiServiceJNI.Message_payloads_get(swigCPtr, this);
+    return (cPtr == 0) ? null : new StringMap(cPtr, false);
+  }
+
+  public void setReceived(long value) {
+    JamiServiceJNI.Message_received_set(swigCPtr, this, value);
+  }
+
+  public long getReceived() {
+    return JamiServiceJNI.Message_received_get(swigCPtr, this);
+  }
+
+  public Message() {
+    this(JamiServiceJNI.new_Message(), true);
+  }
+
+}
diff --git a/ring-android/libjamiclient/src/main/java/net/jami/daemon/MessageVect.java b/ring-android/libjamiclient/src/main/java/net/jami/daemon/MessageVect.java
new file mode 100644
index 0000000000000000000000000000000000000000..cb8d287d223d4aa15d81ccfc625d527d9eeda8dc
--- /dev/null
+++ b/ring-android/libjamiclient/src/main/java/net/jami/daemon/MessageVect.java
@@ -0,0 +1,144 @@
+/* ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version 4.0.2
+ *
+ * Do not make changes to this file unless you know what you are doing--modify
+ * the SWIG interface file instead.
+ * ----------------------------------------------------------------------------- */
+
+package net.jami.daemon;
+
+public class MessageVect extends java.util.AbstractList<Message> implements java.util.RandomAccess {
+  private transient long swigCPtr;
+  protected transient boolean swigCMemOwn;
+
+  protected MessageVect(long cPtr, boolean cMemoryOwn) {
+    swigCMemOwn = cMemoryOwn;
+    swigCPtr = cPtr;
+  }
+
+  protected static long getCPtr(MessageVect obj) {
+    return (obj == null) ? 0 : obj.swigCPtr;
+  }
+
+  @SuppressWarnings("deprecation")
+  protected void finalize() {
+    delete();
+  }
+
+  public synchronized void delete() {
+    if (swigCPtr != 0) {
+      if (swigCMemOwn) {
+        swigCMemOwn = false;
+        JamiServiceJNI.delete_MessageVect(swigCPtr);
+      }
+      swigCPtr = 0;
+    }
+  }
+
+  public MessageVect(Message[] initialElements) {
+    this();
+    reserve(initialElements.length);
+
+    for (Message element : initialElements) {
+      add(element);
+    }
+  }
+
+  public MessageVect(Iterable<Message> initialElements) {
+    this();
+    for (Message element : initialElements) {
+      add(element);
+    }
+  }
+
+  public Message get(int index) {
+    return doGet(index);
+  }
+
+  public Message set(int index, Message e) {
+    return doSet(index, e);
+  }
+
+  public boolean add(Message e) {
+    modCount++;
+    doAdd(e);
+    return true;
+  }
+
+  public void add(int index, Message e) {
+    modCount++;
+    doAdd(index, e);
+  }
+
+  public Message remove(int index) {
+    modCount++;
+    return doRemove(index);
+  }
+
+  protected void removeRange(int fromIndex, int toIndex) {
+    modCount++;
+    doRemoveRange(fromIndex, toIndex);
+  }
+
+  public int size() {
+    return doSize();
+  }
+
+  public MessageVect() {
+    this(JamiServiceJNI.new_MessageVect__SWIG_0(), true);
+  }
+
+  public MessageVect(MessageVect other) {
+    this(JamiServiceJNI.new_MessageVect__SWIG_1(MessageVect.getCPtr(other), other), true);
+  }
+
+  public long capacity() {
+    return JamiServiceJNI.MessageVect_capacity(swigCPtr, this);
+  }
+
+  public void reserve(long n) {
+    JamiServiceJNI.MessageVect_reserve(swigCPtr, this, n);
+  }
+
+  public boolean isEmpty() {
+    return JamiServiceJNI.MessageVect_isEmpty(swigCPtr, this);
+  }
+
+  public void clear() {
+    JamiServiceJNI.MessageVect_clear(swigCPtr, this);
+  }
+
+  public MessageVect(int count, Message value) {
+    this(JamiServiceJNI.new_MessageVect__SWIG_2(count, Message.getCPtr(value), value), true);
+  }
+
+  private int doSize() {
+    return JamiServiceJNI.MessageVect_doSize(swigCPtr, this);
+  }
+
+  private void doAdd(Message x) {
+    JamiServiceJNI.MessageVect_doAdd__SWIG_0(swigCPtr, this, Message.getCPtr(x), x);
+  }
+
+  private void doAdd(int index, Message x) {
+    JamiServiceJNI.MessageVect_doAdd__SWIG_1(swigCPtr, this, index, Message.getCPtr(x), x);
+  }
+
+  private Message doRemove(int index) {
+    return new Message(JamiServiceJNI.MessageVect_doRemove(swigCPtr, this, index), true);
+  }
+
+  private Message doGet(int index) {
+    return new Message(JamiServiceJNI.MessageVect_doGet(swigCPtr, this, index), false);
+  }
+
+  private Message doSet(int index, Message val) {
+    return new Message(JamiServiceJNI.MessageVect_doSet(swigCPtr, this, index, Message.getCPtr(val), val), true);
+  }
+
+  private void doRemoveRange(int fromIndex, int toIndex) {
+    JamiServiceJNI.MessageVect_doRemoveRange(swigCPtr, this, fromIndex, toIndex);
+  }
+
+}
diff --git a/ring-android/libjamiclient/src/main/java/net/jami/daemon/PresenceCallback.java b/ring-android/libjamiclient/src/main/java/net/jami/daemon/PresenceCallback.java
new file mode 100644
index 0000000000000000000000000000000000000000..1f0f316f4ef8ff6d5eed4f699120ca755ec42851
--- /dev/null
+++ b/ring-android/libjamiclient/src/main/java/net/jami/daemon/PresenceCallback.java
@@ -0,0 +1,79 @@
+/* ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version 4.0.2
+ *
+ * Do not make changes to this file unless you know what you are doing--modify
+ * the SWIG interface file instead.
+ * ----------------------------------------------------------------------------- */
+
+package net.jami.daemon;
+
+public class PresenceCallback {
+  private transient long swigCPtr;
+  protected transient boolean swigCMemOwn;
+
+  protected PresenceCallback(long cPtr, boolean cMemoryOwn) {
+    swigCMemOwn = cMemoryOwn;
+    swigCPtr = cPtr;
+  }
+
+  protected static long getCPtr(PresenceCallback obj) {
+    return (obj == null) ? 0 : obj.swigCPtr;
+  }
+
+  @SuppressWarnings("deprecation")
+  protected void finalize() {
+    delete();
+  }
+
+  public synchronized void delete() {
+    if (swigCPtr != 0) {
+      if (swigCMemOwn) {
+        swigCMemOwn = false;
+        JamiServiceJNI.delete_PresenceCallback(swigCPtr);
+      }
+      swigCPtr = 0;
+    }
+  }
+
+  protected void swigDirectorDisconnect() {
+    swigCMemOwn = false;
+    delete();
+  }
+
+  public void swigReleaseOwnership() {
+    swigCMemOwn = false;
+    JamiServiceJNI.PresenceCallback_change_ownership(this, swigCPtr, false);
+  }
+
+  public void swigTakeOwnership() {
+    swigCMemOwn = true;
+    JamiServiceJNI.PresenceCallback_change_ownership(this, swigCPtr, true);
+  }
+
+  public void newServerSubscriptionRequest(String arg0) {
+    if (getClass() == PresenceCallback.class) JamiServiceJNI.PresenceCallback_newServerSubscriptionRequest(swigCPtr, this, arg0); else JamiServiceJNI.PresenceCallback_newServerSubscriptionRequestSwigExplicitPresenceCallback(swigCPtr, this, arg0);
+  }
+
+  public void serverError(String arg0, String arg1, String arg2) {
+    if (getClass() == PresenceCallback.class) JamiServiceJNI.PresenceCallback_serverError(swigCPtr, this, arg0, arg1, arg2); else JamiServiceJNI.PresenceCallback_serverErrorSwigExplicitPresenceCallback(swigCPtr, this, arg0, arg1, arg2);
+  }
+
+  public void newBuddyNotification(String arg0, String arg1, int arg2, String arg3) {
+    if (getClass() == PresenceCallback.class) JamiServiceJNI.PresenceCallback_newBuddyNotification(swigCPtr, this, arg0, arg1, arg2, arg3); else JamiServiceJNI.PresenceCallback_newBuddyNotificationSwigExplicitPresenceCallback(swigCPtr, this, arg0, arg1, arg2, arg3);
+  }
+
+  public void nearbyPeerNotification(String arg0, String arg1, int arg2, String arg3) {
+    if (getClass() == PresenceCallback.class) JamiServiceJNI.PresenceCallback_nearbyPeerNotification(swigCPtr, this, arg0, arg1, arg2, arg3); else JamiServiceJNI.PresenceCallback_nearbyPeerNotificationSwigExplicitPresenceCallback(swigCPtr, this, arg0, arg1, arg2, arg3);
+  }
+
+  public void subscriptionStateChanged(String arg0, String arg1, int arg2) {
+    if (getClass() == PresenceCallback.class) JamiServiceJNI.PresenceCallback_subscriptionStateChanged(swigCPtr, this, arg0, arg1, arg2); else JamiServiceJNI.PresenceCallback_subscriptionStateChangedSwigExplicitPresenceCallback(swigCPtr, this, arg0, arg1, arg2);
+  }
+
+  public PresenceCallback() {
+    this(JamiServiceJNI.new_PresenceCallback(), true);
+    JamiServiceJNI.PresenceCallback_director_connect(this, swigCPtr, true, true);
+  }
+
+}
diff --git a/ring-android/libjamiclient/src/main/java/net/jami/daemon/StringMap.java b/ring-android/libjamiclient/src/main/java/net/jami/daemon/StringMap.java
new file mode 100644
index 0000000000000000000000000000000000000000..b311b7875e2bdef99e6c8073771abdc48c58384d
--- /dev/null
+++ b/ring-android/libjamiclient/src/main/java/net/jami/daemon/StringMap.java
@@ -0,0 +1,259 @@
+/* ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version 4.0.2
+ *
+ * Do not make changes to this file unless you know what you are doing--modify
+ * the SWIG interface file instead.
+ * ----------------------------------------------------------------------------- */
+
+package net.jami.daemon;
+
+public class StringMap extends java.util.AbstractMap<String, String> {
+  private transient long swigCPtr;
+  protected transient boolean swigCMemOwn;
+
+  protected StringMap(long cPtr, boolean cMemoryOwn) {
+    swigCMemOwn = cMemoryOwn;
+    swigCPtr = cPtr;
+  }
+
+  protected static long getCPtr(StringMap obj) {
+    return (obj == null) ? 0 : obj.swigCPtr;
+  }
+
+  @SuppressWarnings("deprecation")
+  protected void finalize() {
+    delete();
+  }
+
+  public synchronized void delete() {
+    if (swigCPtr != 0) {
+      if (swigCMemOwn) {
+        swigCMemOwn = false;
+        JamiServiceJNI.delete_StringMap(swigCPtr);
+      }
+      swigCPtr = 0;
+    }
+  }
+
+  public static StringMap toSwig(java.util.Map<String,String> in) {
+    StringMap n = new StringMap();
+    for (java.util.Map.Entry<String, String> entry : in.entrySet()) {
+      if (entry.getValue() != null) {
+        n.put(entry.getKey(), entry.getValue());
+      }
+    }
+    return n;
+  }
+
+  public java.util.HashMap<String,String> toNative() {
+    java.util.HashMap<String,String> out = new java.util.HashMap<>((int)size());
+    for (Entry<String, String> e : entrySet())
+        out.put(e.getKey(), e.getValue());
+    return out;
+  }
+
+  public java.util.HashMap<String,String> toNativeFromUtf8() {
+      java.util.HashMap<String,String> out = new java.util.HashMap<>((int)size());
+      StringVect keys = keys();
+      for (String s : keys) {
+        out.put(s, getRaw(s).toJavaString());
+      }
+      return out;
+  }
+
+
+  public int size() {
+    return sizeImpl();
+  }
+
+  public boolean containsKey(java.lang.Object key) {
+    if (!(key instanceof String)) {
+      return false;
+    }
+
+    return containsImpl((String)key);
+  }
+
+  public String get(java.lang.Object key) {
+    if (!(key instanceof String)) {
+      return null;
+    }
+
+    Iterator itr = find((String) key);
+    if (itr.isNot(end())) {
+      return itr.getValue();
+    }
+
+    return null;
+  }
+
+  public String put(String key, String value) {
+    Iterator itr = find((String) key);
+    if (itr.isNot(end())) {
+      String oldValue = itr.getValue();
+      itr.setValue(value);
+      return oldValue;
+    } else {
+      putUnchecked(key, value);
+      return null;
+    }
+  }
+
+  public String remove(java.lang.Object key) {
+    if (!(key instanceof String)) {
+      return null;
+    }
+
+    Iterator itr = find((String) key);
+    if (itr.isNot(end())) {
+      String oldValue = itr.getValue();
+      removeUnchecked(itr);
+      return oldValue;
+    } else {
+      return null;
+    }
+  }
+
+  public java.util.Set<Entry<String, String>> entrySet() {
+    java.util.Set<Entry<String, String>> setToReturn =
+        new java.util.HashSet<Entry<String, String>>();
+
+    Iterator itr = begin();
+    final Iterator end = end();
+    while (itr.isNot(end)) {
+      setToReturn.add(new Entry<String, String>() {
+        private Iterator iterator;
+
+        private Entry<String, String> init(Iterator iterator) {
+          this.iterator = iterator;
+          return this;
+        }
+
+        public String getKey() {
+          return iterator.getKey();
+        }
+
+        public String getValue() {
+          return iterator.getValue();
+        }
+
+        public String setValue(String newValue) {
+          String oldValue = iterator.getValue();
+          iterator.setValue(newValue);
+          return oldValue;
+        }
+      }.init(itr));
+      itr = itr.getNextUnchecked();
+    }
+
+    return setToReturn;
+  }
+
+  public StringMap() {
+    this(JamiServiceJNI.new_StringMap__SWIG_0(), true);
+  }
+
+  public StringMap(StringMap other) {
+    this(JamiServiceJNI.new_StringMap__SWIG_1(StringMap.getCPtr(other), other), true);
+  }
+
+  static protected class Iterator {
+    private transient long swigCPtr;
+    protected transient boolean swigCMemOwn;
+  
+    protected Iterator(long cPtr, boolean cMemoryOwn) {
+      swigCMemOwn = cMemoryOwn;
+      swigCPtr = cPtr;
+    }
+  
+    protected static long getCPtr(Iterator obj) {
+      return (obj == null) ? 0 : obj.swigCPtr;
+    }
+  
+    @SuppressWarnings("deprecation")
+    protected void finalize() {
+      delete();
+    }
+  
+    public synchronized void delete() {
+      if (swigCPtr != 0) {
+        if (swigCMemOwn) {
+          swigCMemOwn = false;
+          JamiServiceJNI.delete_StringMap_Iterator(swigCPtr);
+        }
+        swigCPtr = 0;
+      }
+    }
+  
+    private StringMap.Iterator getNextUnchecked() {
+      return new StringMap.Iterator(JamiServiceJNI.StringMap_Iterator_getNextUnchecked(swigCPtr, this), true);
+    }
+  
+    private boolean isNot(StringMap.Iterator other) {
+      return JamiServiceJNI.StringMap_Iterator_isNot(swigCPtr, this, StringMap.Iterator.getCPtr(other), other);
+    }
+  
+    private String getKey() {
+      return JamiServiceJNI.StringMap_Iterator_getKey(swigCPtr, this);
+    }
+  
+    private String getValue() {
+      return JamiServiceJNI.StringMap_Iterator_getValue(swigCPtr, this);
+    }
+  
+    private void setValue(String newValue) {
+      JamiServiceJNI.StringMap_Iterator_setValue(swigCPtr, this, newValue);
+    }
+  
+  }
+
+  public boolean isEmpty() {
+    return JamiServiceJNI.StringMap_isEmpty(swigCPtr, this);
+  }
+
+  public void clear() {
+    JamiServiceJNI.StringMap_clear(swigCPtr, this);
+  }
+
+  private StringMap.Iterator find(String key) {
+    return new StringMap.Iterator(JamiServiceJNI.StringMap_find(swigCPtr, this, key), true);
+  }
+
+  private StringMap.Iterator begin() {
+    return new StringMap.Iterator(JamiServiceJNI.StringMap_begin(swigCPtr, this), true);
+  }
+
+  private StringMap.Iterator end() {
+    return new StringMap.Iterator(JamiServiceJNI.StringMap_end(swigCPtr, this), true);
+  }
+
+  private int sizeImpl() {
+    return JamiServiceJNI.StringMap_sizeImpl(swigCPtr, this);
+  }
+
+  private boolean containsImpl(String key) {
+    return JamiServiceJNI.StringMap_containsImpl(swigCPtr, this, key);
+  }
+
+  private void putUnchecked(String key, String value) {
+    JamiServiceJNI.StringMap_putUnchecked(swigCPtr, this, key, value);
+  }
+
+  private void removeUnchecked(StringMap.Iterator itr) {
+    JamiServiceJNI.StringMap_removeUnchecked(swigCPtr, this, StringMap.Iterator.getCPtr(itr), itr);
+  }
+
+  public StringVect keys() {
+    return new StringVect(JamiServiceJNI.StringMap_keys(swigCPtr, this), true);
+  }
+
+  public void setRaw(String key, Blob value) {
+    JamiServiceJNI.StringMap_setRaw(swigCPtr, this, key, Blob.getCPtr(value), value);
+  }
+
+  public Blob getRaw(String key) {
+    return new Blob(JamiServiceJNI.StringMap_getRaw(swigCPtr, this, key), true);
+  }
+
+}
diff --git a/ring-android/libjamiclient/src/main/java/net/jami/daemon/StringVect.java b/ring-android/libjamiclient/src/main/java/net/jami/daemon/StringVect.java
new file mode 100644
index 0000000000000000000000000000000000000000..a9cbfc51ef753b1d45739659c39c16411e3ce256
--- /dev/null
+++ b/ring-android/libjamiclient/src/main/java/net/jami/daemon/StringVect.java
@@ -0,0 +1,144 @@
+/* ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version 4.0.2
+ *
+ * Do not make changes to this file unless you know what you are doing--modify
+ * the SWIG interface file instead.
+ * ----------------------------------------------------------------------------- */
+
+package net.jami.daemon;
+
+public class StringVect extends java.util.AbstractList<String> implements java.util.RandomAccess {
+  private transient long swigCPtr;
+  protected transient boolean swigCMemOwn;
+
+  protected StringVect(long cPtr, boolean cMemoryOwn) {
+    swigCMemOwn = cMemoryOwn;
+    swigCPtr = cPtr;
+  }
+
+  protected static long getCPtr(StringVect obj) {
+    return (obj == null) ? 0 : obj.swigCPtr;
+  }
+
+  @SuppressWarnings("deprecation")
+  protected void finalize() {
+    delete();
+  }
+
+  public synchronized void delete() {
+    if (swigCPtr != 0) {
+      if (swigCMemOwn) {
+        swigCMemOwn = false;
+        JamiServiceJNI.delete_StringVect(swigCPtr);
+      }
+      swigCPtr = 0;
+    }
+  }
+
+  public StringVect(String[] initialElements) {
+    this();
+    reserve(initialElements.length);
+
+    for (String element : initialElements) {
+      add(element);
+    }
+  }
+
+  public StringVect(Iterable<String> initialElements) {
+    this();
+    for (String element : initialElements) {
+      add(element);
+    }
+  }
+
+  public String get(int index) {
+    return doGet(index);
+  }
+
+  public String set(int index, String e) {
+    return doSet(index, e);
+  }
+
+  public boolean add(String e) {
+    modCount++;
+    doAdd(e);
+    return true;
+  }
+
+  public void add(int index, String e) {
+    modCount++;
+    doAdd(index, e);
+  }
+
+  public String remove(int index) {
+    modCount++;
+    return doRemove(index);
+  }
+
+  protected void removeRange(int fromIndex, int toIndex) {
+    modCount++;
+    doRemoveRange(fromIndex, toIndex);
+  }
+
+  public int size() {
+    return doSize();
+  }
+
+  public StringVect() {
+    this(JamiServiceJNI.new_StringVect__SWIG_0(), true);
+  }
+
+  public StringVect(StringVect other) {
+    this(JamiServiceJNI.new_StringVect__SWIG_1(StringVect.getCPtr(other), other), true);
+  }
+
+  public long capacity() {
+    return JamiServiceJNI.StringVect_capacity(swigCPtr, this);
+  }
+
+  public void reserve(long n) {
+    JamiServiceJNI.StringVect_reserve(swigCPtr, this, n);
+  }
+
+  public boolean isEmpty() {
+    return JamiServiceJNI.StringVect_isEmpty(swigCPtr, this);
+  }
+
+  public void clear() {
+    JamiServiceJNI.StringVect_clear(swigCPtr, this);
+  }
+
+  public StringVect(int count, String value) {
+    this(JamiServiceJNI.new_StringVect__SWIG_2(count, value), true);
+  }
+
+  private int doSize() {
+    return JamiServiceJNI.StringVect_doSize(swigCPtr, this);
+  }
+
+  private void doAdd(String x) {
+    JamiServiceJNI.StringVect_doAdd__SWIG_0(swigCPtr, this, x);
+  }
+
+  private void doAdd(int index, String x) {
+    JamiServiceJNI.StringVect_doAdd__SWIG_1(swigCPtr, this, index, x);
+  }
+
+  private String doRemove(int index) {
+    return JamiServiceJNI.StringVect_doRemove(swigCPtr, this, index);
+  }
+
+  private String doGet(int index) {
+    return JamiServiceJNI.StringVect_doGet(swigCPtr, this, index);
+  }
+
+  private String doSet(int index, String val) {
+    return JamiServiceJNI.StringVect_doSet(swigCPtr, this, index, val);
+  }
+
+  private void doRemoveRange(int fromIndex, int toIndex) {
+    JamiServiceJNI.StringVect_doRemoveRange(swigCPtr, this, fromIndex, toIndex);
+  }
+
+}
diff --git a/ring-android/libjamiclient/src/main/java/net/jami/daemon/UintVect.java b/ring-android/libjamiclient/src/main/java/net/jami/daemon/UintVect.java
new file mode 100644
index 0000000000000000000000000000000000000000..0b0c4bbfda4558a147fa64d0034e9beaf25d91dc
--- /dev/null
+++ b/ring-android/libjamiclient/src/main/java/net/jami/daemon/UintVect.java
@@ -0,0 +1,144 @@
+/* ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version 4.0.2
+ *
+ * Do not make changes to this file unless you know what you are doing--modify
+ * the SWIG interface file instead.
+ * ----------------------------------------------------------------------------- */
+
+package net.jami.daemon;
+
+public class UintVect extends java.util.AbstractList<Long> implements java.util.RandomAccess {
+  private transient long swigCPtr;
+  protected transient boolean swigCMemOwn;
+
+  protected UintVect(long cPtr, boolean cMemoryOwn) {
+    swigCMemOwn = cMemoryOwn;
+    swigCPtr = cPtr;
+  }
+
+  protected static long getCPtr(UintVect obj) {
+    return (obj == null) ? 0 : obj.swigCPtr;
+  }
+
+  @SuppressWarnings("deprecation")
+  protected void finalize() {
+    delete();
+  }
+
+  public synchronized void delete() {
+    if (swigCPtr != 0) {
+      if (swigCMemOwn) {
+        swigCMemOwn = false;
+        JamiServiceJNI.delete_UintVect(swigCPtr);
+      }
+      swigCPtr = 0;
+    }
+  }
+
+  public UintVect(long[] initialElements) {
+    this();
+    reserve(initialElements.length);
+
+    for (long element : initialElements) {
+      add(element);
+    }
+  }
+
+  public UintVect(Iterable<Long> initialElements) {
+    this();
+    for (long element : initialElements) {
+      add(element);
+    }
+  }
+
+  public Long get(int index) {
+    return doGet(index);
+  }
+
+  public Long set(int index, Long e) {
+    return doSet(index, e);
+  }
+
+  public boolean add(Long e) {
+    modCount++;
+    doAdd(e);
+    return true;
+  }
+
+  public void add(int index, Long e) {
+    modCount++;
+    doAdd(index, e);
+  }
+
+  public Long remove(int index) {
+    modCount++;
+    return doRemove(index);
+  }
+
+  protected void removeRange(int fromIndex, int toIndex) {
+    modCount++;
+    doRemoveRange(fromIndex, toIndex);
+  }
+
+  public int size() {
+    return doSize();
+  }
+
+  public UintVect() {
+    this(JamiServiceJNI.new_UintVect__SWIG_0(), true);
+  }
+
+  public UintVect(UintVect other) {
+    this(JamiServiceJNI.new_UintVect__SWIG_1(UintVect.getCPtr(other), other), true);
+  }
+
+  public long capacity() {
+    return JamiServiceJNI.UintVect_capacity(swigCPtr, this);
+  }
+
+  public void reserve(long n) {
+    JamiServiceJNI.UintVect_reserve(swigCPtr, this, n);
+  }
+
+  public boolean isEmpty() {
+    return JamiServiceJNI.UintVect_isEmpty(swigCPtr, this);
+  }
+
+  public void clear() {
+    JamiServiceJNI.UintVect_clear(swigCPtr, this);
+  }
+
+  public UintVect(int count, long value) {
+    this(JamiServiceJNI.new_UintVect__SWIG_2(count, value), true);
+  }
+
+  private int doSize() {
+    return JamiServiceJNI.UintVect_doSize(swigCPtr, this);
+  }
+
+  private void doAdd(long x) {
+    JamiServiceJNI.UintVect_doAdd__SWIG_0(swigCPtr, this, x);
+  }
+
+  private void doAdd(int index, long x) {
+    JamiServiceJNI.UintVect_doAdd__SWIG_1(swigCPtr, this, index, x);
+  }
+
+  private long doRemove(int index) {
+    return JamiServiceJNI.UintVect_doRemove(swigCPtr, this, index);
+  }
+
+  private long doGet(int index) {
+    return JamiServiceJNI.UintVect_doGet(swigCPtr, this, index);
+  }
+
+  private long doSet(int index, long val) {
+    return JamiServiceJNI.UintVect_doSet(swigCPtr, this, index, val);
+  }
+
+  private void doRemoveRange(int fromIndex, int toIndex) {
+    JamiServiceJNI.UintVect_doRemoveRange(swigCPtr, this, fromIndex, toIndex);
+  }
+
+}
diff --git a/ring-android/libjamiclient/src/main/java/net/jami/daemon/VectMap.java b/ring-android/libjamiclient/src/main/java/net/jami/daemon/VectMap.java
new file mode 100644
index 0000000000000000000000000000000000000000..93c3df14a01d65dc472219fea9a64a9a19bf658e
--- /dev/null
+++ b/ring-android/libjamiclient/src/main/java/net/jami/daemon/VectMap.java
@@ -0,0 +1,152 @@
+/* ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version 4.0.2
+ *
+ * Do not make changes to this file unless you know what you are doing--modify
+ * the SWIG interface file instead.
+ * ----------------------------------------------------------------------------- */
+
+package net.jami.daemon;
+
+public class VectMap extends java.util.AbstractList<StringMap> implements java.util.RandomAccess {
+  private transient long swigCPtr;
+  protected transient boolean swigCMemOwn;
+
+  protected VectMap(long cPtr, boolean cMemoryOwn) {
+    swigCMemOwn = cMemoryOwn;
+    swigCPtr = cPtr;
+  }
+
+  protected static long getCPtr(VectMap obj) {
+    return (obj == null) ? 0 : obj.swigCPtr;
+  }
+
+  @SuppressWarnings("deprecation")
+  protected void finalize() {
+    delete();
+  }
+
+  public synchronized void delete() {
+    if (swigCPtr != 0) {
+      if (swigCMemOwn) {
+        swigCMemOwn = false;
+        JamiServiceJNI.delete_VectMap(swigCPtr);
+      }
+      swigCPtr = 0;
+    }
+  }
+
+  public java.util.ArrayList<java.util.Map<String, String>> toNative() {
+    java.util.ArrayList<java.util.Map<String, String>> out = new java.util.ArrayList<>(size());
+    for (int i = 0; i < size(); ++i) {
+        out.add(get(i).toNative());
+    }
+    return out;
+  }
+
+  public VectMap(StringMap[] initialElements) {
+    this();
+    reserve(initialElements.length);
+
+    for (StringMap element : initialElements) {
+      add(element);
+    }
+  }
+
+  public VectMap(Iterable<StringMap> initialElements) {
+    this();
+    for (StringMap element : initialElements) {
+      add(element);
+    }
+  }
+
+  public StringMap get(int index) {
+    return doGet(index);
+  }
+
+  public StringMap set(int index, StringMap e) {
+    return doSet(index, e);
+  }
+
+  public boolean add(StringMap e) {
+    modCount++;
+    doAdd(e);
+    return true;
+  }
+
+  public void add(int index, StringMap e) {
+    modCount++;
+    doAdd(index, e);
+  }
+
+  public StringMap remove(int index) {
+    modCount++;
+    return doRemove(index);
+  }
+
+  protected void removeRange(int fromIndex, int toIndex) {
+    modCount++;
+    doRemoveRange(fromIndex, toIndex);
+  }
+
+  public int size() {
+    return doSize();
+  }
+
+  public VectMap() {
+    this(JamiServiceJNI.new_VectMap__SWIG_0(), true);
+  }
+
+  public VectMap(VectMap other) {
+    this(JamiServiceJNI.new_VectMap__SWIG_1(VectMap.getCPtr(other), other), true);
+  }
+
+  public long capacity() {
+    return JamiServiceJNI.VectMap_capacity(swigCPtr, this);
+  }
+
+  public void reserve(long n) {
+    JamiServiceJNI.VectMap_reserve(swigCPtr, this, n);
+  }
+
+  public boolean isEmpty() {
+    return JamiServiceJNI.VectMap_isEmpty(swigCPtr, this);
+  }
+
+  public void clear() {
+    JamiServiceJNI.VectMap_clear(swigCPtr, this);
+  }
+
+  public VectMap(int count, StringMap value) {
+    this(JamiServiceJNI.new_VectMap__SWIG_2(count, StringMap.getCPtr(value), value), true);
+  }
+
+  private int doSize() {
+    return JamiServiceJNI.VectMap_doSize(swigCPtr, this);
+  }
+
+  private void doAdd(StringMap x) {
+    JamiServiceJNI.VectMap_doAdd__SWIG_0(swigCPtr, this, StringMap.getCPtr(x), x);
+  }
+
+  private void doAdd(int index, StringMap x) {
+    JamiServiceJNI.VectMap_doAdd__SWIG_1(swigCPtr, this, index, StringMap.getCPtr(x), x);
+  }
+
+  private StringMap doRemove(int index) {
+    return new StringMap(JamiServiceJNI.VectMap_doRemove(swigCPtr, this, index), true);
+  }
+
+  private StringMap doGet(int index) {
+    return new StringMap(JamiServiceJNI.VectMap_doGet(swigCPtr, this, index), false);
+  }
+
+  private StringMap doSet(int index, StringMap val) {
+    return new StringMap(JamiServiceJNI.VectMap_doSet(swigCPtr, this, index, StringMap.getCPtr(val), val), true);
+  }
+
+  private void doRemoveRange(int fromIndex, int toIndex) {
+    JamiServiceJNI.VectMap_doRemoveRange(swigCPtr, this, fromIndex, toIndex);
+  }
+
+}
diff --git a/ring-android/libjamiclient/src/main/java/net/jami/daemon/VideoCallback.java b/ring-android/libjamiclient/src/main/java/net/jami/daemon/VideoCallback.java
new file mode 100644
index 0000000000000000000000000000000000000000..470d91d8a3238ed9128e5c8b2aa2c6e69d1b14bc
--- /dev/null
+++ b/ring-android/libjamiclient/src/main/java/net/jami/daemon/VideoCallback.java
@@ -0,0 +1,91 @@
+/* ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version 4.0.2
+ *
+ * Do not make changes to this file unless you know what you are doing--modify
+ * the SWIG interface file instead.
+ * ----------------------------------------------------------------------------- */
+
+package net.jami.daemon;
+
+public class VideoCallback {
+  private transient long swigCPtr;
+  protected transient boolean swigCMemOwn;
+
+  protected VideoCallback(long cPtr, boolean cMemoryOwn) {
+    swigCMemOwn = cMemoryOwn;
+    swigCPtr = cPtr;
+  }
+
+  protected static long getCPtr(VideoCallback obj) {
+    return (obj == null) ? 0 : obj.swigCPtr;
+  }
+
+  @SuppressWarnings("deprecation")
+  protected void finalize() {
+    delete();
+  }
+
+  public synchronized void delete() {
+    if (swigCPtr != 0) {
+      if (swigCMemOwn) {
+        swigCMemOwn = false;
+        JamiServiceJNI.delete_VideoCallback(swigCPtr);
+      }
+      swigCPtr = 0;
+    }
+  }
+
+  protected void swigDirectorDisconnect() {
+    swigCMemOwn = false;
+    delete();
+  }
+
+  public void swigReleaseOwnership() {
+    swigCMemOwn = false;
+    JamiServiceJNI.VideoCallback_change_ownership(this, swigCPtr, false);
+  }
+
+  public void swigTakeOwnership() {
+    swigCMemOwn = true;
+    JamiServiceJNI.VideoCallback_change_ownership(this, swigCPtr, true);
+  }
+
+  public void getCameraInfo(String device, IntVect formats, UintVect sizes, UintVect rates) {
+    if (getClass() == VideoCallback.class) JamiServiceJNI.VideoCallback_getCameraInfo(swigCPtr, this, device, IntVect.getCPtr(formats), formats, UintVect.getCPtr(sizes), sizes, UintVect.getCPtr(rates), rates); else JamiServiceJNI.VideoCallback_getCameraInfoSwigExplicitVideoCallback(swigCPtr, this, device, IntVect.getCPtr(formats), formats, UintVect.getCPtr(sizes), sizes, UintVect.getCPtr(rates), rates);
+  }
+
+  public void setParameters(String arg0, int format, int width, int height, int rate) {
+    if (getClass() == VideoCallback.class) JamiServiceJNI.VideoCallback_setParameters(swigCPtr, this, arg0, format, width, height, rate); else JamiServiceJNI.VideoCallback_setParametersSwigExplicitVideoCallback(swigCPtr, this, arg0, format, width, height, rate);
+  }
+
+  public void setBitrate(String arg0, int bitrate) {
+    if (getClass() == VideoCallback.class) JamiServiceJNI.VideoCallback_setBitrate(swigCPtr, this, arg0, bitrate); else JamiServiceJNI.VideoCallback_setBitrateSwigExplicitVideoCallback(swigCPtr, this, arg0, bitrate);
+  }
+
+  public void requestKeyFrame() {
+    if (getClass() == VideoCallback.class) JamiServiceJNI.VideoCallback_requestKeyFrame(swigCPtr, this); else JamiServiceJNI.VideoCallback_requestKeyFrameSwigExplicitVideoCallback(swigCPtr, this);
+  }
+
+  public void startCapture(String camid) {
+    if (getClass() == VideoCallback.class) JamiServiceJNI.VideoCallback_startCapture(swigCPtr, this, camid); else JamiServiceJNI.VideoCallback_startCaptureSwigExplicitVideoCallback(swigCPtr, this, camid);
+  }
+
+  public void stopCapture() {
+    if (getClass() == VideoCallback.class) JamiServiceJNI.VideoCallback_stopCapture(swigCPtr, this); else JamiServiceJNI.VideoCallback_stopCaptureSwigExplicitVideoCallback(swigCPtr, this);
+  }
+
+  public void decodingStarted(String id, String shm_path, int w, int h, boolean is_mixer) {
+    if (getClass() == VideoCallback.class) JamiServiceJNI.VideoCallback_decodingStarted(swigCPtr, this, id, shm_path, w, h, is_mixer); else JamiServiceJNI.VideoCallback_decodingStartedSwigExplicitVideoCallback(swigCPtr, this, id, shm_path, w, h, is_mixer);
+  }
+
+  public void decodingStopped(String id, String shm_path, boolean is_mixer) {
+    if (getClass() == VideoCallback.class) JamiServiceJNI.VideoCallback_decodingStopped(swigCPtr, this, id, shm_path, is_mixer); else JamiServiceJNI.VideoCallback_decodingStoppedSwigExplicitVideoCallback(swigCPtr, this, id, shm_path, is_mixer);
+  }
+
+  public VideoCallback() {
+    this(JamiServiceJNI.new_VideoCallback(), true);
+    JamiServiceJNI.VideoCallback_director_connect(this, swigCPtr, true, true);
+  }
+
+}
diff --git a/ring-android/libringclient/src/main/java/net/jami/model/Account.kt b/ring-android/libjamiclient/src/main/java/net/jami/model/Account.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/model/Account.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/model/Account.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/model/AccountConfig.kt b/ring-android/libjamiclient/src/main/java/net/jami/model/AccountConfig.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/model/AccountConfig.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/model/AccountConfig.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/model/AccountCreationModel.kt b/ring-android/libjamiclient/src/main/java/net/jami/model/AccountCreationModel.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/model/AccountCreationModel.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/model/AccountCreationModel.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/model/AccountCredentials.kt b/ring-android/libjamiclient/src/main/java/net/jami/model/AccountCredentials.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/model/AccountCredentials.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/model/AccountCredentials.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/model/Call.kt b/ring-android/libjamiclient/src/main/java/net/jami/model/Call.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/model/Call.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/model/Call.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/model/Codec.kt b/ring-android/libjamiclient/src/main/java/net/jami/model/Codec.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/model/Codec.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/model/Codec.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/model/Conference.kt b/ring-android/libjamiclient/src/main/java/net/jami/model/Conference.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/model/Conference.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/model/Conference.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/model/ConfigKey.kt b/ring-android/libjamiclient/src/main/java/net/jami/model/ConfigKey.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/model/ConfigKey.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/model/ConfigKey.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/model/Contact.kt b/ring-android/libjamiclient/src/main/java/net/jami/model/Contact.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/model/Contact.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/model/Contact.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/model/ContactEvent.kt b/ring-android/libjamiclient/src/main/java/net/jami/model/ContactEvent.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/model/ContactEvent.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/model/ContactEvent.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/model/Conversation.kt b/ring-android/libjamiclient/src/main/java/net/jami/model/Conversation.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/model/Conversation.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/model/Conversation.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/model/ConversationHistory.kt b/ring-android/libjamiclient/src/main/java/net/jami/model/ConversationHistory.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/model/ConversationHistory.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/model/ConversationHistory.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/model/DataTransfer.kt b/ring-android/libjamiclient/src/main/java/net/jami/model/DataTransfer.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/model/DataTransfer.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/model/DataTransfer.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/model/DataTransferError.kt b/ring-android/libjamiclient/src/main/java/net/jami/model/DataTransferError.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/model/DataTransferError.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/model/DataTransferError.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/model/Error.kt b/ring-android/libjamiclient/src/main/java/net/jami/model/Error.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/model/Error.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/model/Error.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/model/Interaction.kt b/ring-android/libjamiclient/src/main/java/net/jami/model/Interaction.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/model/Interaction.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/model/Interaction.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/model/Phone.kt b/ring-android/libjamiclient/src/main/java/net/jami/model/Phone.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/model/Phone.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/model/Phone.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/model/Profile.kt b/ring-android/libjamiclient/src/main/java/net/jami/model/Profile.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/model/Profile.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/model/Profile.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/model/Ringtone.kt b/ring-android/libjamiclient/src/main/java/net/jami/model/Ringtone.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/model/Ringtone.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/model/Ringtone.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/model/Settings.kt b/ring-android/libjamiclient/src/main/java/net/jami/model/Settings.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/model/Settings.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/model/Settings.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/model/TextMessage.kt b/ring-android/libjamiclient/src/main/java/net/jami/model/TextMessage.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/model/TextMessage.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/model/TextMessage.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/model/TrustRequest.kt b/ring-android/libjamiclient/src/main/java/net/jami/model/TrustRequest.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/model/TrustRequest.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/model/TrustRequest.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/model/Uri.kt b/ring-android/libjamiclient/src/main/java/net/jami/model/Uri.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/model/Uri.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/model/Uri.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/mvp/GenericView.kt b/ring-android/libjamiclient/src/main/java/net/jami/mvp/GenericView.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/mvp/GenericView.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/mvp/GenericView.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/mvp/RootPresenter.kt b/ring-android/libjamiclient/src/main/java/net/jami/mvp/RootPresenter.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/mvp/RootPresenter.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/mvp/RootPresenter.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/navigation/HomeNavigationPresenter.kt b/ring-android/libjamiclient/src/main/java/net/jami/navigation/HomeNavigationPresenter.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/navigation/HomeNavigationPresenter.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/navigation/HomeNavigationPresenter.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/navigation/HomeNavigationView.kt b/ring-android/libjamiclient/src/main/java/net/jami/navigation/HomeNavigationView.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/navigation/HomeNavigationView.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/navigation/HomeNavigationView.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/navigation/HomeNavigationViewModel.kt b/ring-android/libjamiclient/src/main/java/net/jami/navigation/HomeNavigationViewModel.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/navigation/HomeNavigationViewModel.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/navigation/HomeNavigationViewModel.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/services/AccountService.kt b/ring-android/libjamiclient/src/main/java/net/jami/services/AccountService.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/services/AccountService.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/services/AccountService.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/services/CallService.kt b/ring-android/libjamiclient/src/main/java/net/jami/services/CallService.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/services/CallService.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/services/CallService.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/services/ContactService.kt b/ring-android/libjamiclient/src/main/java/net/jami/services/ContactService.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/services/ContactService.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/services/ContactService.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/services/ConversationFacade.kt b/ring-android/libjamiclient/src/main/java/net/jami/services/ConversationFacade.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/services/ConversationFacade.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/services/ConversationFacade.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/services/DaemonService.kt b/ring-android/libjamiclient/src/main/java/net/jami/services/DaemonService.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/services/DaemonService.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/services/DaemonService.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/services/DeviceRuntimeService.kt b/ring-android/libjamiclient/src/main/java/net/jami/services/DeviceRuntimeService.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/services/DeviceRuntimeService.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/services/DeviceRuntimeService.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/services/HardwareService.kt b/ring-android/libjamiclient/src/main/java/net/jami/services/HardwareService.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/services/HardwareService.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/services/HardwareService.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/services/HistoryService.kt b/ring-android/libjamiclient/src/main/java/net/jami/services/HistoryService.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/services/HistoryService.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/services/HistoryService.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/services/LogService.kt b/ring-android/libjamiclient/src/main/java/net/jami/services/LogService.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/services/LogService.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/services/LogService.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/services/NotificationService.kt b/ring-android/libjamiclient/src/main/java/net/jami/services/NotificationService.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/services/NotificationService.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/services/NotificationService.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/services/PreferencesService.kt b/ring-android/libjamiclient/src/main/java/net/jami/services/PreferencesService.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/services/PreferencesService.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/services/PreferencesService.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/services/VCardService.kt b/ring-android/libjamiclient/src/main/java/net/jami/services/VCardService.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/services/VCardService.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/services/VCardService.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/settings/AdvancedAccountPresenter.kt b/ring-android/libjamiclient/src/main/java/net/jami/settings/AdvancedAccountPresenter.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/settings/AdvancedAccountPresenter.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/settings/AdvancedAccountPresenter.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/settings/AdvancedAccountView.kt b/ring-android/libjamiclient/src/main/java/net/jami/settings/AdvancedAccountView.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/settings/AdvancedAccountView.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/settings/AdvancedAccountView.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/settings/GeneralAccountPresenter.kt b/ring-android/libjamiclient/src/main/java/net/jami/settings/GeneralAccountPresenter.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/settings/GeneralAccountPresenter.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/settings/GeneralAccountPresenter.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/settings/GeneralAccountView.kt b/ring-android/libjamiclient/src/main/java/net/jami/settings/GeneralAccountView.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/settings/GeneralAccountView.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/settings/GeneralAccountView.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/settings/MediaPreferencePresenter.kt b/ring-android/libjamiclient/src/main/java/net/jami/settings/MediaPreferencePresenter.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/settings/MediaPreferencePresenter.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/settings/MediaPreferencePresenter.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/settings/MediaPreferenceView.java b/ring-android/libjamiclient/src/main/java/net/jami/settings/MediaPreferenceView.java
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/settings/MediaPreferenceView.java
rename to ring-android/libjamiclient/src/main/java/net/jami/settings/MediaPreferenceView.java
diff --git a/ring-android/libringclient/src/main/java/net/jami/settings/SettingsPresenter.kt b/ring-android/libjamiclient/src/main/java/net/jami/settings/SettingsPresenter.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/settings/SettingsPresenter.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/settings/SettingsPresenter.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/share/SharePresenter.kt b/ring-android/libjamiclient/src/main/java/net/jami/share/SharePresenter.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/share/SharePresenter.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/share/SharePresenter.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/share/ShareViewModel.kt b/ring-android/libjamiclient/src/main/java/net/jami/share/ShareViewModel.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/share/ShareViewModel.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/share/ShareViewModel.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/smartlist/SmartListPresenter.kt b/ring-android/libjamiclient/src/main/java/net/jami/smartlist/SmartListPresenter.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/smartlist/SmartListPresenter.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/smartlist/SmartListPresenter.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/smartlist/SmartListView.kt b/ring-android/libjamiclient/src/main/java/net/jami/smartlist/SmartListView.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/smartlist/SmartListView.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/smartlist/SmartListView.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/smartlist/SmartListViewModel.kt b/ring-android/libjamiclient/src/main/java/net/jami/smartlist/SmartListViewModel.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/smartlist/SmartListViewModel.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/smartlist/SmartListViewModel.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/utils/FileUtils.kt b/ring-android/libjamiclient/src/main/java/net/jami/utils/FileUtils.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/utils/FileUtils.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/utils/FileUtils.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/utils/HashUtils.kt b/ring-android/libjamiclient/src/main/java/net/jami/utils/HashUtils.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/utils/HashUtils.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/utils/HashUtils.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/utils/Log.kt b/ring-android/libjamiclient/src/main/java/net/jami/utils/Log.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/utils/Log.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/utils/Log.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/utils/NameLookupInputHandler.kt b/ring-android/libjamiclient/src/main/java/net/jami/utils/NameLookupInputHandler.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/utils/NameLookupInputHandler.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/utils/NameLookupInputHandler.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/utils/ProfileChunk.kt b/ring-android/libjamiclient/src/main/java/net/jami/utils/ProfileChunk.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/utils/ProfileChunk.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/utils/ProfileChunk.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/utils/QRCodeUtils.kt b/ring-android/libjamiclient/src/main/java/net/jami/utils/QRCodeUtils.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/utils/QRCodeUtils.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/utils/QRCodeUtils.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/utils/StringUtils.kt b/ring-android/libjamiclient/src/main/java/net/jami/utils/StringUtils.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/utils/StringUtils.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/utils/StringUtils.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/utils/SwigNativeConverter.kt b/ring-android/libjamiclient/src/main/java/net/jami/utils/SwigNativeConverter.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/utils/SwigNativeConverter.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/utils/SwigNativeConverter.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/utils/Tuple.kt b/ring-android/libjamiclient/src/main/java/net/jami/utils/Tuple.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/utils/Tuple.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/utils/Tuple.kt
diff --git a/ring-android/libringclient/src/main/java/net/jami/utils/VCardUtils.kt b/ring-android/libjamiclient/src/main/java/net/jami/utils/VCardUtils.kt
similarity index 100%
rename from ring-android/libringclient/src/main/java/net/jami/utils/VCardUtils.kt
rename to ring-android/libjamiclient/src/main/java/net/jami/utils/VCardUtils.kt
diff --git a/ring-android/libringclient/src/test/java/net/jami/model/ConversationTest.kt b/ring-android/libjamiclient/src/test/java/net/jami/model/ConversationTest.kt
similarity index 100%
rename from ring-android/libringclient/src/test/java/net/jami/model/ConversationTest.kt
rename to ring-android/libjamiclient/src/test/java/net/jami/model/ConversationTest.kt
diff --git a/ring-android/libringclient/src/test/java/net/jami/model/UriTest.kt b/ring-android/libjamiclient/src/test/java/net/jami/model/UriTest.kt
similarity index 100%
rename from ring-android/libringclient/src/test/java/net/jami/model/UriTest.kt
rename to ring-android/libjamiclient/src/test/java/net/jami/model/UriTest.kt
diff --git a/ring-android/libringclient/src/test/java/net/jami/utils/VCardUtilsTest.java b/ring-android/libjamiclient/src/test/java/net/jami/utils/VCardUtilsTest.java
similarity index 100%
rename from ring-android/libringclient/src/test/java/net/jami/utils/VCardUtilsTest.java
rename to ring-android/libjamiclient/src/test/java/net/jami/utils/VCardUtilsTest.java
diff --git a/ring-android/settings.gradle b/ring-android/settings.gradle
index 2c39028ec36b1f0f840d2895bebafff547e25098..424cb3c288e154ae0cd1911f0bd3ad3d18b826ff 100644
--- a/ring-android/settings.gradle
+++ b/ring-android/settings.gradle
@@ -1 +1 @@
-include ':app', ':libringclient'
+include ':app', ':libjamiclient'