diff --git a/.gitignore b/.gitignore
index 86b3f9d4504863dddcfb74ded09a0c05e5445703..69fa26ba4179c6642d87a2024a1a912304e2caf2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -140,3 +140,8 @@ clang-tidy-report.txt
 sonar-project.properties.save
 compile_commands.json
 
+# Cmake
+*.cmake
+CMakeCache.txt
+Testing
+CMakeFiles
\ No newline at end of file
diff --git a/CMakeLists.txt b/CMakeLists.txt
index f02edc630387a62f5431b7f7aebc9e5fa2345bef..0de52232451ec22ce3f535e2b711957cab2474a4 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,7 +1,7 @@
 cmake_minimum_required(VERSION 3.16)
 
 project(jami
-    VERSION 13.7.0
+    VERSION 13.8.0
     LANGUAGES C CXX)
 set(PACKAGE_NAME "Jami Daemon")
 set (CMAKE_CXX_STANDARD 17)
@@ -772,10 +772,6 @@ else()
         target_link_libraries(ut_recorder ut_library)
         add_test(NAME recorder COMMAND ut_recorder)
 
-        add_executable(ut_connectionManager test/unitTest/connectionManager/connectionManager.cpp)
-        target_link_libraries(ut_connectionManager ut_library)
-        add_test(NAME connectionManager COMMAND ut_connectionManager)
-
         add_executable(ut_migration test/unitTest/account_archive/migration.cpp)
         target_link_libraries(ut_migration ut_library)
         add_test(NAME migration COMMAND ut_migration)
diff --git a/bin/dbus/cx.ring.Ring.ConfigurationManager.xml b/bin/dbus/cx.ring.Ring.ConfigurationManager.xml
index 70577b9286a997ffb24cce0462b6e712175e2329..c1643d2d843e416c52cee89f392b246f71daf87f 100644
--- a/bin/dbus/cx.ring.Ring.ConfigurationManager.xml
+++ b/bin/dbus/cx.ring.Ring.ConfigurationManager.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" ?>
-<node name="/cx.ring.Ring.ConfigurationManager" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
+<node name="/cx.ring.Ring.ConfigurationManager"
+    xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
     <interface name="cx.ring.Ring.ConfigurationManager">
 
         <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
@@ -74,23 +75,23 @@
         </method>
 
         <method name="getVolatileAccountDetails" tp:name-for-bindings="getVolatileAccountDetails">
-           <arg type="s" name="accountID" direction="in">
-               <tp:docstring>
+            <arg type="s" name="accountID" direction="in">
+                <tp:docstring>
                    The account ID
-               </tp:docstring>
-           </arg>
-           <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="MapStringString"/>
-           <arg type="a{ss}" name="details" tp:type="String_String_Map" direction="out">
-               <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="MapStringString"/>
+            <arg type="a{ss}" name="details" tp:type="String_String_Map" direction="out">
+                <tp:docstring>
                    Account.registrationCoarseStatus      ( Coarse status like, UNREGISTERED or TRYING )
                    Account.registrationStatus            ( Error code, like 200 (OK) or 408 (Timeout) )
                    Account.registrationStatusDescription ( A technical error message (from PJSIP)     )
                    Account.lastSuccessfulRegister        ( Timestamp of the last "REGISTERED" event   )
                    Account.presenceStatus                ( Published presence status                  )
                    Account.presenceNote                  ( Published presence note (status string)    )
-               </tp:docstring>
-           </arg>
-       </method>
+                </tp:docstring>
+            </arg>
+        </method>
 
         <method name="setAccountDetails" tp:name-for-bindings="setAccountDetails">
             <tp:docstring>
@@ -110,16 +111,16 @@
               Set if this account is currently enabled (can be used).
               It is only a runtime proprety with no impact on the "enabled" state of the account.
             </tp:docstring>
-           <arg type="s" name="accountID" direction="in">
-               <tp:docstring>
+            <arg type="s" name="accountID" direction="in">
+                <tp:docstring>
                     The account ID
-               </tp:docstring>
-           </arg>
-           <arg type="b" name="enable" direction="in">
-               <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <arg type="b" name="enable" direction="in">
+                <tp:docstring>
                     <p>Set if enabled.</p>
-               </tp:docstring>
-           </arg>
+                </tp:docstring>
+            </arg>
         </method>
 
         <method name="setCredentials" tp:name-for-bindings="setCredentials">
@@ -130,875 +131,875 @@
             </arg>
         </method>
 
-       <method name="getCredentials" tp:name-for-bindings="getCredentials">
-           <arg type="s" name="accountID" direction="in">
-           </arg>
-           <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="VectorMapStringString"/>
-           <arg type="aa{ss}" name="credentialInformation" direction="out">
-           </arg>
-       </method>
+        <method name="getCredentials" tp:name-for-bindings="getCredentials">
+            <arg type="s" name="accountID" direction="in">
+            </arg>
+            <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="VectorMapStringString"/>
+            <arg type="aa{ss}" name="credentialInformation" direction="out">
+            </arg>
+        </method>
 
-       <method name="addAccount" tp:name-for-bindings="addAccount">
-           <tp:docstring>
+        <method name="addAccount" tp:name-for-bindings="addAccount">
+            <tp:docstring>
                Add a new account. When created, the signal <tp:member-ref>accountsChanged</tp:member-ref> is emitted. The clients must then call <tp:member-ref>getAccountList</tp:member-ref> to update their internal data structure.
-               <tp:rationale>If no details are specified, the default parameters are used.</tp:rationale>
-               <tp:rationale>The core tries to register the account as soon it is created.</tp:rationale>
-           </tp:docstring>
-           <annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="MapStringString"/>
-           <arg type="a{ss}" name="details" direction="in"  tp:type="String_String_Map">
-               <tp:docstring>
+                <tp:rationale>If no details are specified, the default parameters are used.</tp:rationale>
+                <tp:rationale>The core tries to register the account as soon it is created.</tp:rationale>
+            </tp:docstring>
+            <annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="MapStringString"/>
+            <arg type="a{ss}" name="details" direction="in" tp:type="String_String_Map">
+                <tp:docstring>
                     The new account settings
-               </tp:docstring>
-           </arg>
-           <arg type="s" name="createdAccountId" direction="out">
-               <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <arg type="s" name="createdAccountId" direction="out">
+                <tp:docstring>
                     A new account ID
-               </tp:docstring>
-           </arg>
-       </method>
+                </tp:docstring>
+            </arg>
+        </method>
 
-       <method name="exportOnRing" tp:name-for-bindings="exportOnRing">
-           <tp:docstring>
+        <method name="exportOnRing" tp:name-for-bindings="exportOnRing">
+            <tp:docstring>
                Export account on the DHT using the given password and generated PIN (returned through exportOnRingEnded signal).
-           </tp:docstring>
-           <arg type="s" name="accountID" direction="in">
-           </arg>
-           <arg type="s" name="password" direction="in">
-           </arg>
-           <arg type="b" name="success" direction="out">
-               <tp:docstring>
+            </tp:docstring>
+            <arg type="s" name="accountID" direction="in">
+            </arg>
+            <arg type="s" name="password" direction="in">
+            </arg>
+            <arg type="b" name="success" direction="out">
+                <tp:docstring>
                    True if the operation was initialized successfully. exportOnRingEnded will be trigered on completion.
-               </tp:docstring>
-           </arg>
-       </method>
+                </tp:docstring>
+            </arg>
+        </method>
 
-       <method name="exportToFile" tp:name-for-bindings="exportToFile">
-         <tp:added version="5.1.0"/>
-           <tp:docstring>
+        <method name="exportToFile" tp:name-for-bindings="exportToFile">
+            <tp:added version="5.1.0"/>
+            <tp:docstring>
                Copy the account archive to the path provided in argument.
-           </tp:docstring>
-           <arg type="s" name="accountID" direction="in">
-           </arg>
-           <arg type="s" name="destinationPath" direction="in">
-           </arg>
-           <arg type="s" name="password" direction="in">
-           </arg>
-           <arg type="b" name="success" direction="out">
-               <tp:docstring>
+            </tp:docstring>
+            <arg type="s" name="accountID" direction="in">
+            </arg>
+            <arg type="s" name="destinationPath" direction="in">
+            </arg>
+            <arg type="s" name="password" direction="in">
+            </arg>
+            <arg type="b" name="success" direction="out">
+                <tp:docstring>
                    True if the operation was initialized successfully.
-               </tp:docstring>
-           </arg>
-       </method>
+                </tp:docstring>
+            </arg>
+        </method>
 
-       <signal name="exportOnRingEnded" tp:name-for-bindings="exportOnRingEnded">
-           <tp:docstring>
+        <signal name="exportOnRingEnded" tp:name-for-bindings="exportOnRingEnded">
+            <tp:docstring>
                Notify clients when the exportOnRing operation ended.
-           </tp:docstring>
-           <arg type="s" name="accountID">
-           </arg>
-           <arg type="i" name="status">
-               <tp:docstring>
+            </tp:docstring>
+            <arg type="s" name="accountID">
+            </arg>
+            <arg type="i" name="status">
+                <tp:docstring>
                    Status code: 0 for success
-                  <ul>
-                      <li>SUCCESS = 0         everything went fine. PIN is set.</li>
-                      <li>WRONG_PASSWORD = 1  wrong password provided.</li>
-                      <li>NETWORK_ERROR = 2   can't publish archive on the network.</li>
-                  </ul>
-               </tp:docstring>
-           </arg>
-           <arg type="s" name="PIN">
-               <tp:docstring>
+                    <ul>
+                        <li>SUCCESS = 0         everything went fine. PIN is set.</li>
+                        <li>WRONG_PASSWORD = 1  wrong password provided.</li>
+                        <li>NETWORK_ERROR = 2   can't publish archive on the network.</li>
+                    </ul>
+                </tp:docstring>
+            </arg>
+            <arg type="s" name="PIN">
+                <tp:docstring>
                    A PIN to show to the user to import the account from somewhere else.
-               </tp:docstring>
-           </arg>
-       </signal>
+                </tp:docstring>
+            </arg>
+        </signal>
 
-       <method name="revokeDevice" tp:name-for-bindings="revokeDevice">
-           <tp:docstring>
+        <method name="revokeDevice" tp:name-for-bindings="revokeDevice">
+            <tp:docstring>
                Revoke device attached to the given Ring account, and publish the new revocation list.
-           </tp:docstring>
-           <arg type="s" name="accountID" direction="in">
-           </arg>
-           <arg type="s" name="password" direction="in">
-           </arg>
-           <arg type="s" name="deviceId" direction="in">
-           </arg>
-           <arg type="b" name="success" direction="out">
-               <tp:docstring>
+            </tp:docstring>
+            <arg type="s" name="accountID" direction="in">
+            </arg>
+            <arg type="s" name="password" direction="in">
+            </arg>
+            <arg type="s" name="deviceId" direction="in">
+            </arg>
+            <arg type="b" name="success" direction="out">
+                <tp:docstring>
                    True if the operation was performed successfully.
-               </tp:docstring>
-           </arg>
-       </method>
-       <signal name="deviceRevocationEnded" tp:name-for-bindings="deviceRevocationEnded">
-           <tp:docstring>
+                </tp:docstring>
+            </arg>
+        </method>
+        <signal name="deviceRevocationEnded" tp:name-for-bindings="deviceRevocationEnded">
+            <tp:docstring>
                Notify clients when the revokeDevice operation ended.
-           </tp:docstring>
-           <arg type="s" name="accountID">
-           </arg>
-           <arg type="s" name="deviceId">
-           </arg>
-           <arg type="i" name="status">
-               <tp:docstring>
+            </tp:docstring>
+            <arg type="s" name="accountID">
+            </arg>
+            <arg type="s" name="deviceId">
+            </arg>
+            <arg type="i" name="status">
+                <tp:docstring>
                    Status code: 0 for success
-                  <ul>
-                      <li>SUCCESS = 0         everything went fine. Device is now revoked.</li>
-                      <li>WRONG_PASSWORD = 1  revocation failed: wrong password.</li>
-                      <li>UNKNOWN_DEVICE = 2  revocation failed: unknown device.</li>
-                  </ul>
-               </tp:docstring>
-           </arg>
-       </signal>
-
-       <signal name="accountProfileReceived" tp:name-for-bindings="accountProfileReceived">
-           <tp:docstring>
+                    <ul>
+                        <li>SUCCESS = 0         everything went fine. Device is now revoked.</li>
+                        <li>WRONG_PASSWORD = 1  revocation failed: wrong password.</li>
+                        <li>UNKNOWN_DEVICE = 2  revocation failed: unknown device.</li>
+                    </ul>
+                </tp:docstring>
+            </arg>
+        </signal>
+
+        <signal name="accountProfileReceived" tp:name-for-bindings="accountProfileReceived">
+            <tp:docstring>
                Notify clients when a newly created account's profile is available for storage.
-           </tp:docstring>
-           <arg type="s" name="accountID">
-           </arg>
-           <arg type="s" name="displayName">
-           </arg>
-           <arg type="s" name="photo">
-           </arg>
-       </signal>
-
-       <signal name="knownDevicesChanged" tp:name-for-bindings="knownDevicesChanged">
-           <tp:docstring>
+            </tp:docstring>
+            <arg type="s" name="accountID">
+            </arg>
+            <arg type="s" name="displayName">
+            </arg>
+            <arg type="s" name="photo">
+            </arg>
+        </signal>
+
+        <signal name="knownDevicesChanged" tp:name-for-bindings="knownDevicesChanged">
+            <tp:docstring>
                Notify clients when a new device linked to this account is found.
-           </tp:docstring>
-           <arg type="s" name="accountID">
-           </arg>
-           <annotation name="org.qtproject.QtDBus.QtTypeName.Out1" value="MapStringString"/>
-           <arg type="a{ss}" name="devices" tp:type="String_String_Map">
-               <tp:docstring>
+            </tp:docstring>
+            <arg type="s" name="accountID">
+            </arg>
+            <annotation name="org.qtproject.QtDBus.QtTypeName.Out1" value="MapStringString"/>
+            <arg type="a{ss}" name="devices" tp:type="String_String_Map">
+                <tp:docstring>
                    A map of device IDs with corresponding labels.
-               </tp:docstring>
-           </arg>
-       </signal>
+                </tp:docstring>
+            </arg>
+        </signal>
 
-       <method name="getKnownRingDevices" tp:name-for-bindings="getKnownRingDevices">
-           <tp:docstring>
+        <method name="getKnownRingDevices" tp:name-for-bindings="getKnownRingDevices">
+            <tp:docstring>
                Gets list of known devices for this account.
-           </tp:docstring>
-           <arg type="s" name="accountID" direction="in">
-           </arg>
-           <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="MapStringString"/>
-           <arg type="a{ss}" name="devices" direction="out">
-               <tp:docstring>
+            </tp:docstring>
+            <arg type="s" name="accountID" direction="in">
+            </arg>
+            <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="MapStringString"/>
+            <arg type="a{ss}" name="devices" direction="out">
+                <tp:docstring>
                    A map of device IDs with corresponding labels.
-               </tp:docstring>
-           </arg>
-       </method>
+                </tp:docstring>
+            </arg>
+        </method>
 
-       <method name="changeAccountPassword" tp:name-for-bindings="changeAccountPassword">
-           <tp:docstring>
+        <method name="changeAccountPassword" tp:name-for-bindings="changeAccountPassword">
+            <tp:docstring>
                Change the account archive password.
-           </tp:docstring>
-           <arg type="s" name="accountID" direction="in">
-           </arg>
-           <arg type="s" name="oldPassword" direction="in">
-           </arg>
-           <arg type="s" name="newPassword" direction="in">
-           </arg>
-           <arg type="b" name="success" direction="out">
-               <tp:docstring>
+            </tp:docstring>
+            <arg type="s" name="accountID" direction="in">
+            </arg>
+            <arg type="s" name="oldPassword" direction="in">
+            </arg>
+            <arg type="s" name="newPassword" direction="in">
+            </arg>
+            <arg type="b" name="success" direction="out">
+                <tp:docstring>
                    True if the operation was successful.
-               </tp:docstring>
-           </arg>
-       </method>
+                </tp:docstring>
+            </arg>
+        </method>
 
-      <method name="lookupName" tp:name-for-bindings="lookupName">
-           <tp:docstring>
+        <method name="lookupName" tp:name-for-bindings="lookupName">
+            <tp:docstring>
                Performs name lookup for the specified account (if any) or using the default nameserver.
-           </tp:docstring>
-           <arg type="s" name="accountID" direction="in">
+            </tp:docstring>
+            <arg type="s" name="accountID" direction="in">
               The account to use. If empty, use the default nameserver.
-           </arg>
-           <arg type="s" name="nameserverUri" direction="in">
+            </arg>
+            <arg type="s" name="nameserverUri" direction="in">
               The name server URI to use, considered only if accountID is empty.
-           </arg>
-           <arg type="s" name="name" direction="in">
-           </arg>
-           <arg type="b" name="success" direction="out">
-               <tp:docstring>
+            </arg>
+            <arg type="s" name="name" direction="in">
+            </arg>
+            <arg type="b" name="success" direction="out">
+                <tp:docstring>
                    True if the operation was initialized successfully. registeredNameFound will be trigered on completion.
-               </tp:docstring>
-           </arg>
-      </method>
-      <method name="lookupAddress" tp:name-for-bindings="lookupAddress">
-           <tp:docstring>
+                </tp:docstring>
+            </arg>
+        </method>
+        <method name="lookupAddress" tp:name-for-bindings="lookupAddress">
+            <tp:docstring>
                Performs address lookup for the specified account (if any) or using the default nameserver.
-           </tp:docstring>
-           <arg type="s" name="accountID" direction="in">
+            </tp:docstring>
+            <arg type="s" name="accountID" direction="in">
               The account to use. If empty, use the default nameserver.
-           </arg>
-           <arg type="s" name="nameserverUri" direction="in">
+            </arg>
+            <arg type="s" name="nameserverUri" direction="in">
               The name server URI to use, considered only if accountID is empty.
-           </arg>
-           <arg type="s" name="address" direction="in">
-               <tp:docstring>
+            </arg>
+            <arg type="s" name="address" direction="in">
+                <tp:docstring>
                    Address to lookup for. Must not include spaces.
-               </tp:docstring>
-           </arg>
-           <arg type="b" name="success" direction="out">
-               <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <arg type="b" name="success" direction="out">
+                <tp:docstring>
                    True if the operation was initialized successfully. registeredNameFound will be trigered on completion.
                    False in case of operation initialization error. registeredNameFound won't be called in that case.
-               </tp:docstring>
-           </arg>
-      </method>
-      <signal name="registeredNameFound" tp:name-for-bindings="registeredNameFound">
-           <tp:docstring>
+                </tp:docstring>
+            </arg>
+        </method>
+        <signal name="registeredNameFound" tp:name-for-bindings="registeredNameFound">
+            <tp:docstring>
                Notify clients when a new registered address-name mapping is known.
                If status is not success (0), requested field (name or address) is left empty.
-           </tp:docstring>
-           <arg type="s" name="accountID">
-           </arg>
-           <arg type="i" name="status">
-               <tp:docstring>
+            </tp:docstring>
+            <arg type="s" name="accountID">
+            </arg>
+            <arg type="i" name="status">
+                <tp:docstring>
                   Status code: 0 for success
-                  <ul>
-                      <li>SUCCESS = 0         everything went fine. Name/address pair was found.</li>
-                      <li>INVALID_NAME = 1    provided name is not valid.</li>
-                      <li>NOT_FOUND = 2       everything went fine. Name/address pair was not found.</li>
-                      <li>ERROR = 3           An error happened</li>
-                  </ul>
-               </tp:docstring>
-           </arg>
-           <arg type="s" name="address">
-           </arg>
-           <arg type="s" name="name">
-           </arg>
-      </signal>
-
-      <method name="registerName" tp:name-for-bindings="registerName">
-           <tp:docstring>
+                    <ul>
+                        <li>SUCCESS = 0         everything went fine. Name/address pair was found.</li>
+                        <li>INVALID_NAME = 1    provided name is not valid.</li>
+                        <li>NOT_FOUND = 2       everything went fine. Name/address pair was not found.</li>
+                        <li>ERROR = 3           An error happened</li>
+                    </ul>
+                </tp:docstring>
+            </arg>
+            <arg type="s" name="address">
+            </arg>
+            <arg type="s" name="name">
+            </arg>
+        </signal>
+
+        <method name="registerName" tp:name-for-bindings="registerName">
+            <tp:docstring>
                Performs name registration with RingNS protocol for the specified account.
-           </tp:docstring>
-           <arg type="s" name="accountID" direction="in">
-           </arg>
-           <arg type="s" name="password" direction="in">
-             <tp:docstring>
+            </tp:docstring>
+            <arg type="s" name="accountID" direction="in">
+            </arg>
+            <arg type="s" name="password" direction="in">
+                <tp:docstring>
                  Ring account main password.
-             </tp:docstring>
-           </arg>
-           <arg type="s" name="name" direction="in">
-               <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <arg type="s" name="name" direction="in">
+                <tp:docstring>
                    Name to register. Must be lower-case ASCII, digits or "-" or "_".
-               </tp:docstring>
-           </arg>
-           <arg type="b" name="success" direction="out">
-               <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <arg type="b" name="success" direction="out">
+                <tp:docstring>
                    True if the operation was initialized successfully. nameRegistrationEnded will be trigered on completion.
                    False in case of operation initialization error. nameRegistrationEnded won't be called in that case.
-               </tp:docstring>
-           </arg>
-      </method>
-       <signal name="nameRegistrationEnded" tp:name-for-bindings="nameRegistrationEnded">
-           <tp:docstring>
+                </tp:docstring>
+            </arg>
+        </method>
+        <signal name="nameRegistrationEnded" tp:name-for-bindings="nameRegistrationEnded">
+            <tp:docstring>
                Notify clients when the registerName operation ended.
-           </tp:docstring>
-           <arg type="s" name="accountID">
-           </arg>
-           <arg type="i" name="status">
-               <tp:docstring>
+            </tp:docstring>
+            <arg type="s" name="accountID">
+            </arg>
+            <arg type="i" name="status">
+                <tp:docstring>
                    Status code: 0 for success
-                  <ul>
-                      <li>SUCCESS = 0         everything went fine. Name is now registered.</li>
-                      <li>WRONG_PASSWORD = 1  registration failed: wrong password.</li>
-                      <li>INVALID_NAME = 2    registration failed: invalid name.</li>
-                      <li>ALREADY_TAKEN = 3   registration failed: name is already taken.</li>
-                      <li>NETWORK_ERROR = 4   registration failed: network or server error.</li>
-                  </ul>
-               </tp:docstring>
-           </arg>
-           <arg type="s" name="name">
-               <tp:docstring>
+                    <ul>
+                        <li>SUCCESS = 0         everything went fine. Name is now registered.</li>
+                        <li>WRONG_PASSWORD = 1  registration failed: wrong password.</li>
+                        <li>INVALID_NAME = 2    registration failed: invalid name.</li>
+                        <li>ALREADY_TAKEN = 3   registration failed: name is already taken.</li>
+                        <li>NETWORK_ERROR = 4   registration failed: network or server error.</li>
+                    </ul>
+                </tp:docstring>
+            </arg>
+            <arg type="s" name="name">
+                <tp:docstring>
                    The name that was attempted to register.
-               </tp:docstring>
-           </arg>
-       </signal>
+                </tp:docstring>
+            </arg>
+        </signal>
 
-      <method name="searchUser" tp:name-for-bindings="searchUser">
-           <tp:docstring>
+        <method name="searchUser" tp:name-for-bindings="searchUser">
+            <tp:docstring>
                Performs name registration with RingNS protocol for the specified account.
-           </tp:docstring>
-           <arg type="s" name="accountID" direction="in">
-           </arg>
-           <arg type="s" name="query" direction="in">
-               <tp:docstring>
+            </tp:docstring>
+            <arg type="s" name="accountID" direction="in">
+            </arg>
+            <arg type="s" name="query" direction="in">
+                <tp:docstring>
                    Query to perform in the remote user directory. What properties are searched is server-dependant.
-               </tp:docstring>
-           </arg>
-           <arg type="b" name="success" direction="out">
-               <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <arg type="b" name="success" direction="out">
+                <tp:docstring>
                    True if the operation was initialized successfully and a corresponding signal will be triggered.
-               </tp:docstring>
-           </arg>
-      </method>
-       <signal name="userSearchEnded" tp:name-for-bindings="userSearchEnded">
-           <tp:docstring>
+                </tp:docstring>
+            </arg>
+        </method>
+        <signal name="userSearchEnded" tp:name-for-bindings="userSearchEnded">
+            <tp:docstring>
                Notify clients when the registerName operation ended.
-           </tp:docstring>
-           <arg type="s" name="accountID">
-           </arg>
-           <arg type="i" name="status">
-           </arg>
-           <arg type="s" name="query">
-               <tp:docstring>
+            </tp:docstring>
+            <arg type="s" name="accountID">
+            </arg>
+            <arg type="i" name="status">
+            </arg>
+            <arg type="s" name="query">
+                <tp:docstring>
                    The query which is answered by this signal
-               </tp:docstring>
-           </arg>
-           <annotation name="org.qtproject.QtDBus.QtTypeName.Out3" value="VectorMapStringString"/>
-           <arg type="aa{ss}" name="result">
-               <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <annotation name="org.qtproject.QtDBus.QtTypeName.Out3" value="VectorMapStringString"/>
+            <arg type="aa{ss}" name="result">
+                <tp:docstring>
                    List of user results
-               </tp:docstring>
-           </arg>
-       </signal>
+                </tp:docstring>
+            </arg>
+        </signal>
 
-       <method name="setAccountsOrder" tp:name-for-bindings="setAccountsOrder">
-           <tp:docstring>
+        <method name="setAccountsOrder" tp:name-for-bindings="setAccountsOrder">
+            <tp:docstring>
                 Update the accounts order.
                 <tp:rationale>When placing a call, the first registered account in the list is used.</tp:rationale>
-           </tp:docstring>
-           <arg type="s" name="order" direction="in">
-               <tp:docstring>
+            </tp:docstring>
+            <arg type="s" name="order" direction="in">
+                <tp:docstring>
                    An ordered list of account IDs, delimited by '/'
-               </tp:docstring>
-           </arg>
-       </method>
+                </tp:docstring>
+            </arg>
+        </method>
 
-       <method name="removeAccount" tp:name-for-bindings="removeAccount">
-           <tp:docstring>
+        <method name="removeAccount" tp:name-for-bindings="removeAccount">
+            <tp:docstring>
                Remove an existing account. When removed, the signal <tp:member-ref>accountsChanged</tp:member-ref> is emitted. The clients must then call <tp:member-ref>getAccountList</tp:member-ref> to update their internal data structure.
-           </tp:docstring>
-           <arg type="s" name="accoundID" direction="in">
-               <tp:docstring>
+            </tp:docstring>
+            <arg type="s" name="accoundID" direction="in">
+                <tp:docstring>
                     The account to remove, identified by its ID
-               </tp:docstring>
-           </arg>
-       </method>
+                </tp:docstring>
+            </arg>
+        </method>
 
-       <method name="getAccountList" tp:name-for-bindings="getAccountList">
-           <tp:docstring>
+        <method name="getAccountList" tp:name-for-bindings="getAccountList">
+            <tp:docstring>
                 Get a list of all created accounts, as stored by the core.
-           </tp:docstring>
-           <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="VectorString"/>
-           <arg type="as" name="list" direction="out">
-               <tp:docstring>
+            </tp:docstring>
+            <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="VectorString"/>
+            <arg type="as" name="list" direction="out">
+                <tp:docstring>
                    A list of account IDs
-               </tp:docstring>
-           </arg>
-       </method>
+                </tp:docstring>
+            </arg>
+        </method>
 
-       <method name="registerAllAccounts" tp:name-for-bindings="registerAllAccounts">
-           <tp:docstring>
+        <method name="registerAllAccounts" tp:name-for-bindings="registerAllAccounts">
+            <tp:docstring>
                 Send account registration (REGISTER) for all accounts, even if they are not enabled.
-           </tp:docstring>
-       </method>
+            </tp:docstring>
+        </method>
 
-       <method name="sendRegister" tp:name-for-bindings="sendRegister">
-           <tp:docstring>
+        <method name="sendRegister" tp:name-for-bindings="sendRegister">
+            <tp:docstring>
                 Send account registration (REGISTER) to the registrar.
                 Register the account if enable=true, unregister if enable=false.
-           </tp:docstring>
-           <arg type="s" name="accountID" direction="in">
-               <tp:docstring>
+            </tp:docstring>
+            <arg type="s" name="accountID" direction="in">
+                <tp:docstring>
                     The account ID
-               </tp:docstring>
-           </arg>
-           <arg type="b" name="enable" direction="in">
-               <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <arg type="b" name="enable" direction="in">
+                <tp:docstring>
                     <p>To register, enable must be true.</p>
                     <p>To un-register, enable must be false.</p>
-               </tp:docstring>
-           </arg>
-       </method>
+                </tp:docstring>
+            </arg>
+        </method>
 
-      <method name="sendTextMessage" tp:name-for-bindings="sendTextMessage">
-          <arg type="s" name="accountID" direction="in"/>
-          <arg type="s" name="to" direction="in"/>
-          <annotation name="org.qtproject.QtDBus.QtTypeName.In2" value="MapStringString"/>
-          <arg type="a{ss}" name="payloads" direction="in"/>
-          <arg type="i" name="flag" direction="in">
-            <tp:docstring>
+        <method name="sendTextMessage" tp:name-for-bindings="sendTextMessage">
+            <arg type="s" name="accountID" direction="in"/>
+            <arg type="s" name="to" direction="in"/>
+            <annotation name="org.qtproject.QtDBus.QtTypeName.In2" value="MapStringString"/>
+            <arg type="a{ss}" name="payloads" direction="in"/>
+            <arg type="i" name="flag" direction="in">
+                <tp:docstring>
                The message ID. An ID of 0 means that the message was not sent,
                likely because one of the parameters was invalid.
-             </tp:docstring>
-          </arg>
-          <arg type="t" name="id" direction="out">
-             <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <arg type="t" name="id" direction="out">
+                <tp:docstring>
                The message ID. An ID of 0 means that the message was not sent,
                likely because one of the parameters was invalid.
-             </tp:docstring>
-          </arg>
-       </method>
-
-      <method name="cancelMessage" tp:name-for-bindings="cancelMessage">
-          <arg type="s" name="accountID" direction="in"/>
-          <arg type="t" name="id" direction="in"/>
-          <arg type="b" name="success" direction="out">
-             <tp:docstring>
+                </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="cancelMessage" tp:name-for-bindings="cancelMessage">
+            <arg type="s" name="accountID" direction="in"/>
+            <arg type="t" name="id" direction="in"/>
+            <arg type="b" name="success" direction="out">
+                <tp:docstring>
                Cancel pending message.
-             </tp:docstring>
-          </arg>
-       </method>
+                </tp:docstring>
+            </arg>
+        </method>
 
-       <method name="getLastMessages" tp:name-for-bindings="getLastMessages">
-           <arg type="s" name="accountID" direction="in"/>
-           <arg type="t" name="base_timestamp" direction="in"/>
-           <arg type="a(sa{ss}t)" name="messages" direction="out"/>
-           <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="messages"/>
+        <method name="getLastMessages" tp:name-for-bindings="getLastMessages">
+            <arg type="s" name="accountID" direction="in"/>
+            <arg type="t" name="base_timestamp" direction="in"/>
+            <arg type="a(sa{ss}t)" name="messages" direction="out"/>
+            <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="messages"/>
         </method>
 
 
-       <method name="getNearbyPeers" tp:name-for-bindings="getNearbyPeers">
-           <arg type="s" name="accountID" direction="in"/>
-           <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="MapStringString"/>
-           <arg type="a{ss}" name="result" direction="out" tp:type="String_String_Map"/>
-             <tp:docstring>
+        <method name="getNearbyPeers" tp:name-for-bindings="getNearbyPeers">
+            <arg type="s" name="accountID" direction="in"/>
+            <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="MapStringString"/>
+            <arg type="a{ss}" name="result" direction="out" tp:type="String_String_Map"/>
+            <tp:docstring>
                Get Discovered Peer Map
-             </tp:docstring>
+            </tp:docstring>
         </method>
 
-       <method name="getMessageStatus" tp:name-for-bindings="getMessageStatus">
-          <arg type="t" name="id" direction="in"/>
-          <arg type="i" name="status" direction="out">
-             <tp:docstring>
+        <method name="getMessageStatus" tp:name-for-bindings="getMessageStatus">
+            <arg type="t" name="id" direction="in"/>
+            <arg type="i" name="status" direction="out">
+                <tp:docstring>
                The message status.
-                <ul>
-                    <li>UNKNOWN = 0    unknown message or message status</li>
-                    <li>SENDING = 1    message is being sent or waiting for peer confirmation.</li>
-                    <li>SENT = 2      message have been received from the other end.</li>
-                    <li>READ = 3       message have been read by the peer.</li>
-                    <li>FAILURE = 4    the message coudn't be delivered.</li>
-                </ul>
-             </tp:docstring>
-          </arg>
-       </method>
-
-       <signal name="incomingAccountMessage" tp:name-for-bindings="incomingAccountMessage">
-           <tp:added version="2.2.0"/>
-           <tp:docstring>
+                    <ul>
+                        <li>UNKNOWN = 0    unknown message or message status</li>
+                        <li>SENDING = 1    message is being sent or waiting for peer confirmation.</li>
+                        <li>SENT = 2      message have been received from the other end.</li>
+                        <li>READ = 3       message have been read by the peer.</li>
+                        <li>FAILURE = 4    the message coudn't be delivered.</li>
+                    </ul>
+                </tp:docstring>
+            </arg>
+        </method>
+
+        <signal name="incomingAccountMessage" tp:name-for-bindings="incomingAccountMessage">
+            <tp:added version="2.2.0"/>
+            <tp:docstring>
                Notify clients that a new text message has been received at the account level.
-           </tp:docstring>
-           <arg type="s" name="accountID"/>
-           <arg type="s" name="messageID"/>
-           <arg type="s" name="from"/>
-           <annotation name="org.qtproject.QtDBus.QtTypeName.Out3" value="MapStringString"/>
-           <arg type="a{ss}" name="payloads"/>
-       </signal>
-
-       <signal name="accountMessageStatusChanged" tp:name-for-bindings="accountMessageStatusChanged">
-           <tp:added version="10.0.0"/>
-           <tp:docstring>
+            </tp:docstring>
+            <arg type="s" name="accountID"/>
+            <arg type="s" name="messageID"/>
+            <arg type="s" name="from"/>
+            <annotation name="org.qtproject.QtDBus.QtTypeName.Out3" value="MapStringString"/>
+            <arg type="a{ss}" name="payloads"/>
+        </signal>
+
+        <signal name="accountMessageStatusChanged" tp:name-for-bindings="accountMessageStatusChanged">
+            <tp:added version="10.0.0"/>
+            <tp:docstring>
                Notify clients that a sent text message status have changed
-           </tp:docstring>
-           <arg type="s" name="accountID"/>
-           <arg type="s" name="conversationId"/>
-           <arg type="s" name="peer"/>
-           <arg type="s" name="id"/>
-           <arg type="i" name="status">
-              <tp:docstring>The new status of the message, see getMessageStatus for possible values.</tp:docstring>
-           </arg>
-       </signal>
-
-       <signal name="needsHost" tp:name-for-bindings="needsHost">
-           <tp:added version="13.7.0"/>
-           <tp:docstring>
+            </tp:docstring>
+            <arg type="s" name="accountID"/>
+            <arg type="s" name="conversationId"/>
+            <arg type="s" name="peer"/>
+            <arg type="s" name="id"/>
+            <arg type="i" name="status">
+                <tp:docstring>The new status of the message, see getMessageStatus for possible values.</tp:docstring>
+            </arg>
+        </signal>
+
+        <signal name="needsHost" tp:name-for-bindings="needsHost">
+            <tp:added version="13.7.0"/>
+            <tp:docstring>
                Notify client that a conversation needs a host for calls
-           </tp:docstring>
-           <arg type="s" name="accountId"/>
-           <arg type="s" name="conversationId"/>
-       </signal>
-
-       <signal name="activeCallsChanged" tp:name-for-bindings="activeCallsChanged">
-           <tp:added version="13.7.0"/>
-           <tp:docstring>
+            </tp:docstring>
+            <arg type="s" name="accountId"/>
+            <arg type="s" name="conversationId"/>
+        </signal>
+
+        <signal name="activeCallsChanged" tp:name-for-bindings="activeCallsChanged">
+            <tp:added version="13.7.0"/>
+            <tp:docstring>
                Notify client that a conversation got new active calls
-           </tp:docstring>
-           <arg type="s" name="accountId"/>
-           <arg type="s" name="conversationId"/>
-           <annotation name="org.qtproject.QtDBus.QtTypeName.Out2" value="VectorMapStringString"/>
-           <arg type="aa{ss}" name="activeCalls" direction="out"/>
-       </signal>
-
-       <signal name="profileReceived" tp:name-for-bindings="profileReceived">
-           <tp:added version="9.2.0"/>
-           <tp:docstring>
+            </tp:docstring>
+            <arg type="s" name="accountId"/>
+            <arg type="s" name="conversationId"/>
+            <annotation name="org.qtproject.QtDBus.QtTypeName.Out2" value="VectorMapStringString"/>
+            <arg type="aa{ss}" name="activeCalls" direction="out"/>
+        </signal>
+
+        <signal name="profileReceived" tp:name-for-bindings="profileReceived">
+            <tp:added version="9.2.0"/>
+            <tp:docstring>
                Notify clients that a vCard has been received
-           </tp:docstring>
-           <arg type="s" name="accountID"/>
-           <arg type="s" name="from"/>
-           <arg type="s" name="path"/>
-       </signal>
+            </tp:docstring>
+            <arg type="s" name="accountID"/>
+            <arg type="s" name="from"/>
+            <arg type="s" name="path"/>
+        </signal>
 
 
 
-       <method name="setIsComposing" tp:name-for-bindings="setIsComposing">
-           <tp:added version="7.9.0"/>
-           <tp:docstring>
-             <p>Sends and update composing indication for a given contact/conversation</p>
-           </tp:docstring>
-           <arg type="s" name="accountId" direction="in">
-             <tp:docstring>
+        <method name="setIsComposing" tp:name-for-bindings="setIsComposing">
+            <tp:added version="7.9.0"/>
+            <tp:docstring>
+                <p>Sends and update composing indication for a given contact/conversation</p>
+            </tp:docstring>
+            <arg type="s" name="accountId" direction="in">
+                <tp:docstring>
                The account ID
-             </tp:docstring>
-           </arg>
-           <arg type="s" name="conversationUri" direction="in">
-             <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <arg type="s" name="conversationUri" direction="in">
+                <tp:docstring>
                A conversation uri (swarm:xxxx or jami:xxxx)
-             </tp:docstring>
-           </arg>
-           <arg type="b" name="isComposing" direction="in">
-             <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <arg type="b" name="isComposing" direction="in">
+                <tp:docstring>
                True is the user is composing a message, false otherwise
-             </tp:docstring>
-           </arg>
-       </method>
-
-       <method name="setMessageDisplayed" tp:name-for-bindings="setMessageDisplayed">
-           <tp:added version="8.1.0"/>
-           <tp:docstring>
-             <p>Informs that a message have been read</p>
-           </tp:docstring>
-           <arg type="s" name="accountId" direction="in">
-             <tp:docstring>
+                </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="setMessageDisplayed" tp:name-for-bindings="setMessageDisplayed">
+            <tp:added version="8.1.0"/>
+            <tp:docstring>
+                <p>Informs that a message have been read</p>
+            </tp:docstring>
+            <arg type="s" name="accountId" direction="in">
+                <tp:docstring>
                The account ID
-             </tp:docstring>
-           </arg>
-           <arg type="s" name="conversationUri" direction="in">
-             <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <arg type="s" name="conversationUri" direction="in">
+                <tp:docstring>
                A conversation uri (swarm:xxxx or jami:xxxx)
-             </tp:docstring>
-           </arg>
-           <arg type="s" name="messageId" direction="in">
-             <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <arg type="s" name="messageId" direction="in">
+                <tp:docstring>
                The message ID
-             </tp:docstring>
-           </arg>
-           <arg type="i" name="status" direction="in">
-             <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <arg type="i" name="status" direction="in">
+                <tp:docstring>
                The message status, 3 for displayed
-             </tp:docstring>
-           </arg>
-           <arg type="b" name="success" direction="out">
-             <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <arg type="b" name="success" direction="out">
+                <tp:docstring>
                True if the message status was set, false if account, contact or message is unknown.
-             </tp:docstring>
-           </arg>
-       </method>
+                </tp:docstring>
+            </arg>
+        </method>
 
-       <signal name="composingStatusChanged" tp:name-for-bindings="composingStatusChanged">
-           <tp:added version="10.0.0"/>
-           <tp:docstring>
+        <signal name="composingStatusChanged" tp:name-for-bindings="composingStatusChanged">
+            <tp:added version="10.0.0"/>
+            <tp:docstring>
                Notify clients that a message composition status changed
-           </tp:docstring>
-           <arg type="s" name="accountId"/>
-           <arg type="s" name="conversationId"/>
-           <arg type="s" name="contactId"/>
-           <arg type="i" name="status">
-              <tp:docstring>The new status of the message, 0 for Idle, 1 for Active</tp:docstring>
-           </arg>
-       </signal>
-
-       <method name="setVolume" tp:name-for-bindings="setVolume">
-           <tp:docstring>
-             <p>Sets the volume using a linear scale [0,100].</p>
-             <tp:rationale>Pulseaudio has its own mechanism to modify application volume. This method is enabled only if the ALSA API is used.</tp:rationale>
-           </tp:docstring>
-           <arg type="s" name="device" direction="in">
-             <tp:docstring>
+            </tp:docstring>
+            <arg type="s" name="accountId"/>
+            <arg type="s" name="conversationId"/>
+            <arg type="s" name="contactId"/>
+            <arg type="i" name="status">
+                <tp:docstring>The new status of the message, 0 for Idle, 1 for Active</tp:docstring>
+            </arg>
+        </signal>
+
+        <method name="setVolume" tp:name-for-bindings="setVolume">
+            <tp:docstring>
+                <p>Sets the volume using a linear scale [0,100].</p>
+                <tp:rationale>Pulseaudio has its own mechanism to modify application volume. This method is enabled only if the ALSA API is used.</tp:rationale>
+            </tp:docstring>
+            <arg type="s" name="device" direction="in">
+                <tp:docstring>
                The device: mic or speaker
-             </tp:docstring>
-           </arg>
-           <arg type="d" name="value" direction="in">
-             <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <arg type="d" name="value" direction="in">
+                <tp:docstring>
                The volume value (between 0 and 100)
-             </tp:docstring>
-           </arg>
-       </method>
-
-       <method name="getVolume" tp:name-for-bindings="getVolume">
-           <tp:docstring>
-             <p>Return the volume value of the given device on a linear scale [0,100].</p>
-             <tp:rationale>Only enabled if the ALSA API is used, Pulseaudio has its own mechanism to modify application volume.</tp:rationale>
-           </tp:docstring>
-           <arg type="s" name="device" direction="in">
-             <tp:docstring>
+                </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="getVolume" tp:name-for-bindings="getVolume">
+            <tp:docstring>
+                <p>Return the volume value of the given device on a linear scale [0,100].</p>
+                <tp:rationale>Only enabled if the ALSA API is used, Pulseaudio has its own mechanism to modify application volume.</tp:rationale>
+            </tp:docstring>
+            <arg type="s" name="device" direction="in">
+                <tp:docstring>
                The device: mic or speaker
-             </tp:docstring>
-           </arg>
-           <arg type="d" name="value" direction="out">
-             <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <arg type="d" name="value" direction="out">
+                <tp:docstring>
                The volume value (between 0 and 100)
-             </tp:docstring>
-           </arg>
-       </method>
-
-       <signal name="volumeChanged" tp:name-for-bindings="volumeChanged">
-               <tp:docstring>
-             <p>Notify clients of a volume level change.</p>
-             <p>This signal occurs only if ALSA is enabled since Pulseaudio streams are managed externally. </p>
-           </tp:docstring>
-           <arg type="s" name="device">
-             <tp:docstring>
+                </tp:docstring>
+            </arg>
+        </method>
+
+        <signal name="volumeChanged" tp:name-for-bindings="volumeChanged">
+            <tp:docstring>
+                <p>Notify clients of a volume level change.</p>
+                <p>This signal occurs only if ALSA is enabled since Pulseaudio streams are managed externally. </p>
+            </tp:docstring>
+            <arg type="s" name="device">
+                <tp:docstring>
                The device: mic or speaker
-             </tp:docstring>
-           </arg>
-           <arg type="d" name="value">
-             <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <arg type="d" name="value">
+                <tp:docstring>
                The new volume value
-             </tp:docstring>
-           </arg>
-       </signal>
-
-       <!-- For now only expose these two options to clients -->
-       <method name="muteDtmf" tp:name-for-bindings="muteDtmf">
-           <arg type="b" name="mute" direction="in"/>
-       </method>
-       <method name="isDtmfMuted" tp:name-for-bindings="isDtmfMuted">
-           <arg type="b" name="muted" direction="out"/>
-       </method>
-
-       <method name="muteCapture" tp:name-for-bindings="muteCapture">
-           <arg type="b" name="mute" direction="in">
-               <tp:docstring>
+                </tp:docstring>
+            </arg>
+        </signal>
+
+        <!-- For now only expose these two options to clients -->
+        <method name="muteDtmf" tp:name-for-bindings="muteDtmf">
+            <arg type="b" name="mute" direction="in"/>
+        </method>
+        <method name="isDtmfMuted" tp:name-for-bindings="isDtmfMuted">
+            <arg type="b" name="muted" direction="out"/>
+        </method>
+
+        <method name="muteCapture" tp:name-for-bindings="muteCapture">
+            <arg type="b" name="mute" direction="in">
+                <tp:docstring>
                    True to mute audio capture, false to unmute.
-               </tp:docstring>
-           </arg>
-       </method>
+                </tp:docstring>
+            </arg>
+        </method>
 
-       <method name="isCaptureMuted" tp:name-for-bindings="isCaptureMuted">
-           <arg type="b" name="muted" direction="out">
-               <tp:docstring>
+        <method name="isCaptureMuted" tp:name-for-bindings="isCaptureMuted">
+            <arg type="b" name="muted" direction="out">
+                <tp:docstring>
                    Returns true if audio capture is muted, false otherwise.
-               </tp:docstring>
-           </arg>
-       </method>
+                </tp:docstring>
+            </arg>
+        </method>
 
-       <method name="mutePlayback" tp:name-for-bindings="mutePlayback">
-           <arg type="b" name="mute" direction="in">
-               <tp:docstring>
+        <method name="mutePlayback" tp:name-for-bindings="mutePlayback">
+            <arg type="b" name="mute" direction="in">
+                <tp:docstring>
                    True to mute audio playback, false otherwise.
-               </tp:docstring>
-           </arg>
-       </method>
+                </tp:docstring>
+            </arg>
+        </method>
 
-       <method name="isPlaybackMuted" tp:name-for-bindings="isPlaybackMuted">
-           <arg type="b" name="muted" direction="out">
-               <tp:docstring>
+        <method name="isPlaybackMuted" tp:name-for-bindings="isPlaybackMuted">
+            <arg type="b" name="muted" direction="out">
+                <tp:docstring>
                    Returns true if audio playback is muted, false otherwise.
-               </tp:docstring>
-           </arg>
-       </method>
+                </tp:docstring>
+            </arg>
+        </method>
 
-       <method name="muteRingtone" tp:name-for-bindings="muteRingtone">
-           <arg type="b" name="mute" direction="in">
-               <tp:docstring>
+        <method name="muteRingtone" tp:name-for-bindings="muteRingtone">
+            <arg type="b" name="mute" direction="in">
+                <tp:docstring>
                    True to mute ringtone, false otherwise.
-               </tp:docstring>
-           </arg>
-       </method>
+                </tp:docstring>
+            </arg>
+        </method>
 
-       <method name="isRingtoneMuted" tp:name-for-bindings="isRingtoneMuted">
-           <arg type="b" name="muted" direction="out">
-               <tp:docstring>
+        <method name="isRingtoneMuted" tp:name-for-bindings="isRingtoneMuted">
+            <arg type="b" name="muted" direction="out">
+                <tp:docstring>
                    Returns true if ringtone is muted, false otherwise.
-               </tp:docstring>
-           </arg>
-       </method>
-
-       <method name="getAudioManager" tp:name-for-bindings="getAudioManager">
-           <arg type="s" name="api" direction="out">
-           </arg>
-       </method>
-
-       <method name="setAudioManager" tp:name-for-bindings="setAudioManager">
-           <arg type="s" name="api" direction="in">
-           </arg>
-           <arg type="b" name="successful" direction="out">
-           </arg>
-       </method>
-
-       <method name="getSupportedAudioManagers" tp:name-for-bindings="getSupportedAudioManagers">
-           <tp:docstring>
+                </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="getAudioManager" tp:name-for-bindings="getAudioManager">
+            <arg type="s" name="api" direction="out">
+            </arg>
+        </method>
+
+        <method name="setAudioManager" tp:name-for-bindings="setAudioManager">
+            <arg type="s" name="api" direction="in">
+            </arg>
+            <arg type="b" name="successful" direction="out">
+            </arg>
+        </method>
+
+        <method name="getSupportedAudioManagers" tp:name-for-bindings="getSupportedAudioManagers">
+            <tp:docstring>
                Returns a list of compiled audio backends.
-           </tp:docstring>
-           <arg type="as" name="api" direction="out">
-           </arg>
-       </method>
-
-       <method name="getRecordPath" tp:name-for-bindings="getRecordPath">
-           <arg type="s" name="rec" direction="out">
-           </arg>
-       </method>
-
-       <method name="setRecordPath" tp:name-for-bindings="setRecordPath">
-           <arg type="s" name="rec" direction="in">
-           </arg>
-       </method>
-
-       <method name="getIsAlwaysRecording" tp:name-for-bindings="getIsAlwaysRecording">
-           <arg type="b" name="res" direction="out">
-           </arg>
-       </method>
-
-       <method name="setIsAlwaysRecording" tp:name-for-bindings="setIsAlwaysRecording">
-           <arg type="b" name="enabled" direction="in">
-           </arg>
-       </method>
-
-       <method name="getRecordPreview" tp:name-for-bindings="getRecordPreview">
-           <arg type="b" name="res" direction="out">
-           </arg>
-       </method>
-
-       <method name="setRecordPreview" tp:name-for-bindings="setRecordPreview">
-           <arg type="b" name="enabled" direction="in">
-           </arg>
-       </method>
-
-       <method name="getRecordQuality" tp:name-for-bindings="getRecordQuality">
-           <arg type="i" name="res" direction="out">
-           </arg>
-       </method>
-
-       <method name="setRecordQuality" tp:name-for-bindings="setRecordQuality">
-           <arg type="i" name="enabled" direction="in">
-           </arg>
-       </method>
-
-       <!--      ///////////////////////               -->
-
-       <!-- Codecs-related methods -->
-
-       <method name="getCodecList" tp:name-for-bindings="getCodecList">
-           <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="VectorUInt"/>
-           <arg type="au" name="list" direction="out">
-           </arg>
-       </method>
-
-       <method name="getCodecDetails" tp:name-for-bindings="getCodecDetails">
-           <arg type="s" name="accountID" direction="in"></arg>
-           <arg type="u" name="codecId" direction="in"></arg>
-           <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="MapStringString"/>
-           <arg type="a{ss}" name="details" direction="out" tp:type="String_String_Map">
-           </arg>
-       </method>
-
-       <method name="setCodecDetails" tp:name-for-bindings="setCodecDetails">
-           <arg type="b" name="result" direction="out"></arg>
-           <arg type="s" name="accountID" direction="in"></arg>
-           <arg type="u" name="codecId" direction="in"></arg>
-           <annotation name="org.qtproject.QtDBus.QtTypeName.In2" value="MapStringString"/>
-           <arg type="a{ss}" name="details" direction="in" tp:type="String_String_Map">
-           </arg>
-       </method>
-
-       <method name="getActiveCodecList" tp:name-for-bindings="getActiveCodecList">
-           <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="VectorUInt"/>
-           <arg type="s" name="accountID" direction="in">
-           </arg>
-           <arg type="au" name="list" direction="out">
-           </arg>
-       </method>
-
-       <method name="setActiveCodecList" tp:name-for-bindings="setActiveCodecList">
-           <annotation name="org.qtproject.QtDBus.QtTypeName.In1" value="VectorUInt"/>
-           <arg type="s" name="accountID" direction="in">
-           </arg>
-           <arg type="au" name="list" direction="in">
-           </arg>
-       </method>
+            </tp:docstring>
+            <arg type="as" name="api" direction="out">
+            </arg>
+        </method>
+
+        <method name="getRecordPath" tp:name-for-bindings="getRecordPath">
+            <arg type="s" name="rec" direction="out">
+            </arg>
+        </method>
+
+        <method name="setRecordPath" tp:name-for-bindings="setRecordPath">
+            <arg type="s" name="rec" direction="in">
+            </arg>
+        </method>
+
+        <method name="getIsAlwaysRecording" tp:name-for-bindings="getIsAlwaysRecording">
+            <arg type="b" name="res" direction="out">
+            </arg>
+        </method>
+
+        <method name="setIsAlwaysRecording" tp:name-for-bindings="setIsAlwaysRecording">
+            <arg type="b" name="enabled" direction="in">
+            </arg>
+        </method>
+
+        <method name="getRecordPreview" tp:name-for-bindings="getRecordPreview">
+            <arg type="b" name="res" direction="out">
+            </arg>
+        </method>
+
+        <method name="setRecordPreview" tp:name-for-bindings="setRecordPreview">
+            <arg type="b" name="enabled" direction="in">
+            </arg>
+        </method>
+
+        <method name="getRecordQuality" tp:name-for-bindings="getRecordQuality">
+            <arg type="i" name="res" direction="out">
+            </arg>
+        </method>
+
+        <method name="setRecordQuality" tp:name-for-bindings="setRecordQuality">
+            <arg type="i" name="enabled" direction="in">
+            </arg>
+        </method>
+
+        <!--      ///////////////////////               -->
+
+        <!-- Codecs-related methods -->
+
+        <method name="getCodecList" tp:name-for-bindings="getCodecList">
+            <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="VectorUInt"/>
+            <arg type="au" name="list" direction="out">
+            </arg>
+        </method>
+
+        <method name="getCodecDetails" tp:name-for-bindings="getCodecDetails">
+            <arg type="s" name="accountID" direction="in"></arg>
+            <arg type="u" name="codecId" direction="in"></arg>
+            <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="MapStringString"/>
+            <arg type="a{ss}" name="details" direction="out" tp:type="String_String_Map">
+            </arg>
+        </method>
+
+        <method name="setCodecDetails" tp:name-for-bindings="setCodecDetails">
+            <arg type="b" name="result" direction="out"></arg>
+            <arg type="s" name="accountID" direction="in"></arg>
+            <arg type="u" name="codecId" direction="in"></arg>
+            <annotation name="org.qtproject.QtDBus.QtTypeName.In2" value="MapStringString"/>
+            <arg type="a{ss}" name="details" direction="in" tp:type="String_String_Map">
+            </arg>
+        </method>
+
+        <method name="getActiveCodecList" tp:name-for-bindings="getActiveCodecList">
+            <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="VectorUInt"/>
+            <arg type="s" name="accountID" direction="in">
+            </arg>
+            <arg type="au" name="list" direction="out">
+            </arg>
+        </method>
+
+        <method name="setActiveCodecList" tp:name-for-bindings="setActiveCodecList">
+            <annotation name="org.qtproject.QtDBus.QtTypeName.In1" value="VectorUInt"/>
+            <arg type="s" name="accountID" direction="in">
+            </arg>
+            <arg type="au" name="list" direction="in">
+            </arg>
+        </method>
 
         <!-- Hardware encoding/decoding signals -->
         <signal name="hardwareDecodingChanged" tp:name-for-bindings="hardwareDecodingChanged">
-           <arg type="b" name="state">
-               <tp:docstring>
+            <arg type="b" name="state">
+                <tp:docstring>
                    If hardware decoding is enabled
-               </tp:docstring>
-           </arg>
-           <tp:docstring>Signal triggered when hardware decoding changes.</tp:docstring>
+                </tp:docstring>
+            </arg>
+            <tp:docstring>Signal triggered when hardware decoding changes.</tp:docstring>
         </signal>
         <signal name="hardwareEncodingChanged" tp:name-for-bindings="hardwareEncodingChanged">
-           <arg type="b" name="state">
-               <tp:docstring>
+            <arg type="b" name="state">
+                <tp:docstring>
                    If hardware encoding is enabled
-               </tp:docstring>
-           </arg>
-           <tp:docstring>Signal triggered when hardware encoding changes.</tp:docstring>
+                </tp:docstring>
+            </arg>
+            <tp:docstring>Signal triggered when hardware encoding changes.</tp:docstring>
         </signal>
 
-       <!-- Audio devices methods -->
+        <!-- Audio devices methods -->
 
-       <method name="getAudioPluginList" tp:name-for-bindings="getAudioPluginList">
-           <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="VectorString"/>
-           <arg type="as" name="list" direction="out">
-           </arg>
-       </method>
+        <method name="getAudioPluginList" tp:name-for-bindings="getAudioPluginList">
+            <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="VectorString"/>
+            <arg type="as" name="list" direction="out">
+            </arg>
+        </method>
 
-       <method name="setAudioPlugin" tp:name-for-bindings="setAudioPlugin">
-           <arg type="s" name="audioPlugin" direction="in">
-           </arg>
-       </method>
+        <method name="setAudioPlugin" tp:name-for-bindings="setAudioPlugin">
+            <arg type="s" name="audioPlugin" direction="in">
+            </arg>
+        </method>
 
         <signal name="audioDeviceEvent" tp:name-for-bindings="audioDeviceEvent">
-           <tp:docstring>Signal triggered by changes in the detected audio devices, e.g. a headset being unplugged.</tp:docstring>
+            <tp:docstring>Signal triggered by changes in the detected audio devices, e.g. a headset being unplugged.</tp:docstring>
         </signal>
 
-       <method name="getAudioOutputDeviceList" tp:name-for-bindings="getAudioOutputDeviceList">
-           <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="VectorString"/>
-           <arg type="as" name="list" direction="out">
-           </arg>
-       </method>
-
-       <method name="setAudioOutputDevice" tp:name-for-bindings="setAudioOutputDevice">
-           <arg type="i" name="index" direction="in">
-           </arg>
-       </method>
-
-       <method name="setAudioInputDevice" tp:name-for-bindings="setAudioInputDevice">
-           <arg type="i" name="index" direction="in">
-           </arg>
-       </method>
-
-       <method name="setAudioRingtoneDevice" tp:name-for-bindings="setAudioRingtoneDevice">
-           <arg type="i" name="index" direction="in">
-           </arg>
-       </method>
-
-       <method name="getAudioInputDeviceList" tp:name-for-bindings="getAudioInputDeviceList">
-           <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="VectorString"/>
-           <arg type="as" name="list" direction="out">
-           </arg>
-       </method>
-
-
-       <method name="getCurrentAudioDevicesIndex" tp:name-for-bindings="getCurrentAudioDevicesIndex">
-           <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="VectorString"/>
-           <arg type="as" name="list" direction="out">
-           </arg>
-       </method>
-
-       <method name="getAudioInputDeviceIndex" tp:name-for-bindings="getAudioInputDeviceIndex">
-           <arg type="s" name="devname" direction="in">
-           </arg>
-           <arg type="i" name="index" direction="out">
-           </arg>
-       </method>
-
-       <method name="getAudioOutputDeviceIndex" tp:name-for-bindings="getAudioOutputDeviceIndex">
-           <arg type="s" name="devname" direction="in">
-           </arg>
-           <arg type="i" name="index" direction="out">
-           </arg>
-       </method>
-
-       <method name="getCurrentAudioOutputPlugin" tp:name-for-bindings="getCurrentAudioOutputPlugin">
-           <arg type="s" name="plugin" direction="out">
-           </arg>
-       </method>
+        <method name="getAudioOutputDeviceList" tp:name-for-bindings="getAudioOutputDeviceList">
+            <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="VectorString"/>
+            <arg type="as" name="list" direction="out">
+            </arg>
+        </method>
+
+        <method name="setAudioOutputDevice" tp:name-for-bindings="setAudioOutputDevice">
+            <arg type="i" name="index" direction="in">
+            </arg>
+        </method>
+
+        <method name="setAudioInputDevice" tp:name-for-bindings="setAudioInputDevice">
+            <arg type="i" name="index" direction="in">
+            </arg>
+        </method>
+
+        <method name="setAudioRingtoneDevice" tp:name-for-bindings="setAudioRingtoneDevice">
+            <arg type="i" name="index" direction="in">
+            </arg>
+        </method>
+
+        <method name="getAudioInputDeviceList" tp:name-for-bindings="getAudioInputDeviceList">
+            <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="VectorString"/>
+            <arg type="as" name="list" direction="out">
+            </arg>
+        </method>
+
+
+        <method name="getCurrentAudioDevicesIndex" tp:name-for-bindings="getCurrentAudioDevicesIndex">
+            <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="VectorString"/>
+            <arg type="as" name="list" direction="out">
+            </arg>
+        </method>
+
+        <method name="getAudioInputDeviceIndex" tp:name-for-bindings="getAudioInputDeviceIndex">
+            <arg type="s" name="devname" direction="in">
+            </arg>
+            <arg type="i" name="index" direction="out">
+            </arg>
+        </method>
+
+        <method name="getAudioOutputDeviceIndex" tp:name-for-bindings="getAudioOutputDeviceIndex">
+            <arg type="s" name="devname" direction="in">
+            </arg>
+            <arg type="i" name="index" direction="out">
+            </arg>
+        </method>
+
+        <method name="getCurrentAudioOutputPlugin" tp:name-for-bindings="getCurrentAudioOutputPlugin">
+            <arg type="s" name="plugin" direction="out">
+            </arg>
+        </method>
 
         <!-- Audio meter -->
         <method name="isAudioMeterActive" tp:name-for-bindings="isAudioMeterActive">
@@ -1022,1230 +1023,1256 @@
         </method>
 
         <signal name="audioMeter" tp:name-for-bindings="audioMeter">
-           <tp:docstring>Signal containing volume level.</tp:docstring>
-           <arg type="s" name="id">
-               <tp:docstring>Ring buffer id.</tp:docstring>
-           </arg>
-           <arg type="d" name="level">
-               <tp:docstring>RMS value for the volume. Conversion to dB can be done with dB=20*log10(level). Level is between 0 and 1.</tp:docstring>
-           </arg>
+            <tp:docstring>Signal containing volume level.</tp:docstring>
+            <arg type="s" name="id">
+                <tp:docstring>Ring buffer id.</tp:docstring>
+            </arg>
+            <arg type="d" name="level">
+                <tp:docstring>RMS value for the volume. Conversion to dB can be done with dB=20*log10(level). Level is between 0 and 1.</tp:docstring>
+            </arg>
         </signal>
 
-       <!--    General Settings Panel         -->
+        <!--    General Settings Panel         -->
 
-       <method name="getNoiseSuppressState" tp:name-for-bindings="getNoiseSuppressState">
-           <tp:added version="13.5.0"/>
-           <arg type="s" name="state" direction="out">
-           </arg>
-       </method>
+        <method name="getNoiseSuppressState" tp:name-for-bindings="getNoiseSuppressState">
+            <tp:added version="13.5.0"/>
+            <arg type="s" name="state" direction="out">
+            </arg>
+        </method>
 
-       <method name="setNoiseSuppressState" tp:name-for-bindings="setNoiseSuppressState">
+        <method name="setNoiseSuppressState" tp:name-for-bindings="setNoiseSuppressState">
             <tp:added version="13.5.0"/>
             <arg type="s" name="state" direction="in">
             </arg>
-       </method>
+        </method>
 
-       <method name="isAgcEnabled" tp:name-for-bindings="isAgcEnabled">
-           <arg type="b" name="enabled" direction="out">
-           </arg>
-       </method>
+        <method name="isAgcEnabled" tp:name-for-bindings="isAgcEnabled">
+            <arg type="b" name="enabled" direction="out">
+            </arg>
+        </method>
 
-       <method name="setAgcState" tp:name-for-bindings="setAgcState">
-               <arg type="b" name="enabled" direction="in">
-               </arg>
-       </method>
+        <method name="setAgcState" tp:name-for-bindings="setAgcState">
+            <arg type="b" name="enabled" direction="in">
+            </arg>
+        </method>
 
-       <!--    General Settings Panel         -->
+        <!--    General Settings Panel         -->
 
-       <method name="getHistoryLimit" tp:name-for-bindings="getHistoryLimit">
-           <arg type="i" name="days" direction="out">
-           </arg>
-       </method>
+        <method name="getHistoryLimit" tp:name-for-bindings="getHistoryLimit">
+            <arg type="i" name="days" direction="out">
+            </arg>
+        </method>
 
-       <method name="setHistoryLimit" tp:name-for-bindings="setHistoryLimit">
-           <arg type="i" name="days" direction="in">
-           </arg>
-       </method>
+        <method name="setHistoryLimit" tp:name-for-bindings="setHistoryLimit">
+            <arg type="i" name="days" direction="in">
+            </arg>
+        </method>
 
-       <method name="getRingingTimeout" tp:name-for-bindings="getRingingTimeout">
-           <arg type="i" name="timeout" direction="out">
-           </arg>
-       </method>
+        <method name="getRingingTimeout" tp:name-for-bindings="getRingingTimeout">
+            <arg type="i" name="timeout" direction="out">
+            </arg>
+        </method>
 
-       <method name="setRingingTimeout" tp:name-for-bindings="setRingingTimeout">
-           <arg type="i" name="timeout" direction="in">
-           </arg>
-       </method>
+        <method name="setRingingTimeout" tp:name-for-bindings="setRingingTimeout">
+            <arg type="i" name="timeout" direction="in">
+            </arg>
+        </method>
 
-       <signal name="accountsChanged" tp:name-for-bindings="accountsChanged">
-       </signal>
+        <signal name="accountsChanged" tp:name-for-bindings="accountsChanged">
+        </signal>
 
-       <signal name="accountDetailsChanged" tp:name-for-bindings="accountDetailsChanged">
-           <arg type="s" name="accountID">
-               <tp:docstring>
+        <signal name="accountDetailsChanged" tp:name-for-bindings="accountDetailsChanged">
+            <arg type="s" name="accountID">
+                <tp:docstring>
                    The account ID
-               </tp:docstring>
-           </arg>
-           <annotation name="org.qtproject.QtDBus.QtTypeName.Out1" value="MapStringString"/>
-           <arg type="a{ss}" name="details" tp:type="String_String_Map">
-               <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <annotation name="org.qtproject.QtDBus.QtTypeName.Out1" value="MapStringString"/>
+            <arg type="a{ss}" name="details" tp:type="String_String_Map">
+                <tp:docstring>
                    New persistent account details
-               </tp:docstring>
-           </arg>
-       </signal>
-
-       <signal name="registrationStateChanged" tp:name-for-bindings="registrationStateChanged">
-           <arg type="s" name="accountID"/>
-           <arg type="s" name="registrationState"/>
-           <arg type="i" name="registrationDetail">
-               <tp:docstring>
+                </tp:docstring>
+            </arg>
+        </signal>
+
+        <signal name="registrationStateChanged" tp:name-for-bindings="registrationStateChanged">
+            <arg type="s" name="accountID"/>
+            <arg type="s" name="registrationState"/>
+            <arg type="i" name="registrationDetail">
+                <tp:docstring>
                    The optional account-type specific message code. 0 when not available.
-               </tp:docstring>
-           </arg>
-           <arg type="s" name="registrationDetailStr">
-               <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <arg type="s" name="registrationDetailStr">
+                <tp:docstring>
                    The optional account-type specific message string. Empty string when not available.
-               </tp:docstring>
-           </arg>
-       </signal>
+                </tp:docstring>
+            </arg>
+        </signal>
 
-       <signal name="volatileAccountDetailsChanged" tp:name-for-bindings="volatileAccountDetailsChanged">
-           <arg type="s" name="accountID">
-               <tp:docstring>
+        <signal name="volatileAccountDetailsChanged" tp:name-for-bindings="volatileAccountDetailsChanged">
+            <arg type="s" name="accountID">
+                <tp:docstring>
                    The account ID
-               </tp:docstring>
-           </arg>
-           <annotation name="org.qtproject.QtDBus.QtTypeName.Out1" value="MapStringString"/>
-           <arg type="a{ss}" name="details" tp:type="String_String_Map">
-               <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <annotation name="org.qtproject.QtDBus.QtTypeName.Out1" value="MapStringString"/>
+            <arg type="a{ss}" name="details" tp:type="String_String_Map">
+                <tp:docstring>
                    Account.registrationCoarseStatus      ( Coarse status like, UNREGISTERED or TRYING )
                    Account.registrationStatus            ( Error code, like 200 (OK) or 408 (Timeout) )
                    Account.registrationStatusDescription ( A technical error message (from PJSIP)     )
                    Account.lastSuccessfulRegister        ( Timestamp of the last "REGISTERED" event   )
                    Account.presenceStatus                ( Published presence status                  )
                    Account.presenceNote                  ( Published presence note (status string)    )
-               </tp:docstring>
-           </arg>
-       </signal>
-
-       <signal name="stunStatusFailure" tp:name-for_bindings="stunStatusFailure">
-           <arg type="s" name="reason">
-           </arg>
-       </signal>
-
-       <signal name="errorAlert" tp:name-for-bindings="errorAlert">
-           <arg type="i" name="code">
-           </arg>
-       </signal>
-
-       <!-- TLS Methods -->
-       <method name="getSupportedTlsMethod" tp:name-for-bindings="getSupportedTlsMethod">
-           <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="VectorString"/>
-           <arg type="as" name="list" direction="out">
-           </arg>
-       </method>
-
-        <method name="getSupportedCiphers" tp:name-for-bindings="getSupportedCiphers">
-           <tp:added version="2.0.0"/>
-           <tp:docstring>
-                Returns a list of supported encryption ciphers used to encrypt SIP messages. The list depends on the TLS library being used.
-                Only registered SIP accounts currently support setting custom ciphers. This method returns an empty list if TLS support is disabled in either pjproject or Jami.
-           </tp:docstring>
-           <arg type="s" name="accountID" direction="in">
-                <tp:docstring>
-                    A SIP account id, other account IDs will be rejected.
                 </tp:docstring>
-           </arg>
-           <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="VectorString"/>
-           <arg type="as" name="list" direction="out">
-               <tp:docstring>
-                   A list of randomly sorted cipher names. The order may or may
-                   not be significant depending on the SSL library being used.
-               </tp:docstring>
-           </arg>
-       </method>
-
-       <method name="validateCertificate" tp:name-for-bindings="validateCertificate">
-           <arg type="s" name="accountId" direction="in"></arg>
-           <arg type="s" name="certificate" direction="in">
-              <tp:docstring>
-               <p>A certificate ID</p>
-              </tp:docstring>
-           </arg>
-           <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="MapStringString"/>
-           <arg type="a{ss}" name="details" direction="out">
-              <tp:docstring>
-               <p>A key-value list of all certificate validation</p>
-               The constants used as keys are defined in the "security.h" constants header file
-              </tp:docstring>
-           </arg>
-       </method>
-
-       <method name="validateCertificatePath" tp:name-for-bindings="validateCertificate">
-           <arg type="s" name="accountId" direction="in"></arg>
-           <arg type="s" name="certificatePath" direction="in">
-              <tp:docstring>
-               <p>A certificate path.</p>
-              </tp:docstring>
-           </arg>
-           <arg type="s" name="privateKeyPath" direction="in">
-              <tp:docstring>
-               <p>An optional path a the private key for the certificate</p>
-              </tp:docstring>
-           </arg>
-           <arg type="s" name="privateKeyPasswd" direction="in">
-              <tp:docstring>
-               <p>An optional private key password</p>
-              </tp:docstring>
-           </arg>
-           <arg type="s" name="caListPath" direction="in">
-              <tp:docstring>
-               <p>An optional path to an assumed valid ca list</p>
-              </tp:docstring>
-           </arg>
-           <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="MapStringString"/>
-           <arg type="a{ss}" name="details" direction="out">
-              <tp:docstring>
-               <p>A key-value list of all certificate validation</p>
-               The constants used as keys are defined in the "security.h" constants header file
-              </tp:docstring>
-           </arg>
-       </method>
-
-       <method name="getCertificateDetails" tp:name-for-bindings="getCertificateDetails">
-           <arg type="s" name="accountId" direction="in"></arg>
-           <arg type="s" name="certificate" direction="in">
-              <tp:docstring>
-               <p>A certificate ID</p>
-              </tp:docstring>
-           </arg>
-           <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="MapStringString"/>
-           <arg type="a{ss}" name="details" direction="out">
-              <tp:docstring>
-               <p>A key-value list of all certificate details</p>
+            </arg>
+        </signal>
+
+        <signal name="stunStatusFailure" tp:name-for_bindings="stunStatusFailure">
+            <arg type="s" name="reason">
+            </arg>
+        </signal>
+
+        <signal name="errorAlert" tp:name-for-bindings="errorAlert">
+            <arg type="i" name="code">
+            </arg>
+        </signal>
+
+        <!-- TLS Methods -->
+        <method name="getSupportedTlsMethod" tp:name-for-bindings="getSupportedTlsMethod">
+            <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="VectorString"/>
+            <arg type="as" name="list" direction="out">
+            </arg>
+        </method>
+
+        <method name="getSupportedCiphers" tp:name-for-bindings="getSupportedCiphers">
+            <tp:added version="2.0.0"/>
+            <tp:docstring>
+                Returns a list of supported encryption ciphers used to encrypt SIP messages. The list depends on the TLS library being used.
+                Only registered SIP accounts currently support setting custom ciphers. This method returns an empty list if TLS support is disabled in either pjproject or Jami.
+            </tp:docstring>
+            <arg type="s" name="accountID" direction="in">
+                <tp:docstring>
+                    A SIP account id, other account IDs will be rejected.
+                </tp:docstring>
+            </arg>
+            <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="VectorString"/>
+            <arg type="as" name="list" direction="out">
+                <tp:docstring>
+                   A list of randomly sorted cipher names. The order may or may
+                   not be significant depending on the SSL library being used.
+                </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="validateCertificate" tp:name-for-bindings="validateCertificate">
+            <arg type="s" name="accountId" direction="in"></arg>
+            <arg type="s" name="certificate" direction="in">
+                <tp:docstring>
+                    <p>A certificate ID</p>
+                </tp:docstring>
+            </arg>
+            <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="MapStringString"/>
+            <arg type="a{ss}" name="details" direction="out">
+                <tp:docstring>
+                    <p>A key-value list of all certificate validation</p>
+               The constants used as keys are defined in the "security.h" constants header file
+                </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="validateCertificatePath" tp:name-for-bindings="validateCertificate">
+            <arg type="s" name="accountId" direction="in"></arg>
+            <arg type="s" name="certificatePath" direction="in">
+                <tp:docstring>
+                    <p>A certificate path.</p>
+                </tp:docstring>
+            </arg>
+            <arg type="s" name="privateKeyPath" direction="in">
+                <tp:docstring>
+                    <p>An optional path a the private key for the certificate</p>
+                </tp:docstring>
+            </arg>
+            <arg type="s" name="privateKeyPasswd" direction="in">
+                <tp:docstring>
+                    <p>An optional private key password</p>
+                </tp:docstring>
+            </arg>
+            <arg type="s" name="caListPath" direction="in">
+                <tp:docstring>
+                    <p>An optional path to an assumed valid ca list</p>
+                </tp:docstring>
+            </arg>
+            <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="MapStringString"/>
+            <arg type="a{ss}" name="details" direction="out">
+                <tp:docstring>
+                    <p>A key-value list of all certificate validation</p>
                The constants used as keys are defined in the "security.h" constants header file
-              </tp:docstring>
-           </arg>
-       </method>
-
-       <method name="getCertificateDetailsPath" tp:name-for-bindings="getCertificateDetails">
-           <arg type="s" name="accountId" direction="in"></arg>
-           <arg type="s" name="certificatePath" direction="in">
-              <tp:docstring>
-               <p>A certificate path</p>
-              </tp:docstring>
-           </arg>
-           <arg type="s" name="privateKeyPath" direction="in">
-              <tp:docstring>
-               <p>An optional path a the private key for the certificate</p>
-              </tp:docstring>
-           </arg>
-           <arg type="s" name="privateKeyPasswd" direction="in">
-              <tp:docstring>
-               <p>An optional private key password</p>
-              </tp:docstring>
-           </arg>
-           <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="MapStringString"/>
-           <arg type="a{ss}" name="details" direction="out">
-              <tp:docstring>
-               <p>A key-value list of all certificate details</p>
+                </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="getCertificateDetails" tp:name-for-bindings="getCertificateDetails">
+            <arg type="s" name="accountId" direction="in"></arg>
+            <arg type="s" name="certificate" direction="in">
+                <tp:docstring>
+                    <p>A certificate ID</p>
+                </tp:docstring>
+            </arg>
+            <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="MapStringString"/>
+            <arg type="a{ss}" name="details" direction="out">
+                <tp:docstring>
+                    <p>A key-value list of all certificate details</p>
+               The constants used as keys are defined in the "security.h" constants header file
+                </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="getCertificateDetailsPath" tp:name-for-bindings="getCertificateDetails">
+            <arg type="s" name="accountId" direction="in"></arg>
+            <arg type="s" name="certificatePath" direction="in">
+                <tp:docstring>
+                    <p>A certificate path</p>
+                </tp:docstring>
+            </arg>
+            <arg type="s" name="privateKeyPath" direction="in">
+                <tp:docstring>
+                    <p>An optional path a the private key for the certificate</p>
+                </tp:docstring>
+            </arg>
+            <arg type="s" name="privateKeyPasswd" direction="in">
+                <tp:docstring>
+                    <p>An optional private key password</p>
+                </tp:docstring>
+            </arg>
+            <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="MapStringString"/>
+            <arg type="a{ss}" name="details" direction="out">
+                <tp:docstring>
+                    <p>A key-value list of all certificate details</p>
                The constants used as keys are defined in the "security.h" constants header file
-              </tp:docstring>
-           </arg>
-       </method>
-
-       <method name="getPinnedCertificates" tp:name-for-bindings="getPinnedCertificates">
-           <tp:added version="2.2.0"/>
-           <arg type="s" name="accountId" direction="in"></arg>
-           <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="VectorString"/>
-           <arg type="as" name="certIds" direction="out">
-               <tp:docstring>
-                   <p>A list of all known certificate IDs</p>
-               </tp:docstring>
-           </arg>
-       </method>
-
-       <method name="pinCertificate" tp:name-for-bindings="pinCertificate">
-           <tp:added version="2.2.0"/>
-           <arg type="s" name="accountId" direction="in"></arg>
-           <arg type="ay" name="certificateRaw" direction="in">
-               <tp:docstring>
-                   <p>A raw certificate (PEM or DER encoded) to be pinned.</p>
-               </tp:docstring>
-           </arg>
-           <arg type="b" name="local" direction="in">
-               <tp:docstring>
-                   <p>True to save the certificate in the daemon local store.</p>
-               </tp:docstring>
-           </arg>
-           <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="VectorString"/>
-           <arg type="as" name="certId" direction="out">
-               <tp:docstring>
-                   <p>IDs of the pinned certificate chain (from subject to issuer) or empty string on failure.</p>
-               </tp:docstring>
-           </arg>
-       </method>
-
-       <method name="unpinCertificate" tp:name-for-bindings="unpinCertificate">
-           <tp:added version="2.2.0"/>
-           <arg type="s" name="accountId" direction="in"></arg>
-           <arg type="s" name="certId" direction="in">
-               <tp:docstring>
-                   <p>A certificate ID to unpin.</p>
-               </tp:docstring>
-           </arg>
-           <arg type="b" name="success" direction="out">
-               <tp:docstring>
-                   <p>True if a certificate was unpinned.</p>
-               </tp:docstring>
-           </arg>
-       </method>
-
-       <method name="pinCertificatePath" tp:name-for-bindings="pinCertificatePath">
-           <tp:added version="2.2.0"/>
-           <arg type="s" name="accountId" direction="in"></arg>
-           <arg type="s" name="certPath" direction="in">
-               <tp:docstring>
-                   <p>A certificate path to be pinned (assumed non-local).</p>
-               </tp:docstring>
-           </arg>
-       </method>
-
-       <method name="unpinCertificatePath" tp:name-for-bindings="unpinCertificatePath">
-           <tp:added version="2.2.0"/>
-           <arg type="s" name="accountId" direction="in"></arg>
-           <arg type="s" name="certPath" direction="in">
-               <tp:docstring>
-                   <p>Certificates path.</p>
-               </tp:docstring>
-           </arg>
-           <arg type="u" name="unpinned" direction="out">
-               <tp:docstring>
-                   <p>Number of unpinned certificates.</p>
-               </tp:docstring>
-           </arg>
-       </method>
-
-       <method name="pinRemoteCertificate" tp:name-for-bindings="pinRemoteCertificate">
-           <tp:added version="2.2.0"/>
-           <arg type="s" name="accountId" direction="in">
-               <tp:docstring>
-                   <p>An account ID</p>
-               </tp:docstring>
-           </arg>
-           <arg type="s" name="certId" direction="in">
-               <tp:docstring>
-                   <p>A certificate public key ID</p>
-               </tp:docstring>
-           </arg>
-           <arg type="b" name="success" direction="out">
-               <tp:docstring>
-                   <p>True if the search started</p>
-               </tp:docstring>
-           </arg>
-       </method>
-
-       <method name="setCertificateStatus" tp:name-for-bindings="setCertificateStatus">
-           <tp:added version="2.2.0"/>
-           <arg type="s" name="accountId" direction="in">
-               <tp:docstring>
-                   <p>An account ID</p>
-               </tp:docstring>
-           </arg>
-           <arg type="s" name="certId" direction="in">
-               <tp:docstring>
-                   <p>A certificate ID</p>
-               </tp:docstring>
-           </arg>
-           <arg type="s" name="status" direction="in">
-               <tp:docstring>
+                </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="getPinnedCertificates" tp:name-for-bindings="getPinnedCertificates">
+            <tp:added version="2.2.0"/>
+            <arg type="s" name="accountId" direction="in"></arg>
+            <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="VectorString"/>
+            <arg type="as" name="certIds" direction="out">
+                <tp:docstring>
+                    <p>A list of all known certificate IDs</p>
+                </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="pinCertificate" tp:name-for-bindings="pinCertificate">
+            <tp:added version="2.2.0"/>
+            <arg type="s" name="accountId" direction="in"></arg>
+            <arg type="ay" name="certificateRaw" direction="in">
+                <tp:docstring>
+                    <p>A raw certificate (PEM or DER encoded) to be pinned.</p>
+                </tp:docstring>
+            </arg>
+            <arg type="b" name="local" direction="in">
+                <tp:docstring>
+                    <p>True to save the certificate in the daemon local store.</p>
+                </tp:docstring>
+            </arg>
+            <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="VectorString"/>
+            <arg type="as" name="certId" direction="out">
+                <tp:docstring>
+                    <p>IDs of the pinned certificate chain (from subject to issuer) or empty string on failure.</p>
+                </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="unpinCertificate" tp:name-for-bindings="unpinCertificate">
+            <tp:added version="2.2.0"/>
+            <arg type="s" name="accountId" direction="in"></arg>
+            <arg type="s" name="certId" direction="in">
+                <tp:docstring>
+                    <p>A certificate ID to unpin.</p>
+                </tp:docstring>
+            </arg>
+            <arg type="b" name="success" direction="out">
+                <tp:docstring>
+                    <p>True if a certificate was unpinned.</p>
+                </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="pinCertificatePath" tp:name-for-bindings="pinCertificatePath">
+            <tp:added version="2.2.0"/>
+            <arg type="s" name="accountId" direction="in"></arg>
+            <arg type="s" name="certPath" direction="in">
+                <tp:docstring>
+                    <p>A certificate path to be pinned (assumed non-local).</p>
+                </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="unpinCertificatePath" tp:name-for-bindings="unpinCertificatePath">
+            <tp:added version="2.2.0"/>
+            <arg type="s" name="accountId" direction="in"></arg>
+            <arg type="s" name="certPath" direction="in">
+                <tp:docstring>
+                    <p>Certificates path.</p>
+                </tp:docstring>
+            </arg>
+            <arg type="u" name="unpinned" direction="out">
+                <tp:docstring>
+                    <p>Number of unpinned certificates.</p>
+                </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="pinRemoteCertificate" tp:name-for-bindings="pinRemoteCertificate">
+            <tp:added version="2.2.0"/>
+            <arg type="s" name="accountId" direction="in">
+                <tp:docstring>
+                    <p>An account ID</p>
+                </tp:docstring>
+            </arg>
+            <arg type="s" name="certId" direction="in">
+                <tp:docstring>
+                    <p>A certificate public key ID</p>
+                </tp:docstring>
+            </arg>
+            <arg type="b" name="success" direction="out">
+                <tp:docstring>
+                    <p>True if the search started</p>
+                </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="setCertificateStatus" tp:name-for-bindings="setCertificateStatus">
+            <tp:added version="2.2.0"/>
+            <arg type="s" name="accountId" direction="in">
+                <tp:docstring>
+                    <p>An account ID</p>
+                </tp:docstring>
+            </arg>
+            <arg type="s" name="certId" direction="in">
+                <tp:docstring>
+                    <p>A certificate ID</p>
+                </tp:docstring>
+            </arg>
+            <arg type="s" name="status" direction="in">
+                <tp:docstring>
                    The new status of the certificate for the specified account.
                    UNDEFINED : forget any previous certificate state for this account.
                    ALLOWED   : consider the certificate as trusted for this account.
                    BANNED    : consider the certificate as banned for this account.
-               </tp:docstring>
-           </arg>
-           <arg type="b" name="success" direction="out">
-               <tp:docstring>
-                   <p>True if the certificate state was successfully set.</p>
-               </tp:docstring>
-           </arg>
-       </method>
-
-       <method name="getCertificatesByStatus" tp:name-for-bindings="getCertificatesByStatus">
-           <tp:added version="2.2.0"/>
-           <arg type="s" name="accountId" direction="in">
-               <tp:docstring>
-                   <p>An account ID</p>
-               </tp:docstring>
-           </arg>
-           <arg type="s" name="status" direction="in">
-               <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <arg type="b" name="success" direction="out">
+                <tp:docstring>
+                    <p>True if the certificate state was successfully set.</p>
+                </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="getCertificatesByStatus" tp:name-for-bindings="getCertificatesByStatus">
+            <tp:added version="2.2.0"/>
+            <arg type="s" name="accountId" direction="in">
+                <tp:docstring>
+                    <p>An account ID</p>
+                </tp:docstring>
+            </arg>
+            <arg type="s" name="status" direction="in">
+                <tp:docstring>
                    The queried certificate status.
                    ALLOWED : trusted certificate for this account.
                    BANNED  : banned certificate for this account.
-               </tp:docstring>
-           </arg>
-           <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="VectorString"/>
-           <arg type="as" name="list" direction="out">
-               <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="VectorString"/>
+            <arg type="as" name="list" direction="out">
+                <tp:docstring>
                    A list of certificate ids with the provided status
-               </tp:docstring>
-           </arg>
-       </method>
+                </tp:docstring>
+            </arg>
+        </method>
 
-       <signal name="certificateStateChanged" tp:name-for-bindings="certificateStateChanged">
-           <tp:added version="2.2.0"/>
-           <tp:docstring>
+        <signal name="certificateStateChanged" tp:name-for-bindings="certificateStateChanged">
+            <tp:added version="2.2.0"/>
+            <tp:docstring>
                Notify clients that a certificate status have changed.
-           </tp:docstring>
-           <arg type="s" name="accountId">
-           </arg>
-           <arg type="s" name="certId">
-           </arg>
-           <arg type="s" name="state">
-           </arg>
-       </signal>
-
-       <signal name="certificatePinned" tp:name-for-bindings="certificatePinned">
-           <tp:added version="2.2.0"/>
-           <tp:docstring>
+            </tp:docstring>
+            <arg type="s" name="accountId">
+            </arg>
+            <arg type="s" name="certId">
+            </arg>
+            <arg type="s" name="state">
+            </arg>
+        </signal>
+
+        <signal name="certificatePinned" tp:name-for-bindings="certificatePinned">
+            <tp:added version="2.2.0"/>
+            <tp:docstring>
                Notify clients that a certificate have been added to the store.
-           </tp:docstring>
-           <arg type="s" name="certId">
-           </arg>
-       </signal>
-
-       <signal name="certificatePathPinned" tp:name-for-bindings="certificatePathPinned">
-           <tp:added version="2.2.0"/>
-           <tp:docstring>
+            </tp:docstring>
+            <arg type="s" name="certId">
+            </arg>
+        </signal>
+
+        <signal name="certificatePathPinned" tp:name-for-bindings="certificatePathPinned">
+            <tp:added version="2.2.0"/>
+            <tp:docstring>
                Notify clients that a certificate path have been added to the store.
-           </tp:docstring>
-           <arg type="s" name="path">
-               <tp:docstring>
+            </tp:docstring>
+            <arg type="s" name="path">
+                <tp:docstring>
                    Pinned path.
-               </tp:docstring>
-           </arg>
-           <arg type="as" name="certIds">
-               <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <arg type="as" name="certIds">
+                <tp:docstring>
                    A list of certificate ids.
-               </tp:docstring>
-           </arg>
-       </signal>
+                </tp:docstring>
+            </arg>
+        </signal>
 
-       <signal name="certificateExpired" tp:name-for-bindings="certificateExpired">
-           <tp:added version="2.2.0"/>
-           <tp:docstring>
+        <signal name="certificateExpired" tp:name-for-bindings="certificateExpired">
+            <tp:added version="2.2.0"/>
+            <tp:docstring>
                Notify clients that a certificate expired.
-           </tp:docstring>
-           <arg type="s" name="certId">
-               <tp:docstring>
+            </tp:docstring>
+            <arg type="s" name="certId">
+                <tp:docstring>
                    A certificate id.
-               </tp:docstring>
-           </arg>
-       </signal>
-
-       <method name="getTrustRequests" tp:name-for-bindings="getTrustRequests">
-           <tp:added version="2.2.0"/>
-           <arg type="s" name="accountID" direction="in">
-           </arg>
-           <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="VectorMapStringString"/>
-           <arg type="aa{ss}" name="requests" direction="out" >
-               <tp:docstring>
+                </tp:docstring>
+            </arg>
+        </signal>
+
+        <method name="getTrustRequests" tp:name-for-bindings="getTrustRequests">
+            <tp:added version="2.2.0"/>
+            <arg type="s" name="accountID" direction="in">
+            </arg>
+            <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="VectorMapStringString"/>
+            <arg type="aa{ss}" name="requests" direction="out">
+                <tp:docstring>
                    A list of contact request details. Details:
                    - from: account ID of sender
                    - received: UNIX timestamp of reception date
                    - payload: attached payload
-               </tp:docstring>
-           </arg>
-       </method>
-
-       <method name="acceptTrustRequest" tp:name-for-bindings="acceptTrustRequest">
-           <tp:added version="2.2.0"/>
-           <arg type="s" name="accountID" direction="in">
-           </arg>
-           <arg type="s" name="from" direction="in">
-           </arg>
-           <arg type="b" name="success" direction="out" tp:type="Boolean">
-               <tp:docstring>
+                </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="acceptTrustRequest" tp:name-for-bindings="acceptTrustRequest">
+            <tp:added version="2.2.0"/>
+            <arg type="s" name="accountID" direction="in">
+            </arg>
+            <arg type="s" name="from" direction="in">
+            </arg>
+            <arg type="b" name="success" direction="out" tp:type="Boolean">
+                <tp:docstring>
                    True if the operation succeeded.
-               </tp:docstring>
-           </arg>
-       </method>
-
-       <method name="discardTrustRequest" tp:name-for-bindings="discardTrustRequest">
-           <tp:added version="2.2.0"/>
-           <arg type="s" name="accountID" direction="in">
-           </arg>
-           <arg type="s" name="from" direction="in">
-           </arg>
-           <arg type="b" name="success" direction="out" tp:type="Boolean">
-               <tp:docstring>
+                </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="discardTrustRequest" tp:name-for-bindings="discardTrustRequest">
+            <tp:added version="2.2.0"/>
+            <arg type="s" name="accountID" direction="in">
+            </arg>
+            <arg type="s" name="from" direction="in">
+            </arg>
+            <arg type="b" name="success" direction="out" tp:type="Boolean">
+                <tp:docstring>
                    True if the operation succeeded.
-               </tp:docstring>
-           </arg>
-       </method>
+                </tp:docstring>
+            </arg>
+        </method>
 
-       <signal name="incomingTrustRequest" tp:name-for-bindings="incomingTrustRequest">
-           <tp:added version="2.2.0"/>
-           <tp:docstring>
+        <signal name="incomingTrustRequest" tp:name-for-bindings="incomingTrustRequest">
+            <tp:added version="2.2.0"/>
+            <tp:docstring>
                Notify clients that a new contact request has been received.
-           </tp:docstring>
-           <arg type="s" name="accountID">
-           </arg>
-           <arg type="s" name="conversationId">
-           </arg>
-           <arg type="s" name="from">
-           </arg>
-           <arg type="ay" name="payload">
-           </arg>
-           <arg type="t" name="receiveTime">
-           </arg>
-       </signal>
-
-       <method name="sendTrustRequest" tp:name-for-bindings="sendTrustRequest">
-           <tp:added version="2.2.0"/>
-           <arg type="s" name="accountID" direction="in">
-           </arg>
-           <arg type="s" name="to" direction="in">
-           </arg>
-           <arg type="ay" name="payload" direction="in">
-           </arg>
-       </method>
-
-       <method name="addContact" tp:name-for-bindings="addContact">
-           <tp:added version="3.0.0"/>
-           <arg type="s" name="accountID" direction="in">
-           </arg>
-           <arg type="s" name="uri" direction="in">
-           </arg>
-       </method>
-
-       <method name="removeContact" tp:name-for-bindings="removeContact">
-           <tp:added version="3.0.0"/>
-           <arg type="s" name="accountID" direction="in">
-           </arg>
-           <arg type="s" name="uri" direction="in">
-           </arg>
-           <arg type="b" name="ban" direction="in" tp:type="Boolean">
-               <tp:docstring>
+            </tp:docstring>
+            <arg type="s" name="accountID">
+            </arg>
+            <arg type="s" name="conversationId">
+            </arg>
+            <arg type="s" name="from">
+            </arg>
+            <arg type="ay" name="payload">
+            </arg>
+            <arg type="t" name="receiveTime">
+            </arg>
+        </signal>
+
+        <method name="sendTrustRequest" tp:name-for-bindings="sendTrustRequest">
+            <tp:added version="2.2.0"/>
+            <arg type="s" name="accountID" direction="in">
+            </arg>
+            <arg type="s" name="to" direction="in">
+            </arg>
+            <arg type="ay" name="payload" direction="in">
+            </arg>
+        </method>
+
+        <method name="addContact" tp:name-for-bindings="addContact">
+            <tp:added version="3.0.0"/>
+            <arg type="s" name="accountID" direction="in">
+            </arg>
+            <arg type="s" name="uri" direction="in">
+            </arg>
+        </method>
+
+        <method name="removeContact" tp:name-for-bindings="removeContact">
+            <tp:added version="3.0.0"/>
+            <arg type="s" name="accountID" direction="in">
+            </arg>
+            <arg type="s" name="uri" direction="in">
+            </arg>
+            <arg type="b" name="ban" direction="in" tp:type="Boolean">
+                <tp:docstring>
                    True if the the contact should be banned.
                    If false, the contact is removed from the contact list (banned or not).
-               </tp:docstring>
-           </arg>
-       </method>
-
-       <method name="getContactDetails" tp:name-for-bindings="getContactDetails">
-           <tp:added version="3.0.0"/>
-           <arg type="s" name="accountID" direction="in">
-           </arg>
-           <arg type="s" name="uri" direction="in">
-           </arg>
-           <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="MapStringString"/>
-           <arg type="a{ss}" name="contactDetails" direction="out" >
-             <tp:docstring>
+                </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="getContactDetails" tp:name-for-bindings="getContactDetails">
+            <tp:added version="3.0.0"/>
+            <arg type="s" name="accountID" direction="in">
+            </arg>
+            <arg type="s" name="uri" direction="in">
+            </arg>
+            <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="MapStringString"/>
+            <arg type="a{ss}" name="contactDetails" direction="out">
+                <tp:docstring>
                  The serialized details on given contact of given account.
-             </tp:docstring>
-           </arg>
-       </method>
-
-       <method name="getContacts" tp:name-for-bindings="getContacts">
-           <tp:added version="3.0.0"/>
-           <arg type="s" name="accountID" direction="in">
-           </arg>
-           <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="VectorMapStringString"/>
-           <arg type="aa{ss}" name="contacts" direction="out" >
-             <tp:docstring>
+                </tp:docstring>
+            </arg>
+        </method>
+
+        <method name="getContacts" tp:name-for-bindings="getContacts">
+            <tp:added version="3.0.0"/>
+            <arg type="s" name="accountID" direction="in">
+            </arg>
+            <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="VectorMapStringString"/>
+            <arg type="aa{ss}" name="contacts" direction="out">
+                <tp:docstring>
                  The list of contact information of given account.
-             </tp:docstring>
-           </arg>
-       </method>
+                </tp:docstring>
+            </arg>
+        </method>
 
-       <signal name="contactAdded" tp:name-for-bindings="contactAdded">
-           <tp:added version="2.2.0"/>
-           <tp:docstring>
+        <signal name="contactAdded" tp:name-for-bindings="contactAdded">
+            <tp:added version="2.2.0"/>
+            <tp:docstring>
                Notify clients that a new contact has been added.
-           </tp:docstring>
-           <arg type="s" name="accountID">
-           </arg>
-           <arg type="s" name="uri">
-           </arg>
-           <arg type="b" name="confirmed">
-           </arg>
-       </signal>
-
-       <signal name="contactRemoved" tp:name-for-bindings="contactRemoved">
-           <tp:added version="2.2.0"/>
-           <tp:docstring>
+            </tp:docstring>
+            <arg type="s" name="accountID">
+            </arg>
+            <arg type="s" name="uri">
+            </arg>
+            <arg type="b" name="confirmed">
+            </arg>
+        </signal>
+
+        <signal name="contactRemoved" tp:name-for-bindings="contactRemoved">
+            <tp:added version="2.2.0"/>
+            <tp:docstring>
                Notify clients that a new contact has been removed.
-           </tp:docstring>
-           <arg type="s" name="accountID">
-           </arg>
-           <arg type="s" name="uri">
-           </arg>
-           <arg type="b" name="banned">
-           </arg>
-       </signal>
-
-       <method name="getAddrFromInterfaceName" tp:name-for-bindings="getAddrFromInterfaceName">
-           <arg type="s" name="interface" direction="in">
-           </arg>
-           <arg type="s" name="address" direction="out">
-           </arg>
-       </method>
-
-       <method name="getAllIpInterface" tp:name-for-bindings="getAllIpInterface">
-           <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="VectorString"/>
-           <arg type="as" name="list" direction="out">
-           </arg>
-       </method>
-
-       <method name="getAllIpInterfaceByName" tp:name-for-bindings="getAllIpInterfaceByName">
-           <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="VectorString"/>
-           <arg type="as" name="list" direction="out">
-           </arg>
-       </method>
-
-       <method name="sendFile" tp:name-for-bindings="sendFile">
-           <tp:added version="10.0.0"/>
-           <arg type="s" name="accountId" direction="in"/>
-           <arg type="s" name="conversationId" direction="in"/>
-           <arg type="s" name="filePath" direction="in"/>
-           <arg type="s" name="fileDisplayName" direction="in"/>
-           <arg type="s" name="replyTo" direction="in"/>
-       </method>
-
-       <method name="fileTransferInfo" tp:name-for-bindings="fileTransferInfo">
-           <tp:added version="10.0.0"/>
-           <arg type="u" name="dataTransferError" direction="out"/>
-           <arg type="s" name="accountId" direction="in"/>
-           <arg type="s" name="to" direction="in"/>
-           <arg type="s" name="fileId" direction="in"/>
-           <arg type="s" name="path" direction="out"/>
-           <arg type="x" name="totalSize" direction="out"/>
-           <arg type="x" name="bytesProgress" direction="out"/>
-       </method>
-
-       <method name="downloadFile" tp:name-for-bindings="downloadFile">
-           <tp:added version="10.1.0"/>
-           <arg type="b" name="result" direction="out"/>
-           <arg type="s" name="accountId" direction="in"/>
-           <arg type="s" name="conversationId" direction="in"/>
-           <arg type="s" name="interactionId" direction="in"/>
-           <arg type="s" name="fileId" direction="in"/>
-           <arg type="s" name="path" direction="in"/>
-       </method>
-
-       <method name="cancelDataTransfer" tp:name-for-bindings="cancelDataTransfer">
-           <tp:added version="10.0.0"/>
-           <arg type="u" name="dataTransferError" direction="out"/>
-           <arg type="s" name="accountId" direction="in"/>
-           <arg type="s" name="to" direction="in"/>
-           <arg type="s" name="fileId" direction="in"/>
-       </method>
-
-       <method name="monitor" tp:name-for-bindings="monitor">
-           <tp:added version="10.0.0"/>
-           <tp:docstring>
+            </tp:docstring>
+            <arg type="s" name="accountID">
+            </arg>
+            <arg type="s" name="uri">
+            </arg>
+            <arg type="b" name="banned">
+            </arg>
+        </signal>
+
+        <method name="getAddrFromInterfaceName" tp:name-for-bindings="getAddrFromInterfaceName">
+            <arg type="s" name="interface" direction="in">
+            </arg>
+            <arg type="s" name="address" direction="out">
+            </arg>
+        </method>
+
+        <method name="getAllIpInterface" tp:name-for-bindings="getAllIpInterface">
+            <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="VectorString"/>
+            <arg type="as" name="list" direction="out">
+            </arg>
+        </method>
+
+        <method name="getAllIpInterfaceByName" tp:name-for-bindings="getAllIpInterfaceByName">
+            <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="VectorString"/>
+            <arg type="as" name="list" direction="out">
+            </arg>
+        </method>
+
+        <method name="sendFile" tp:name-for-bindings="sendFile">
+            <tp:added version="10.0.0"/>
+            <arg type="s" name="accountId" direction="in"/>
+            <arg type="s" name="conversationId" direction="in"/>
+            <arg type="s" name="filePath" direction="in"/>
+            <arg type="s" name="fileDisplayName" direction="in"/>
+            <arg type="s" name="replyTo" direction="in"/>
+        </method>
+
+        <method name="fileTransferInfo" tp:name-for-bindings="fileTransferInfo">
+            <tp:added version="10.0.0"/>
+            <arg type="u" name="dataTransferError" direction="out"/>
+            <arg type="s" name="accountId" direction="in"/>
+            <arg type="s" name="to" direction="in"/>
+            <arg type="s" name="fileId" direction="in"/>
+            <arg type="s" name="path" direction="out"/>
+            <arg type="x" name="totalSize" direction="out"/>
+            <arg type="x" name="bytesProgress" direction="out"/>
+        </method>
+
+        <method name="downloadFile" tp:name-for-bindings="downloadFile">
+            <tp:added version="10.1.0"/>
+            <arg type="b" name="result" direction="out"/>
+            <arg type="s" name="accountId" direction="in"/>
+            <arg type="s" name="conversationId" direction="in"/>
+            <arg type="s" name="interactionId" direction="in"/>
+            <arg type="s" name="fileId" direction="in"/>
+            <arg type="s" name="path" direction="in"/>
+        </method>
+
+        <method name="cancelDataTransfer" tp:name-for-bindings="cancelDataTransfer">
+            <tp:added version="10.0.0"/>
+            <arg type="u" name="dataTransferError" direction="out"/>
+            <arg type="s" name="accountId" direction="in"/>
+            <arg type="s" name="to" direction="in"/>
+            <arg type="s" name="fileId" direction="in"/>
+        </method>
+
+        <method name="monitor" tp:name-for-bindings="monitor">
+            <tp:added version="10.0.0"/>
+            <tp:docstring>
                Monitor
-           </tp:docstring>
-           <arg type="b" name="continuous" direction="in">
-           </arg>
-       </method>
-
-       <method name="startConversation" tp:name-for-bindings="startConversation">
-           <tp:added version="10.0.0"/>
-           <tp:docstring>
+            </tp:docstring>
+            <arg type="b" name="continuous" direction="in">
+            </arg>
+        </method>
+
+        <method name="getConnectionList" tp:name-for-bindings="getConnectionList">
+            <tp:added version="13.8.0" />
+            <tp:docstring>
+                Get connections list
+            </tp:docstring>
+            <arg type="s" name="accountId" direction="in"/>
+            <arg type="s" name="conversationId" direction="in"/>
+            <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="VectorMapStringString" />
+            <arg type="aa{ss}" name="connections" direction="out">
+            </arg>
+        </method>
+
+
+        <method name="getChannelList" tp:name-for-bindings="getChannelList">
+            <tp:added version="13.8.0" />
+            <tp:docstring>
+                Get channels list
+            </tp:docstring>
+            <arg type="s" name="accountId" direction="in"/>
+            <arg type="s" name="connectionId" direction="in"/>
+            <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="VectorMapStringString" />
+            <arg type="aa{ss}" name="connections" direction="out">
+            </arg>
+        </method>
+
+
+        <method name="startConversation" tp:name-for-bindings="startConversation">
+            <tp:added version="10.0.0"/>
+            <tp:docstring>
                Start a new conversation
-           </tp:docstring>
-           <arg type="s" name="conversationId" direction="out"/>
-           <arg type="s" name="accountId" direction="in"/>
-       </method>
-       <method name="acceptConversationRequest" tp:name-for-bindings="acceptConversationRequest">
-           <tp:added version="10.0.0"/>
-           <tp:docstring>
+            </tp:docstring>
+            <arg type="s" name="conversationId" direction="out"/>
+            <arg type="s" name="accountId" direction="in"/>
+        </method>
+        <method name="acceptConversationRequest" tp:name-for-bindings="acceptConversationRequest">
+            <tp:added version="10.0.0"/>
+            <tp:docstring>
                Accept a conversation's request
-           </tp:docstring>
-           <arg type="s" name="accountId" direction="in"/>
-           <arg type="s" name="conversationId" direction="in"/>
-       </method>
-
-       <method name="declineConversationRequest" tp:name-for-bindings="declineConversationRequest">
-           <tp:added version="10.0.0"/>
-           <tp:docstring>
+            </tp:docstring>
+            <arg type="s" name="accountId" direction="in"/>
+            <arg type="s" name="conversationId" direction="in"/>
+        </method>
+
+        <method name="declineConversationRequest" tp:name-for-bindings="declineConversationRequest">
+            <tp:added version="10.0.0"/>
+            <tp:docstring>
                Decline a conversation's request
-           </tp:docstring>
-           <arg type="s" name="accountId" direction="in"/>
-           <arg type="s" name="conversationId" direction="in"/>
-       </method>
-
-       <method name="removeConversation" tp:name-for-bindings="removeConversation">
-           <tp:added version="10.0.0"/>
-           <tp:docstring>
+            </tp:docstring>
+            <arg type="s" name="accountId" direction="in"/>
+            <arg type="s" name="conversationId" direction="in"/>
+        </method>
+
+        <method name="removeConversation" tp:name-for-bindings="removeConversation">
+            <tp:added version="10.0.0"/>
+            <tp:docstring>
                Remove a conversation
-           </tp:docstring>
-           <arg type="b" name="success" direction="out"/>
-           <arg type="s" name="accountId" direction="in"/>
-           <arg type="s" name="conversationId" direction="in"/>
-       </method>
-
-       <method name="getConversations" tp:name-for-bindings="getConversations">
-           <tp:added version="10.0.0"/>
-           <tp:docstring>
+            </tp:docstring>
+            <arg type="b" name="success" direction="out"/>
+            <arg type="s" name="accountId" direction="in"/>
+            <arg type="s" name="conversationId" direction="in"/>
+        </method>
+
+        <method name="getConversations" tp:name-for-bindings="getConversations">
+            <tp:added version="10.0.0"/>
+            <tp:docstring>
                Get the conversation list
-           </tp:docstring>
-           <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="VectorString"/>
-           <arg type="as" name="conversations" direction="out"/>
-           <arg type="s" name="accountId" direction="in"/>
-       </method>
-
-       <method name="getActiveCalls" tp:name-for-bindings="getActiveCalls">
-           <tp:added version="13.7.0"/>
-           <tp:docstring>
+            </tp:docstring>
+            <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="VectorString"/>
+            <arg type="as" name="conversations" direction="out"/>
+            <arg type="s" name="accountId" direction="in"/>
+        </method>
+
+        <method name="getActiveCalls" tp:name-for-bindings="getActiveCalls">
+            <tp:added version="13.7.0"/>
+            <tp:docstring>
                Get the active call list per conversation
-           </tp:docstring>
-           <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="VectorMapStringString"/>
-           <arg type="aa{ss}" name="activeCalls" direction="out"/>
-           <arg type="s" name="accountId" direction="in"/>
-           <arg type="s" name="conversationId" direction="in"/>
-       </method>
-
-       <method name="getConversationRequests" tp:name-for-bindings="getConversationRequests">
-           <tp:added version="10.0.0"/>
-           <tp:docstring>
+            </tp:docstring>
+            <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="VectorMapStringString"/>
+            <arg type="aa{ss}" name="activeCalls" direction="out"/>
+            <arg type="s" name="accountId" direction="in"/>
+            <arg type="s" name="conversationId" direction="in"/>
+        </method>
+
+        <method name="getConversationRequests" tp:name-for-bindings="getConversationRequests">
+            <tp:added version="10.0.0"/>
+            <tp:docstring>
                Get the conversation's requests list
-           </tp:docstring>
-           <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="VectorMapStringString"/>
-           <arg type="aa{ss}" name="conversations" direction="out"/>
-           <arg type="s" name="accountId" direction="in"/>
-       </method>
-
-       <method name="updateConversationInfos" tp:name-for-bindings="updateConversationInfos">
-           <tp:added version="10.0.0"/>
-           <tp:docstring>
+            </tp:docstring>
+            <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="VectorMapStringString"/>
+            <arg type="aa{ss}" name="conversations" direction="out"/>
+            <arg type="s" name="accountId" direction="in"/>
+        </method>
+
+        <method name="updateConversationInfos" tp:name-for-bindings="updateConversationInfos">
+            <tp:added version="10.0.0"/>
+            <tp:docstring>
                Update conversation's infos (supported keys: title, description, avatar)
-           </tp:docstring>
-           <arg type="s" name="accountId" direction="in"/>
-           <arg type="s" name="conversationId" direction="in"/>
-           <annotation name="org.qtproject.QtDBus.QtTypeName.In2" value="MapStringString"/>
-           <arg type="a{ss}" name="infos" direction="in"/>
-       </method>
-
-       <method name="conversationInfos" tp:name-for-bindings="conversationInfos">
-           <tp:added version="10.0.0"/>
-           <tp:docstring>
+            </tp:docstring>
+            <arg type="s" name="accountId" direction="in"/>
+            <arg type="s" name="conversationId" direction="in"/>
+            <annotation name="org.qtproject.QtDBus.QtTypeName.In2" value="MapStringString"/>
+            <arg type="a{ss}" name="infos" direction="in"/>
+        </method>
+
+        <method name="conversationInfos" tp:name-for-bindings="conversationInfos">
+            <tp:added version="10.0.0"/>
+            <tp:docstring>
                Get conversation's infos (mode, title, description, avatar)
-           </tp:docstring>
-           <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="MapStringString"/>
-           <arg type="a{ss}" name="infos" direction="out"/>
-           <arg type="s" name="accountId" direction="in"/>
-           <arg type="s" name="conversationId" direction="in"/>
-       </method>
-
-       <method name="setConversationPreferences" tp:name-for-bindings="setConversationPreferences">
-           <tp:added version="13.5.0"/>
-           <tp:docstring>
+            </tp:docstring>
+            <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="MapStringString"/>
+            <arg type="a{ss}" name="infos" direction="out"/>
+            <arg type="s" name="accountId" direction="in"/>
+            <arg type="s" name="conversationId" direction="in"/>
+        </method>
+
+        <method name="setConversationPreferences" tp:name-for-bindings="setConversationPreferences">
+            <tp:added version="13.5.0"/>
+            <tp:docstring>
                Update conversation's preferences (synced across devices) such as color, notifications, etc.
-           </tp:docstring>
-           <arg type="s" name="accountId" direction="in"/>
-           <arg type="s" name="conversationId" direction="in"/>
-           <annotation name="org.qtproject.QtDBus.QtTypeName.In2" value="MapStringString"/>
-           <arg type="a{ss}" name="prefs" direction="in"/>
-       </method>
-
-       <method name="getConversationPreferences" tp:name-for-bindings="getConversationPreferences">
-           <tp:added version="13.5.0"/>
-           <tp:docstring>
+            </tp:docstring>
+            <arg type="s" name="accountId" direction="in"/>
+            <arg type="s" name="conversationId" direction="in"/>
+            <annotation name="org.qtproject.QtDBus.QtTypeName.In2" value="MapStringString"/>
+            <arg type="a{ss}" name="prefs" direction="in"/>
+        </method>
+
+        <method name="getConversationPreferences" tp:name-for-bindings="getConversationPreferences">
+            <tp:added version="13.5.0"/>
+            <tp:docstring>
                Get conversation's preferences
-           </tp:docstring>
-           <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="MapStringString"/>
-           <arg type="a{ss}" name="prefs" direction="out"/>
-           <arg type="s" name="accountId" direction="in"/>
-           <arg type="s" name="conversationId" direction="in"/>
-       </method>
-
-       <method name="addConversationMember" tp:name-for-bindings="addConversationMember">
-           <tp:added version="10.0.0"/>
-           <tp:docstring>
+            </tp:docstring>
+            <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="MapStringString"/>
+            <arg type="a{ss}" name="prefs" direction="out"/>
+            <arg type="s" name="accountId" direction="in"/>
+            <arg type="s" name="conversationId" direction="in"/>
+        </method>
+
+        <method name="addConversationMember" tp:name-for-bindings="addConversationMember">
+            <tp:added version="10.0.0"/>
+            <tp:docstring>
                Add a member to a conversation
-           </tp:docstring>
-           <arg type="s" name="accountId" direction="in"/>
-           <arg type="s" name="conversationId" direction="in"/>
-           <arg type="s" name="contactUri" direction="in"/>
-       </method>
-
-       <method name="removeConversationMember" tp:name-for-bindings="removeConversationMember">
-           <tp:added version="10.0.0"/>
-           <tp:docstring>
+            </tp:docstring>
+            <arg type="s" name="accountId" direction="in"/>
+            <arg type="s" name="conversationId" direction="in"/>
+            <arg type="s" name="contactUri" direction="in"/>
+        </method>
+
+        <method name="removeConversationMember" tp:name-for-bindings="removeConversationMember">
+            <tp:added version="10.0.0"/>
+            <tp:docstring>
                Remove a member from a conversation
-           </tp:docstring>
-           <arg type="s" name="accountId" direction="in"/>
-           <arg type="s" name="conversationId" direction="in"/>
-           <arg type="s" name="contactUri" direction="in"/>
-       </method>
-
-       <method name="getConversationMembers" tp:name-for-bindings="getConversationMembers">
-           <tp:added version="10.0.0"/>
-           <tp:docstring>
+            </tp:docstring>
+            <arg type="s" name="accountId" direction="in"/>
+            <arg type="s" name="conversationId" direction="in"/>
+            <arg type="s" name="contactUri" direction="in"/>
+        </method>
+
+        <method name="getConversationMembers" tp:name-for-bindings="getConversationMembers">
+            <tp:added version="10.0.0"/>
+            <tp:docstring>
                Get members of a conversation
-           </tp:docstring>
-           <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="VectorMapStringString"/>
-           <arg type="aa{ss}" name="members" direction="out"/>
-           <arg type="s" name="accountId" direction="in"/>
-           <arg type="s" name="conversationId" direction="in"/>
-       </method>
-
-       <method name="sendMessage" tp:name-for-bindings="sendMessage">
-           <tp:added version="13.6.0"/>
-           <tp:docstring>
+            </tp:docstring>
+            <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="VectorMapStringString"/>
+            <arg type="aa{ss}" name="members" direction="out"/>
+            <arg type="s" name="accountId" direction="in"/>
+            <arg type="s" name="conversationId" direction="in"/>
+        </method>
+
+        <method name="sendMessage" tp:name-for-bindings="sendMessage">
+            <tp:added version="13.6.0"/>
+            <tp:docstring>
                Add a message to a conversation.
                Flag: 0 = reply (if commitId is not empty), else single message
                      1 = edit message
-           </tp:docstring>
-           <arg type="s" name="accountId" direction="in"/>
-           <arg type="s" name="conversationId" direction="in"/>
-           <arg type="s" name="message" direction="in"/>
-           <arg type="s" name="commitId" direction="in"/>
-           <arg type="i" name="flag" direction="in"/>
-       </method>
-
-       <method name="loadConversationMessages" tp:name-for-bindings="loadConversationMessages">
-           <tp:added version="10.0.0"/>
-           <tp:docstring>
+            </tp:docstring>
+            <arg type="s" name="accountId" direction="in"/>
+            <arg type="s" name="conversationId" direction="in"/>
+            <arg type="s" name="message" direction="in"/>
+            <arg type="s" name="commitId" direction="in"/>
+            <arg type="i" name="flag" direction="in"/>
+        </method>
+
+        <method name="loadConversationMessages" tp:name-for-bindings="loadConversationMessages">
+            <tp:added version="10.0.0"/>
+            <tp:docstring>
                Load messages from a conversation
-           </tp:docstring>
-           <arg type="s" name="accountId" direction="in"/>
-           <arg type="s" name="conversationId" direction="in"/>
-           <arg type="s" name="fromMessage" direction="in"/>
-           <arg type="u" name="n" direction="in"/>
-           <arg type="u" name="id" direction="out"/>
-       </method>
-
-       <method name="loadConversationUntil" tp:name-for-bindings="loadConversationUntil">
-           <tp:added version="10.0.0"/>
-           <tp:docstring>
+            </tp:docstring>
+            <arg type="s" name="accountId" direction="in"/>
+            <arg type="s" name="conversationId" direction="in"/>
+            <arg type="s" name="fromMessage" direction="in"/>
+            <arg type="u" name="n" direction="in"/>
+            <arg type="u" name="id" direction="out"/>
+        </method>
+
+        <method name="loadConversationUntil" tp:name-for-bindings="loadConversationUntil">
+            <tp:added version="10.0.0"/>
+            <tp:docstring>
                Load messages from a conversation
-           </tp:docstring>
-           <arg type="s" name="accountId" direction="in"/>
-           <arg type="s" name="conversationId" direction="in"/>
-           <arg type="s" name="fromMessage" direction="in"/>
-           <arg type="s" name="to" direction="in"/>
-           <arg type="u" name="id" direction="out"/>
-       </method>
-
-       <method name="countInteractions" tp:name-for-bindings="countInteractions">
-           <tp:added version="10.0.0"/>
-           <tp:docstring>
+            </tp:docstring>
+            <arg type="s" name="accountId" direction="in"/>
+            <arg type="s" name="conversationId" direction="in"/>
+            <arg type="s" name="fromMessage" direction="in"/>
+            <arg type="s" name="to" direction="in"/>
+            <arg type="u" name="id" direction="out"/>
+        </method>
+
+        <method name="countInteractions" tp:name-for-bindings="countInteractions">
+            <tp:added version="10.0.0"/>
+            <tp:docstring>
                Get how many messages there is since an interaction ("" for initial commit)
-           </tp:docstring>
-           <arg type="s" name="accountId" direction="in"/>
-           <arg type="s" name="conversationId" direction="in"/>
-           <arg type="s" name="toId" direction="in"/>
-           <arg type="s" name="fromId" direction="in"/>
-           <arg type="s" name="authorUri" direction="in"/>
-           <arg type="u" name="count" direction="out"/>
-       </method>
-
-       <method name="searchConversation" tp:name-for-bindings="searchConversation">
-           <tp:added version="13.4.0"/>
-           <tp:docstring>
+            </tp:docstring>
+            <arg type="s" name="accountId" direction="in"/>
+            <arg type="s" name="conversationId" direction="in"/>
+            <arg type="s" name="toId" direction="in"/>
+            <arg type="s" name="fromId" direction="in"/>
+            <arg type="s" name="authorUri" direction="in"/>
+            <arg type="u" name="count" direction="out"/>
+        </method>
+
+        <method name="searchConversation" tp:name-for-bindings="searchConversation">
+            <tp:added version="13.4.0"/>
+            <tp:docstring>
                Get how many messages there is since an interaction ("" for initial commit)
-           </tp:docstring>
-           <arg type="s" name="accountId" direction="in"/>
-           <arg type="s" name="conversationId" direction="in"/>
-           <arg type="s" name="author" direction="in"/>
-           <arg type="s" name="lastId" direction="in"/>
-           <arg type="s" name="regexSearch" direction="in"/>
-           <arg type="s" name="type" direction="in"/>
-           <arg type="x" name="after" direction="in"/>
-           <arg type="x" name="before" direction="in"/>
-           <arg type="u" name="maxResult" direction="in"/>
-           <arg type="i" name="flag" direction="in"/>
-           <arg type="u" name="searchId" direction="out"/>
-       </method>
-
-       <signal name="mediaParametersChanged" tp:name-for-bindings="mediaParametersChanged">
-           <tp:added version="2.3.0"/>
-           <tp:docstring>
+            </tp:docstring>
+            <arg type="s" name="accountId" direction="in"/>
+            <arg type="s" name="conversationId" direction="in"/>
+            <arg type="s" name="author" direction="in"/>
+            <arg type="s" name="lastId" direction="in"/>
+            <arg type="s" name="regexSearch" direction="in"/>
+            <arg type="s" name="type" direction="in"/>
+            <arg type="x" name="after" direction="in"/>
+            <arg type="x" name="before" direction="in"/>
+            <arg type="u" name="maxResult" direction="in"/>
+            <arg type="i" name="flag" direction="in"/>
+            <arg type="u" name="searchId" direction="out"/>
+        </method>
+
+        <signal name="mediaParametersChanged" tp:name-for-bindings="mediaParametersChanged">
+            <tp:added version="2.3.0"/>
+            <tp:docstring>
                Notify clients that a media parameter changed.
-           </tp:docstring>
-           <arg type="s" name="accountID">
-               <tp:docstring>
+            </tp:docstring>
+            <arg type="s" name="accountID">
+                <tp:docstring>
                    An account id.
-               </tp:docstring>
-           </arg>
-       </signal>
+                </tp:docstring>
+            </arg>
+        </signal>
 
-       <method name="connectivityChanged" tp:name-for-bindings="connectivityChanged">
-           <tp:added version="2.3.0"/>
-           <tp:docstring>
+        <method name="connectivityChanged" tp:name-for-bindings="connectivityChanged">
+            <tp:added version="2.3.0"/>
+            <tp:docstring>
                This notifies the daemon that the network connectivity has changed, eg:
                - interface has disconnected from the network
                - interface connected to a different network
                - connected interface has changed (wifi to eth)
-           </tp:docstring>
-       </method>
+            </tp:docstring>
+        </method>
 
-       <signal name="migrationEnded" tp:name-for-bindings="migrationEnded">
-           <tp:added version="3.0.0"/>
-           <tp:docstring>
+        <signal name="migrationEnded" tp:name-for-bindings="migrationEnded">
+            <tp:added version="3.0.0"/>
+            <tp:docstring>
                Notify clients when migration is ended.
-           </tp:docstring>
-           <arg type="s" name="accountID">
-               <tp:docstring>
+            </tp:docstring>
+            <arg type="s" name="accountID">
+                <tp:docstring>
                    An account id.
-               </tp:docstring>
-           </arg>
-           <arg type="s" name="result">
-               <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <arg type="s" name="result">
+                <tp:docstring>
                    The result of the migration.
                    SUCCESS : account migrated.
                    INVALID : account migration failed.
-               </tp:docstring>
-           </arg>
-       </signal>
+                </tp:docstring>
+            </arg>
+        </signal>
 
-       <signal name="dataTransferEvent" tp:name-for-bindings="dataTransferEvent">
-           <tp:added version="10.0.0"/>
-           <tp:docstring>
+        <signal name="dataTransferEvent" tp:name-for-bindings="dataTransferEvent">
+            <tp:added version="10.0.0"/>
+            <tp:docstring>
                Notify clients when a data transfer state change.
-           </tp:docstring>
-           <arg type="s" name="accountId">
-               <tp:docstring>
+            </tp:docstring>
+            <arg type="s" name="accountId">
+                <tp:docstring>
                    An account id.
-               </tp:docstring>
-           </arg>
-           <arg type="s" name="conversationId">
-               <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <arg type="s" name="conversationId">
+                <tp:docstring>
                    Conversation id (empty for non swarm)
-               </tp:docstring>
-           </arg>
-           <arg type="s" name="interactionId">
-               <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <arg type="s" name="interactionId">
+                <tp:docstring>
                    Interaction id (empty for non swarm)
-               </tp:docstring>
-           </arg>
-           <arg type="s" name="fileId">
-               <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <arg type="s" name="fileId">
+                <tp:docstring>
                    File transfer unique id.
-               </tp:docstring>
-           </arg>
-           <arg type="i" name="code">
-               <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <arg type="i" name="code">
+                <tp:docstring>
                    A libjami::DataTransferEventCode code
-               </tp:docstring>
-           </arg>
-       </signal>
+                </tp:docstring>
+            </arg>
+        </signal>
 
-       <signal name="conversationLoaded" tp:name-for-bindings="conversationLoaded">
-           <tp:added version="10.0.0"/>
-           <tp:docstring>
+        <signal name="conversationLoaded" tp:name-for-bindings="conversationLoaded">
+            <tp:added version="10.0.0"/>
+            <tp:docstring>
                Notify clients when a conversation is loaded
-           </tp:docstring>
-           <arg type="u" name="id">
-               <tp:docstring>
+            </tp:docstring>
+            <arg type="u" name="id">
+                <tp:docstring>
                    Id of the related loadConversationMessages's request
-               </tp:docstring>
-           </arg>
-           <arg type="s" name="account_id">
-               <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <arg type="s" name="account_id">
+                <tp:docstring>
                    Account id related
-               </tp:docstring>
-           </arg>
-           <arg type="s" name="conversation_id">
-               <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <arg type="s" name="conversation_id">
+                <tp:docstring>
                    Conversation id
-               </tp:docstring>
-           </arg>
-           <annotation name="org.qtproject.QtDBus.QtTypeName.Out3" value="VectorMapStringString"/>
-           <arg type="aa{ss}" name="messages">
-               <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <annotation name="org.qtproject.QtDBus.QtTypeName.Out3" value="VectorMapStringString"/>
+            <arg type="aa{ss}" name="messages">
+                <tp:docstring>
                     Messages of the conversation
-               </tp:docstring>
-           </arg>
-       </signal>
+                </tp:docstring>
+            </arg>
+        </signal>
 
-       <signal name="messagesFound" tp:name-for-bindings="messagesFound">
-           <tp:added version="10.0.0"/>
-           <tp:docstring>
+        <signal name="messagesFound" tp:name-for-bindings="messagesFound">
+            <tp:added version="10.0.0"/>
+            <tp:docstring>
                Notify clients when messages matching a regex are found
-           </tp:docstring>
-           <arg type="u" name="id">
-               <tp:docstring>
+            </tp:docstring>
+            <arg type="u" name="id">
+                <tp:docstring>
                    Id of the related loadConversationMessages's request
-               </tp:docstring>
-           </arg>
-           <arg type="s" name="account_id">
-               <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <arg type="s" name="account_id">
+                <tp:docstring>
                    Account id related
-               </tp:docstring>
-           </arg>
-           <arg type="s" name="conversation_id">
-               <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <arg type="s" name="conversation_id">
+                <tp:docstring>
                    Conversation id
-               </tp:docstring>
-           </arg>
-           <annotation name="org.qtproject.QtDBus.QtTypeName.Out3" value="VectorMapStringString"/>
-           <arg type="aa{ss}" name="messages">
-               <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <annotation name="org.qtproject.QtDBus.QtTypeName.Out3" value="VectorMapStringString"/>
+            <arg type="aa{ss}" name="messages">
+                <tp:docstring>
                     Messages of the conversation
-               </tp:docstring>
-           </arg>
-       </signal>
+                </tp:docstring>
+            </arg>
+        </signal>
 
-       <signal name="messageReceived" tp:name-for-bindings="messageReceived">
-           <tp:added version="10.0.0"/>
-           <tp:docstring>
+        <signal name="messageReceived" tp:name-for-bindings="messageReceived">
+            <tp:added version="10.0.0"/>
+            <tp:docstring>
                Notify clients when a conversation receives a new message
-           </tp:docstring>
-           <arg type="s" name="account_id">
-               <tp:docstring>
+            </tp:docstring>
+            <arg type="s" name="account_id">
+                <tp:docstring>
                    Account id related
-               </tp:docstring>
-           </arg>
-           <arg type="s" name="conversation_id">
-               <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <arg type="s" name="conversation_id">
+                <tp:docstring>
                    Conversation id
-               </tp:docstring>
-           </arg>
-           <annotation name="org.qtproject.QtDBus.QtTypeName.Out2" value="MapStringString"/>
-           <arg type="a{ss}" name="message">
-               <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <annotation name="org.qtproject.QtDBus.QtTypeName.Out2" value="MapStringString"/>
+            <arg type="a{ss}" name="message">
+                <tp:docstring>
                     The new message
-               </tp:docstring>
-           </arg>
-       </signal>
+                </tp:docstring>
+            </arg>
+        </signal>
 
-       <signal name="conversationProfileUpdated" tp:name-for-bindings="conversationProfileUpdated">
-           <tp:added version="13.4.0"/>
-           <tp:docstring>
+        <signal name="conversationProfileUpdated" tp:name-for-bindings="conversationProfileUpdated">
+            <tp:added version="13.4.0"/>
+            <tp:docstring>
                Notify clients when a conversation got its profile changed.
-           </tp:docstring>
-           <arg type="s" name="account_id">
-               <tp:docstring>
+            </tp:docstring>
+            <arg type="s" name="account_id">
+                <tp:docstring>
                    Account id related
-               </tp:docstring>
-           </arg>
-           <arg type="s" name="conversation_id">
-               <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <arg type="s" name="conversation_id">
+                <tp:docstring>
                    Conversation id
-               </tp:docstring>
-           </arg>
-           <annotation name="org.qtproject.QtDBus.QtTypeName.Out2" value="MapStringString"/>
-           <arg type="a{ss}" name="profile">
-               <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <annotation name="org.qtproject.QtDBus.QtTypeName.Out2" value="MapStringString"/>
+            <arg type="a{ss}" name="profile">
+                <tp:docstring>
                     The new profile
-               </tp:docstring>
-           </arg>
-       </signal>
+                </tp:docstring>
+            </arg>
+        </signal>
 
-       <signal name="conversationRequestReceived" tp:name-for-bindings="conversationRequestReceived">
-           <tp:added version="10.0.0"/>
-           <tp:docstring>
+        <signal name="conversationRequestReceived" tp:name-for-bindings="conversationRequestReceived">
+            <tp:added version="10.0.0"/>
+            <tp:docstring>
                Notify clients when a new conversation request is received
-           </tp:docstring>
-           <arg type="s" name="account_id">
-               <tp:docstring>
+            </tp:docstring>
+            <arg type="s" name="account_id">
+                <tp:docstring>
                    Account id related
-               </tp:docstring>
-           </arg>
-           <arg type="s" name="conversation_id">
-               <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <arg type="s" name="conversation_id">
+                <tp:docstring>
                    Conversation id
-               </tp:docstring>
-           </arg>
-           <annotation name="org.qtproject.QtDBus.QtTypeName.Out2" value="MapStringString"/>
-           <arg type="a{ss}" name="metadatas">
-               <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <annotation name="org.qtproject.QtDBus.QtTypeName.Out2" value="MapStringString"/>
+            <arg type="a{ss}" name="metadatas">
+                <tp:docstring>
                     Informations of the request
-               </tp:docstring>
-           </arg>
-       </signal>
+                </tp:docstring>
+            </arg>
+        </signal>
 
-       <signal name="conversationRequestDeclined" tp:name-for-bindings="conversationRequestDeclined">
-           <tp:added version="10.1.0"/>
-           <tp:docstring>
+        <signal name="conversationRequestDeclined" tp:name-for-bindings="conversationRequestDeclined">
+            <tp:added version="10.1.0"/>
+            <tp:docstring>
                Notify clients when a new conversation request is declined
-           </tp:docstring>
-           <arg type="s" name="account_id">
-               <tp:docstring>
+            </tp:docstring>
+            <arg type="s" name="account_id">
+                <tp:docstring>
                    Account id related
-               </tp:docstring>
-           </arg>
-           <arg type="s" name="conversation_id">
-               <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <arg type="s" name="conversation_id">
+                <tp:docstring>
                    Conversation id
-               </tp:docstring>
-           </arg>
-       </signal>
+                </tp:docstring>
+            </arg>
+        </signal>
 
-       <signal name="conversationReady" tp:name-for-bindings="conversationReady">
-           <tp:added version="10.0.0"/>
-           <tp:docstring>
+        <signal name="conversationReady" tp:name-for-bindings="conversationReady">
+            <tp:added version="10.0.0"/>
+            <tp:docstring>
                Notify clients when a conversation is cloned and ready
-           </tp:docstring>
-           <arg type="s" name="account_id">
-               <tp:docstring>
+            </tp:docstring>
+            <arg type="s" name="account_id">
+                <tp:docstring>
                    Account id related
-               </tp:docstring>
-           </arg>
-           <arg type="s" name="conversation_id">
-               <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <arg type="s" name="conversation_id">
+                <tp:docstring>
                    Conversation id
-               </tp:docstring>
-           </arg>
-       </signal>
+                </tp:docstring>
+            </arg>
+        </signal>
 
-       <signal name="conversationRemoved" tp:name-for-bindings="conversationRemoved">
-           <tp:added version="10.0.0"/>
-           <tp:docstring>
+        <signal name="conversationRemoved" tp:name-for-bindings="conversationRemoved">
+            <tp:added version="10.0.0"/>
+            <tp:docstring>
                Notify clients when a conversation is removed
-           </tp:docstring>
-           <arg type="s" name="account_id">
-               <tp:docstring>
+            </tp:docstring>
+            <arg type="s" name="account_id">
+                <tp:docstring>
                    Account id related
-               </tp:docstring>
-           </arg>
-           <arg type="s" name="conversation_id">
-               <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <arg type="s" name="conversation_id">
+                <tp:docstring>
                    Conversation id
-               </tp:docstring>
-           </arg>
-       </signal>
+                </tp:docstring>
+            </arg>
+        </signal>
 
-       <signal name="conversationMemberEvent" tp:name-for-bindings="conversationMemberEvent">
-           <tp:added version="10.0.0"/>
-           <tp:docstring>
+        <signal name="conversationMemberEvent" tp:name-for-bindings="conversationMemberEvent">
+            <tp:added version="10.0.0"/>
+            <tp:docstring>
                Notify clients when a member is invited/added/removed/banned
-           </tp:docstring>
-           <arg type="s" name="account_id">
-               <tp:docstring>
+            </tp:docstring>
+            <arg type="s" name="account_id">
+                <tp:docstring>
                    Account id related
-               </tp:docstring>
-           </arg>
-           <arg type="s" name="conversation_id">
-               <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <arg type="s" name="conversation_id">
+                <tp:docstring>
                    Conversation id
-               </tp:docstring>
-           </arg>
-           <arg type="s" name="member_uri">
-               <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <arg type="s" name="member_uri">
+                <tp:docstring>
                    The URI of the member added
-               </tp:docstring>
-           </arg>
-           <arg type="i" name="event">
-               <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <arg type="i" name="event">
+                <tp:docstring>
                    event: 0 = add, 1 = joins, 2 = leave, 3 = banned
-               </tp:docstring>
-           </arg>
-       </signal>
+                </tp:docstring>
+            </arg>
+        </signal>
 
-       <signal name="onConversationError" tp:name-for-bindings="onConversationError">
-           <tp:added version="10.0.0"/>
-           <tp:docstring>
+        <signal name="onConversationError" tp:name-for-bindings="onConversationError">
+            <tp:added version="10.0.0"/>
+            <tp:docstring>
                Notify clients when an error occurs in a conversation
-           </tp:docstring>
-           <arg type="s" name="account_id">
-               <tp:docstring>
+            </tp:docstring>
+            <arg type="s" name="account_id">
+                <tp:docstring>
                    Account id related
-               </tp:docstring>
-           </arg>
-           <arg type="s" name="conversation_id">
-               <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <arg type="s" name="conversation_id">
+                <tp:docstring>
                    Conversation id
-               </tp:docstring>
-           </arg>
-           <arg type="u" name="code">
-               <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <arg type="u" name="code">
+                <tp:docstring>
                    TODO
-               </tp:docstring>
-           </arg>
-           <arg type="s" name="what">
-               <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <arg type="s" name="what">
+                <tp:docstring>
                    The error's description
-               </tp:docstring>
-           </arg>
-       </signal>
+                </tp:docstring>
+            </arg>
+        </signal>
 
-       <signal name="conversationPreferencesUpdated" tp:name-for-bindings="conversationPreferencesUpdated">
-           <tp:added version="13.5.0"/>
-           <tp:docstring>
+        <signal name="conversationPreferencesUpdated" tp:name-for-bindings="conversationPreferencesUpdated">
+            <tp:added version="13.5.0"/>
+            <tp:docstring>
                Notify clients when preferences for a conversation are updated
-           </tp:docstring>
-           <arg type="s" name="account_id">
-               <tp:docstring>
+            </tp:docstring>
+            <arg type="s" name="account_id">
+                <tp:docstring>
                    Account id related
-               </tp:docstring>
-           </arg>
-           <arg type="s" name="conversation_id">
-               <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <arg type="s" name="conversation_id">
+                <tp:docstring>
                    Conversation id
-               </tp:docstring>
-           </arg>
-           <annotation name="org.qtproject.QtDBus.QtTypeName.Out2" value="MapStringString"/>
-           <arg type="a{ss}" name="preferences">
-               <tp:docstring>
+                </tp:docstring>
+            </arg>
+            <annotation name="org.qtproject.QtDBus.QtTypeName.Out2" value="MapStringString"/>
+            <arg type="a{ss}" name="preferences">
+                <tp:docstring>
                     New preferences
-               </tp:docstring>
-           </arg>
-       </signal>
+                </tp:docstring>
+            </arg>
+        </signal>
 
-       <signal name="debugMessageReceived" tp:name-for-bindings="debugMessageReceived">
-           <tp:added version="5.2.0"/>
-           <tp:docstring>
+        <signal name="debugMessageReceived" tp:name-for-bindings="debugMessageReceived">
+            <tp:added version="5.2.0"/>
+            <tp:docstring>
                Notify clients when debug is outputted.
-           </tp:docstring>
-           <arg type="s" name="message">
-               <tp:docstring>
+            </tp:docstring>
+            <arg type="s" name="message">
+                <tp:docstring>
                    The formatted message to be output.
-               </tp:docstring>
-           </arg>
-       </signal>
-
-       <method name="setDefaultModerator" tp:name-for-bindings="setDefaultModerator">
-           <tp:added version="9.9.0"/>
-           <arg type="s" name="accountID" direction="in"/>
-           <arg type="s" name="peerURI" direction="in"/>
-           <arg type="b" name="state" direction="in"/>
-       </method>
-
-       <method name="getDefaultModerators" tp:name-for-bindings="getDefaultModerators">
-           <tp:added version="9.9.0"/>
-           <arg type="s" name="accountID" direction="in"/>
-           <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="VectorString"/>
-           <arg type="as" name="list" direction="out">
-           </arg>
-       </method>
-
-       <method name="enableLocalModerators" tp:name-for-bindings="enableLocalModerators">
-           <tp:added version="9.9.0"/>
-           <arg type="s" name="accountID" direction="in"/>
-           <arg type="b" name="isModEnabled" direction="in"/>
-       </method>
-       <method name="isLocalModeratorsEnabled" tp:name-for-bindings="isLocalModeratorsEnabled">
-           <tp:added version="9.9.0"/>
-           <arg type="s" name="accountID" direction="in"/>
-           <arg type="b" name="isModEnabled" direction="out"/>
-       </method>
-
-       <method name="setAllModerators" tp:name-for-bindings="setAllModerators">
-           <tp:added version="9.10.0"/>
-           <arg type="s" name="accountID" direction="in"/>
-           <arg type="b" name="allModerators" direction="in"/>
-       </method>
-       <method name="isAllModerators" tp:name-for-bindings="isAllModerators">
-           <tp:added version="9.10.0"/>
-           <arg type="s" name="accountID" direction="in"/>
-           <arg type="b" name="allModerators" direction="out"/>
-       </method>
+                </tp:docstring>
+            </arg>
+        </signal>
+
+        <method name="setDefaultModerator" tp:name-for-bindings="setDefaultModerator">
+            <tp:added version="9.9.0"/>
+            <arg type="s" name="accountID" direction="in"/>
+            <arg type="s" name="peerURI" direction="in"/>
+            <arg type="b" name="state" direction="in"/>
+        </method>
+
+        <method name="getDefaultModerators" tp:name-for-bindings="getDefaultModerators">
+            <tp:added version="9.9.0"/>
+            <arg type="s" name="accountID" direction="in"/>
+            <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="VectorString"/>
+            <arg type="as" name="list" direction="out">
+            </arg>
+        </method>
+
+        <method name="enableLocalModerators" tp:name-for-bindings="enableLocalModerators">
+            <tp:added version="9.9.0"/>
+            <arg type="s" name="accountID" direction="in"/>
+            <arg type="b" name="isModEnabled" direction="in"/>
+        </method>
+        <method name="isLocalModeratorsEnabled" tp:name-for-bindings="isLocalModeratorsEnabled">
+            <tp:added version="9.9.0"/>
+            <arg type="s" name="accountID" direction="in"/>
+            <arg type="b" name="isModEnabled" direction="out"/>
+        </method>
+
+        <method name="setAllModerators" tp:name-for-bindings="setAllModerators">
+            <tp:added version="9.10.0"/>
+            <arg type="s" name="accountID" direction="in"/>
+            <arg type="b" name="allModerators" direction="in"/>
+        </method>
+        <method name="isAllModerators" tp:name-for-bindings="isAllModerators">
+            <tp:added version="9.10.0"/>
+            <arg type="s" name="accountID" direction="in"/>
+            <arg type="b" name="allModerators" direction="out"/>
+        </method>
 
         <signal name="messageSend" tp:name-for-bindings="messageSend">
-           <arg type="s" name="message">
-               <tp:docstring>
+            <arg type="s" name="message">
+                <tp:docstring>
                    Message from daemon
-               </tp:docstring>
-           </arg>
-           <tp:docstring>Signal triggered when a log is done in the daemon.</tp:docstring>
+                </tp:docstring>
+            </arg>
+            <tp:docstring>Signal triggered when a log is done in the daemon.</tp:docstring>
         </signal>
-   </interface>
+    </interface>
 </node>
diff --git a/bin/dbus/dbusconfigurationmanager.hpp b/bin/dbus/dbusconfigurationmanager.hpp
index 48157d4b3fc62158b2aaf4dacb0f13dcaff57977..8fddb461bfe834857a7e38674312fc7b75929c06 100644
--- a/bin/dbus/dbusconfigurationmanager.hpp
+++ b/bin/dbus/dbusconfigurationmanager.hpp
@@ -699,6 +699,20 @@ public:
         return libjami::getContactDetails(accountId, uri);
     }
 
+    auto
+    getConnectionList(const std::string& accountId, const std::string& conversationId)
+        -> decltype(libjami::getConnectionList(accountId, conversationId))
+    {
+        return libjami::getConnectionList(accountId,conversationId);
+    }
+
+    auto
+    getChannelList(const std::string& accountId, const std::string& connectionId)
+        -> decltype(libjami::getChannelList(accountId, connectionId))
+    {
+        return libjami::getChannelList(accountId,connectionId);
+    }
+
     auto
     getContacts(const std::string& accountId)
         -> decltype(libjami::getContacts(accountId))
diff --git a/bin/jni/configurationmanager.i b/bin/jni/configurationmanager.i
index baedce8537a1e1e6a9290e186bec561ea0734e0b..fd2b7dd805a864a59d12c81367ac382dce794b70 100644
--- a/bin/jni/configurationmanager.i
+++ b/bin/jni/configurationmanager.i
@@ -90,6 +90,8 @@ void setAccountDetails(const std::string& accountID, const std::map<std::string,
 void setAccountActive(const std::string& accountID, bool active);
 std::map<std::string, std::string> getAccountTemplate(const std::string& accountType);
 void monitor(bool continuous);
+std::vector<std::map<std::string, std::string>> getConnectionList(const std::string& accountId, const std::string& conversationId);
+std::vector<std::map<std::string, std::string>> getChannelList(const std::string& accountId, const std::string& connectionId);
 std::string addAccount(const std::map<std::string, std::string>& details);
 void removeAccount(const std::string& accountID);
 std::vector<std::string> getAccountList();
diff --git a/bin/nodejs/configurationmanager.i b/bin/nodejs/configurationmanager.i
index 678d90a0b513d8deeeee810457e8b7d4d6f31926..44eee9119fb21bbfd447109635742fed6d35c52e 100644
--- a/bin/nodejs/configurationmanager.i
+++ b/bin/nodejs/configurationmanager.i
@@ -85,6 +85,8 @@ void setAccountDetails(const std::string& accountID, const std::map<std::string,
 void setAccountActive(const std::string& accountID, bool active);
 std::map<std::string, std::string> getAccountTemplate(const std::string& accountType);
 void monitor(bool continuous);
+std::vector<std::map<std::string, std::string>> getConnectionList(const std::string& accountId, const std::string& conversationId);
+std::vector<std::map<std::string, std::string>> getChannelList(const std::string& accountId, const std::string& connectionId);
 std::string addAccount(const std::map<std::string, std::string>& details);
 void removeAccount(const std::string& accountID);
 std::vector<std::string> getAccountList();
diff --git a/configure.ac b/configure.ac
index 330634861f404cc3d08e3d65172e7ed8b5ec3e93..234a704bb51e6046eb2f51346b78ebc1042bca29 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2,7 +2,7 @@ dnl Jami - configure.ac
 
 dnl Process this file with autoconf to produce a configure script.
 AC_PREREQ([2.69])
-AC_INIT([Jami Daemon],[13.7.0],[jami@gnu.org],[jami])
+AC_INIT([Jami Daemon],[13.8.0],[jami@gnu.org],[jami])
 
 dnl Clear the implicit flags that default to '-g -O2', otherwise they
 dnl take precedence over the values we set via the
diff --git a/meson.build b/meson.build
index 57a9a8b661b87927afcc19a9bd620371a735c82a..856286c3e7d31bad99f499b2dc0715fd2f6b9993 100644
--- a/meson.build
+++ b/meson.build
@@ -1,5 +1,5 @@
 project('jami-daemon', ['c', 'cpp'],
-        version: '13.7.0',
+        version: '13.8.0',
         license: 'GPL3+',
         default_options: ['cpp_std=gnu++17', 'buildtype=debugoptimized'],
         meson_version:'>= 0.56'
diff --git a/src/client/configurationmanager.cpp b/src/client/configurationmanager.cpp
index d657479a615f346e7e24a91598cd4f4502fa6b64..3db4b7bde5a9df79a2ff66951dc67b5f112b9a55 100644
--- a/src/client/configurationmanager.cpp
+++ b/src/client/configurationmanager.cpp
@@ -97,7 +97,8 @@ validateCertificate(const std::string& accountId, const std::string& certificate
 {
     try {
         if (const auto acc = jami::Manager::instance().getAccount<jami::JamiAccount>(accountId))
-            return TlsValidator {acc->certStore(), acc->certStore().getCertificate(certificate)}.getSerializedChecks();
+            return TlsValidator {acc->certStore(), acc->certStore().getCertificate(certificate)}
+                .getSerializedChecks();
     } catch (const std::runtime_error& e) {
         JAMI_WARN("Certificate loading failed: %s", e.what());
     }
@@ -113,7 +114,8 @@ validateCertificatePath(const std::string& accountId,
 {
     try {
         if (const auto acc = jami::Manager::instance().getAccount<jami::JamiAccount>(accountId))
-            return TlsValidator {acc->certStore(), certificate, privateKey, privateKeyPass, caList}.getSerializedChecks();
+            return TlsValidator {acc->certStore(), certificate, privateKey, privateKeyPass, caList}
+                .getSerializedChecks();
     } catch (const std::runtime_error& e) {
         JAMI_WARN("Certificate loading failed: %s", e.what());
         return {{Certificate::ChecksNames::EXIST, Certificate::CheckValuesNames::FAILED}};
@@ -126,7 +128,8 @@ getCertificateDetails(const std::string& accountId, const std::string& certifica
 {
     try {
         if (const auto acc = jami::Manager::instance().getAccount<jami::JamiAccount>(accountId))
-            return TlsValidator {acc->certStore(), acc->certStore().getCertificate(certificate)}.getSerializedDetails();
+            return TlsValidator {acc->certStore(), acc->certStore().getCertificate(certificate)}
+                .getSerializedDetails();
     } catch (const std::runtime_error& e) {
         JAMI_WARN("Certificate loading failed: %s", e.what());
     }
@@ -456,6 +459,18 @@ monitor(bool continuous)
     return jami::Manager::instance().monitor(continuous);
 }
 
+std::vector<std::map<std::string, std::string>>
+getConnectionList(const std::string& accountId, const std::string& conversationId)
+{
+    return jami::Manager::instance().getConnectionList(accountId, conversationId);
+}
+
+std::vector<std::map<std::string, std::string>>
+getChannelList(const std::string& accountId, const std::string& connectionId)
+{
+    return jami::Manager::instance().getChannelList(accountId, connectionId);
+}
+
 void
 removeAccount(const std::string& accountId)
 {
diff --git a/src/jami/configurationmanager_interface.h b/src/jami/configurationmanager_interface.h
index cf23a5c2320f42da0dfcc8cbadd2cb36b174b4c3..f38a1e7e116ca297d70e101022c043134b5b78f9 100644
--- a/src/jami/configurationmanager_interface.h
+++ b/src/jami/configurationmanager_interface.h
@@ -65,6 +65,9 @@ LIBJAMI_PUBLIC std::map<std::string, std::string> getAccountTemplate(const std::
 LIBJAMI_PUBLIC std::string addAccount(const std::map<std::string, std::string>& details,
                                       const std::string& accountID = {});
 LIBJAMI_PUBLIC void monitor(bool continuous);
+LIBJAMI_PUBLIC std::vector<std::map<std::string, std::string>> getConnectionList(const std::string& accountId, const std::string& conversationId);
+LIBJAMI_PUBLIC std::vector<std::map<std::string, std::string>> getChannelList(const std::string& accountId, const std::string& connectionId);
+
 LIBJAMI_PUBLIC bool exportOnRing(const std::string& accountID, const std::string& password);
 LIBJAMI_PUBLIC bool exportToFile(const std::string& accountID,
                                  const std::string& destinationPath,
diff --git a/src/jamidht/conversation.cpp b/src/jamidht/conversation.cpp
index 2baf06bd686e0043f11b551a66a4b66ced1793a4..6fcc4444c2538a4e013c02b3626ba6af43bd614c 100644
--- a/src/jamidht/conversation.cpp
+++ b/src/jamidht/conversation.cpp
@@ -612,6 +612,7 @@ public:
     std::shared_ptr<TransferManager> transferManager_ {};
     std::string conversationDataPath_ {};
     std::string fetchedPath_ {};
+
     std::mutex fetchedDevicesMtx_ {};
     std::set<std::string> fetchedDevices_ {};
     // Manage last message displayed and status
@@ -861,6 +862,12 @@ Conversation::connectivityChanged()
         pimpl_->swarmManager_->maintainBuckets();
 }
 
+std::vector<jami::DeviceId>
+Conversation::getDeviceIdList() const
+{
+    return pimpl_->swarmManager_->getRoutingTable().getAllNodes();
+}
+
 bool
 Conversation::hasSwarmChannel(const std::string& deviceId)
 {
@@ -2045,5 +2052,4 @@ Conversation::currentCalls() const
     std::lock_guard<std::mutex> lk(pimpl_->activeCallsMtx_);
     return pimpl_->activeCalls_;
 }
-
 } // namespace jami
diff --git a/src/jamidht/conversation.h b/src/jamidht/conversation.h
index 953856294d35f87b3191683a17694d6267ec046c..52cbc6bbc851e89af04df5ac35325fd2d3aa1e06 100644
--- a/src/jamidht/conversation.h
+++ b/src/jamidht/conversation.h
@@ -547,6 +547,11 @@ public:
      */
     void connectivityChanged();
 
+    /**
+     * @return getAllNodes()    Nodes that are linked to the conversation
+    */
+    std::vector<jami::DeviceId> getDeviceIdList() const;
+
 private:
     std::shared_ptr<Conversation> shared()
     {
diff --git a/src/jamidht/jamiaccount.cpp b/src/jamidht/jamiaccount.cpp
index ea0fc7483a984ad629f3ce0001d827a9849e7286..86f68a5adbac86bd6eb28b5872c3ca46eaa24e07 100644
--- a/src/jamidht/jamiaccount.cpp
+++ b/src/jamidht/jamiaccount.cpp
@@ -3944,6 +3944,36 @@ JamiAccount::monitor()
         connectionManager_->monitor();
 }
 
+std::vector<std::map<std::string, std::string>>
+JamiAccount::getConnectionList(const std::string& conversationId)
+{
+    std::lock_guard<std::mutex> lkCM(connManagerMtx_);
+    if (conversationId.empty()) {
+        return connectionManager_->getConnectionList();
+    } else if (connectionManager_ && convModule_) {
+        std::vector<std::map<std::string, std::string>> connectionList;
+        if (auto conv = convModule_->getConversation(conversationId)) {
+            for (const auto& deviceId : conv->getDeviceIdList()) {
+                auto connections = connectionManager_->getConnectionList(deviceId);
+                connectionList.reserve(connectionList.size() + connections.size());
+                std::move(connections.begin(), connections.end(), std::back_inserter(connectionList));
+            }
+        }
+        return connectionList;
+    } else {
+        return {};
+    }
+}
+
+std::vector<std::map<std::string, std::string>>
+JamiAccount::getChannelList(const std::string& connectionId)
+{
+    std::lock_guard<std::mutex> lkCM(connManagerMtx_);
+    if (!connectionManager_)
+        return {};
+    return connectionManager_->getChannelList(connectionId);
+}
+
 void
 JamiAccount::sendFile(const std::string& conversationId,
                       const std::string& path,
@@ -3968,31 +3998,35 @@ JamiAccount::sendFile(const std::string& conversationId,
             value["sha3sum"] = fileutils::sha3File(path);
             value["type"] = "application/data-transfer+json";
 
-            shared->convModule()
-                ->sendMessage(conversationId,
-                              std::move(value),
-                              replyTo,
-                              true,
-                              [accId = shared->getAccountID(), conversationId, tid, path](
-                                  const std::string& commitId) {
-                                  // Create a symlink to answer to re-ask
-                                  auto filelinkPath = fileutils::get_data_dir() + DIR_SEPARATOR_STR
-                                                      + accId + DIR_SEPARATOR_STR
-                                                      + "conversation_data" + DIR_SEPARATOR_STR
-                                                      + conversationId + DIR_SEPARATOR_STR
-                                                      + commitId + "_" + std::to_string(tid);
-                                  auto extension = fileutils::getFileExtension(path);
-                                  if (!extension.empty())
-                                      filelinkPath += "." + extension;
-                                  if (path != filelinkPath && !fileutils::isSymLink(filelinkPath)) {
-                                      if (!fileutils::createFileLink(filelinkPath, path, true)) {
-                                        JAMI_WARNING("Cannot create symlink for file transfer {} - {}. Copy file", filelinkPath, path);
-                                        if (!fileutils::copy(path, filelinkPath)) {
-                                            JAMI_ERROR("Cannot copy file for file transfer {} - {}", filelinkPath, path);
-                                        }
-                                      }
-                                  }
-                              });
+            shared->convModule()->sendMessage(
+                conversationId,
+                std::move(value),
+                replyTo,
+                true,
+                [accId = shared->getAccountID(), conversationId, tid, path](
+                    const std::string& commitId) {
+                    // Create a symlink to answer to re-ask
+                    auto filelinkPath = fileutils::get_data_dir() + DIR_SEPARATOR_STR + accId
+                                        + DIR_SEPARATOR_STR + "conversation_data"
+                                        + DIR_SEPARATOR_STR + conversationId + DIR_SEPARATOR_STR
+                                        + commitId + "_" + std::to_string(tid);
+                    auto extension = fileutils::getFileExtension(path);
+                    if (!extension.empty())
+                        filelinkPath += "." + extension;
+                    if (path != filelinkPath && !fileutils::isSymLink(filelinkPath)) {
+                        if (!fileutils::createFileLink(filelinkPath, path, true)) {
+                            JAMI_WARNING(
+                                "Cannot create symlink for file transfer {} - {}. Copy file",
+                                filelinkPath,
+                                path);
+                            if (!fileutils::copy(path, filelinkPath)) {
+                                JAMI_ERROR("Cannot copy file for file transfer {} - {}",
+                                           filelinkPath,
+                                           path);
+                            }
+                        }
+                    }
+                });
         }
     });
 }
diff --git a/src/jamidht/jamiaccount.h b/src/jamidht/jamiaccount.h
index 093315e25636b12c8bb1839e9c6560964e12f6ee..9c74d49bdade4119198f6f2b8c38b5ccc566b81d 100644
--- a/src/jamidht/jamiaccount.h
+++ b/src/jamidht/jamiaccount.h
@@ -452,6 +452,9 @@ public:
                        const std::pair<std::string, std::string>& message) override;
 
     void monitor();
+    // conversationId optional
+    std::vector<std::map<std::string, std::string>> getConnectionList(const std::string& conversationId = "");
+    std::vector<std::map<std::string, std::string>> getChannelList(const std::string& connectionId);
 
     // File transfer
     void sendFile(const std::string& conversationId,
diff --git a/src/manager.cpp b/src/manager.cpp
index fe89df7bc9a73ea6779105b8edc74a267baa3315..670636a7ee612a508f4d66095eb0a7d2f343ac7d 100644
--- a/src/manager.cpp
+++ b/src/manager.cpp
@@ -958,6 +958,66 @@ Manager::monitor(bool continuous)
     Logger::setMonitorLog(continuous);
 }
 
+std::vector<std::map<std::string, std::string>>
+Manager::getConnectionList(const std::string& accountId, const std::string& conversationId)
+{
+    std::vector<std::map<std::string, std::string>> connectionsList;
+
+    if (accountId.empty()) {
+        for (const auto& account : getAllAccounts<JamiAccount>()) {
+            if (account->getRegistrationState() == RegistrationState::INITIALIZING) {
+                const auto& cnl = account->getConnectionList(conversationId);
+                connectionsList.insert(connectionsList.end(), cnl.begin(), cnl.end());
+            }
+        }
+    } else {
+        auto account = getAccount(accountId);
+        if (account) {
+            if (auto acc = std::dynamic_pointer_cast<JamiAccount>(account)) {
+                if (acc->getRegistrationState() == RegistrationState::INITIALIZING) {
+                    const auto& cnl = acc->getConnectionList(conversationId);
+                    connectionsList.insert(connectionsList.end(), cnl.begin(), cnl.end());
+                }
+            }
+        }
+    }
+
+    return connectionsList;
+}
+
+std::vector<std::map<std::string, std::string>>
+Manager::getChannelList(const std::string& accountId, const std::string& connectionId)
+{
+    // if account id is empty, return all channels
+    // else return only for specific accountid
+    std::vector<std::map<std::string, std::string>> channelsList;
+
+    if (accountId.empty()) {
+        for (const auto& account : getAllAccounts<JamiAccount>()) {
+            if (account->getRegistrationState() == RegistrationState::INITIALIZING) {
+                // add to channelsList all channels for this account
+                const auto& cnl = account->getChannelList(connectionId);
+                channelsList.insert(channelsList.end(), cnl.begin(), cnl.end());
+            }
+        }
+
+    }
+
+    else {
+        // get the jamiaccount for this accountid and return its channels
+        auto account = getAccount(accountId);
+        if (account) {
+            if (auto acc = std::dynamic_pointer_cast<JamiAccount>(account)) {
+                if (acc->getRegistrationState() == RegistrationState::INITIALIZING){
+                    const auto& cnl = acc->getChannelList(connectionId);
+                    channelsList.insert(channelsList.end(), cnl.begin(), cnl.end());}
+            }
+        }
+    }
+
+    return channelsList;
+}
+
 bool
 Manager::isCurrentCall(const Call& call) const
 {
diff --git a/src/manager.h b/src/manager.h
index 3351aba0c25cc4cc4e157075e0f093d1ec7d60bf..3421fc6b49795e220b41481c3765a4ee64b41bba 100644
--- a/src/manager.h
+++ b/src/manager.h
@@ -137,6 +137,9 @@ public:
 
     void monitor(bool continuous);
 
+    std::vector<std::map<std::string, std::string>> getConnectionList(const std::string& accountId, const std::string& conversationId);
+    std::vector<std::map<std::string, std::string>> getChannelList(const std::string& accountId, const std::string& connectionId);
+
     /**
      * Accessor to audiodriver.
      * it's multi-thread and use mutex internally
diff --git a/test/meson.build b/test/meson.build
index 548175d01009c3edd1ac48257e16f7e3a4be2b19..8b54f58354a4f50ac1d56b522c46a312c67ea9ef 100644
--- a/test/meson.build
+++ b/test/meson.build
@@ -99,17 +99,6 @@ test('conference', ut_conference,
 )
 
 
-ut_connection_manager = executable('ut_connection_manager',
-    sources: files('unitTest/connectionManager/connectionManager.cpp'),
-    include_directories: ut_includedirs,
-    dependencies: ut_dependencies,
-    link_with: ut_library
-)
-test('connection_manager', ut_connection_manager,
-    workdir: ut_workdir, is_parallel: false, timeout: 1800
-)
-
-
 ut_conversation = executable('ut_conversation',
     sources: files(
         'unitTest/conversation/conversationcommon.cpp',
diff --git a/test/unitTest/Makefile.am b/test/unitTest/Makefile.am
index a0b8b2c0d332ab098a3f8dc0ac91524261b29eb8..e72db780bd02085456ae3367d583cfecf59f5f9f 100644
--- a/test/unitTest/Makefile.am
+++ b/test/unitTest/Makefile.am
@@ -145,12 +145,6 @@ ut_recorder_SOURCES = call/recorder.cpp common.cpp
 check_PROGRAMS += ut_conference
 ut_conference_SOURCES = call/conference.cpp common.cpp
 
-#
-# connectionManager
-#
-check_PROGRAMS += ut_connectionManager
-ut_connectionManager_SOURCES = connectionManager/connectionManager.cpp common.cpp
-
 #
 # fileTransfer
 #
diff --git a/test/unitTest/connectionManager/connectionManager.cpp b/test/unitTest/connectionManager/connectionManager.cpp
deleted file mode 100644
index d3b39a45006d54ca1b2466bfa10edc2503c858ef..0000000000000000000000000000000000000000
--- a/test/unitTest/connectionManager/connectionManager.cpp
+++ /dev/null
@@ -1,1290 +0,0 @@
-/*
- *  Copyright (C) 2017-2023 Savoir-faire Linux Inc.
- *  Author: Sébastien Blin <sebastien.blin@savoirfairelinux.com>
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program. If not, see <https://www.gnu.org/licenses/>.
- */
-
-#include "manager.h"
-#include "jamidht/jamiaccount.h"
-#include "../../test_runner.h"
-#include "jami.h"
-#include "account_const.h"
-#include "common.h"
-
-#include <dhtnet/connectionmanager.h>
-#include <dhtnet/multiplexed_socket.h>
-
-#include <cppunit/TestAssert.h>
-#include <cppunit/TestFixture.h>
-#include <cppunit/extensions/HelperMacros.h>
-
-#include <condition_variable>
-
-using namespace libjami::Account;
-using namespace std::literals::chrono_literals;
-
-namespace jami {
-namespace test {
-
-class ConnectionManagerTest : public CppUnit::TestFixture
-{
-public:
-    ConnectionManagerTest()
-    {
-        // Init daemon
-        libjami::init(libjami::InitFlag(libjami::LIBJAMI_FLAG_DEBUG | libjami::LIBJAMI_FLAG_CONSOLE_LOG));
-        if (not Manager::instance().initialized)
-            CPPUNIT_ASSERT(libjami::start("jami-sample.yml"));
-    }
-    ~ConnectionManagerTest() { libjami::fini(); }
-    static std::string name() { return "ConnectionManager"; }
-    void setUp();
-    void tearDown();
-
-    std::string aliceId;
-    std::string bobId;
-
-private:
-    void testConnectDevice();
-    void testAcceptConnection();
-    void testMultipleChannels();
-    void testMultipleChannelsOneDeclined();
-    void testMultipleChannelsSameName();
-    void testDeclineConnection();
-    void testSendReceiveData();
-    void testAcceptsICERequest();
-    void testDeclineICERequest();
-    void testChannelRcvShutdown();
-    void testChannelSenderShutdown();
-    void testCloseConnectionWith();
-    void testShutdownCallbacks();
-    void testFloodSocket();
-    void testDestroyWhileSending();
-    void testIsConnecting();
-    void testCanSendBeacon();
-    void testCannotSendBeacon();
-    void testConnectivityChangeTriggerBeacon();
-    void testOnNoBeaconTriggersShutdown();
-    void testShutdownWhileNegotiating();
-
-    CPPUNIT_TEST_SUITE(ConnectionManagerTest);
-    CPPUNIT_TEST(testConnectDevice);
-    CPPUNIT_TEST(testAcceptConnection);
-    CPPUNIT_TEST(testMultipleChannels);
-    CPPUNIT_TEST(testMultipleChannelsOneDeclined);
-    CPPUNIT_TEST(testMultipleChannelsSameName);
-    CPPUNIT_TEST(testDeclineConnection);
-    CPPUNIT_TEST(testSendReceiveData);
-    CPPUNIT_TEST(testAcceptsICERequest);
-    CPPUNIT_TEST(testDeclineICERequest);
-    CPPUNIT_TEST(testChannelRcvShutdown);
-    CPPUNIT_TEST(testChannelSenderShutdown);
-    CPPUNIT_TEST(testCloseConnectionWith);
-    CPPUNIT_TEST(testShutdownCallbacks);
-    CPPUNIT_TEST(testFloodSocket);
-    CPPUNIT_TEST(testDestroyWhileSending);
-    CPPUNIT_TEST(testIsConnecting);
-    CPPUNIT_TEST(testCanSendBeacon);
-    CPPUNIT_TEST(testCannotSendBeacon);
-    CPPUNIT_TEST(testConnectivityChangeTriggerBeacon);
-    CPPUNIT_TEST(testOnNoBeaconTriggersShutdown);
-    CPPUNIT_TEST(testShutdownWhileNegotiating);
-    CPPUNIT_TEST_SUITE_END();
-};
-
-CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(ConnectionManagerTest, ConnectionManagerTest::name());
-
-void
-ConnectionManagerTest::setUp()
-{
-    auto actors = load_actors_and_wait_for_announcement("actors/alice-bob.yml");
-    aliceId = actors["alice"];
-    bobId = actors["bob"];
-
-    // Pin certificate from one to another certstore (because we do not perform any DHT operation in this test)
-    auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
-    auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
-    bobAccount->certStore().pinCertificate(aliceAccount->identity().second);
-    aliceAccount->certStore().pinCertificate(bobAccount->identity().second);
-}
-
-void
-ConnectionManagerTest::tearDown()
-{
-    wait_for_removal_of({aliceId, bobId});
-}
-
-void
-ConnectionManagerTest::testConnectDevice()
-{
-    auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
-    auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
-    auto bobDeviceId = DeviceId(std::string(bobAccount->currentDeviceId()));
-
-    bobAccount->connectionManager().onICERequest([](const DeviceId&) { return true; });
-    aliceAccount->connectionManager().onICERequest([](const DeviceId&) { return true; });
-
-    std::mutex mtx;
-    std::unique_lock<std::mutex> lk {mtx};
-    std::condition_variable cv, cvReceive;
-    bool successfullyConnected = false;
-    bool successfullyReceive = false;
-
-    bobAccount->connectionManager().onChannelRequest(
-        [&successfullyReceive, &cvReceive](const std::shared_ptr<dht::crypto::Certificate>&,
-                                           const std::string& name) {
-            successfullyReceive = name == "git://*";
-            cvReceive.notify_one();
-            return true;
-        });
-
-    aliceAccount->connectionManager().connectDevice(bobDeviceId,
-                                                    "git://*",
-                                                    [&](std::shared_ptr<dhtnet::ChannelSocket> socket,
-                                                        const DeviceId&) {
-                                                        if (socket) {
-                                                            successfullyConnected = true;
-                                                        }
-                                                        cv.notify_one();
-                                                    });
-    CPPUNIT_ASSERT(cvReceive.wait_for(lk, 60s, [&] { return successfullyReceive; }));
-    CPPUNIT_ASSERT(cv.wait_for(lk, 60s, [&] { return successfullyConnected; }));
-}
-
-void
-ConnectionManagerTest::testAcceptConnection()
-{
-    auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
-    auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
-    auto bobDeviceId = DeviceId(std::string(bobAccount->currentDeviceId()));
-
-    bobAccount->connectionManager().onICERequest([](const DeviceId&) { return true; });
-    aliceAccount->connectionManager().onICERequest([](const DeviceId&) { return true; });
-
-    std::mutex mtx;
-    std::unique_lock<std::mutex> lk {mtx};
-    std::condition_variable cv;
-    bool successfullyConnected = false;
-    bool successfullyReceive = false;
-    bool receiverConnected = false;
-
-    bobAccount->connectionManager().onChannelRequest(
-        [&successfullyReceive](const std::shared_ptr<dht::crypto::Certificate>&,
-                               const std::string& name) {
-            successfullyReceive = name == "git://*";
-            return true;
-        });
-
-    bobAccount->connectionManager().onConnectionReady(
-        [&receiverConnected](const DeviceId&,
-                             const std::string& name,
-                             std::shared_ptr<dhtnet::ChannelSocket> socket) {
-            receiverConnected = socket && (name == "git://*");
-        });
-
-    aliceAccount->connectionManager().connectDevice(bobDeviceId,
-                                                    "git://*",
-                                                    [&](std::shared_ptr<dhtnet::ChannelSocket> socket,
-                                                        const DeviceId&) {
-                                                        if (socket) {
-                                                            successfullyConnected = true;
-                                                        }
-                                                        cv.notify_one();
-                                                    });
-
-    CPPUNIT_ASSERT(cv.wait_for(lk, 60s, [&] {
-        return successfullyReceive && successfullyConnected && receiverConnected;
-    }));
-}
-
-void
-ConnectionManagerTest::testMultipleChannels()
-{
-    auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
-    auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
-    auto bobDeviceId = DeviceId(std::string(bobAccount->currentDeviceId()));
-
-    bobAccount->connectionManager().onICERequest([](const DeviceId&) { return true; });
-    aliceAccount->connectionManager().onICERequest([](const DeviceId&) { return true; });
-
-    std::mutex mtx;
-    std::unique_lock<std::mutex> lk {mtx};
-    std::condition_variable cv;
-    bool successfullyConnected = false;
-    bool successfullyConnected2 = false;
-    int receiverConnected = 0;
-
-    bobAccount->connectionManager().onChannelRequest(
-        [](const std::shared_ptr<dht::crypto::Certificate>&, const std::string&) { return true; });
-
-    bobAccount->connectionManager().onConnectionReady(
-        [&receiverConnected](const DeviceId&,
-                             const std::string&,
-                             std::shared_ptr<dhtnet::ChannelSocket> socket) {
-            if (socket)
-                receiverConnected += 1;
-        });
-
-    aliceAccount->connectionManager().connectDevice(bobDeviceId,
-                                                    "git://*",
-                                                    [&](std::shared_ptr<dhtnet::ChannelSocket> socket,
-                                                        const DeviceId&) {
-                                                        if (socket) {
-                                                            successfullyConnected = true;
-                                                        }
-                                                        cv.notify_one();
-                                                    });
-
-    aliceAccount->connectionManager().connectDevice(bobDeviceId,
-                                                    "sip://*",
-                                                    [&](std::shared_ptr<dhtnet::ChannelSocket> socket,
-                                                        const DeviceId&) {
-                                                        if (socket) {
-                                                            successfullyConnected2 = true;
-                                                        }
-                                                        cv.notify_one();
-                                                    });
-
-    CPPUNIT_ASSERT(cv.wait_for(lk, 60s, [&] {
-        return successfullyConnected && successfullyConnected2 && receiverConnected == 2;
-    }));
-    CPPUNIT_ASSERT(aliceAccount->connectionManager().activeSockets() == 1);
-}
-
-void
-ConnectionManagerTest::testMultipleChannelsOneDeclined()
-{
-    auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
-    auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
-    auto bobDeviceId = DeviceId(std::string(bobAccount->currentDeviceId()));
-
-    bobAccount->connectionManager().onICERequest([](const DeviceId&) { return true; });
-    aliceAccount->connectionManager().onICERequest([](const DeviceId&) { return true; });
-
-    std::mutex mtx;
-    std::unique_lock<std::mutex> lk {mtx};
-    std::condition_variable cv;
-    bool successfullyNotConnected = false;
-    bool successfullyConnected2 = false;
-    int receiverConnected = 0;
-
-    bobAccount->connectionManager().onChannelRequest(
-        [](const std::shared_ptr<dht::crypto::Certificate>&, const std::string& name) {
-            if (name == "git://*")
-                return false;
-            return true;
-        });
-
-    bobAccount->connectionManager().onConnectionReady(
-        [&](const DeviceId&, const std::string&, std::shared_ptr<dhtnet::ChannelSocket> socket) {
-            if (socket)
-                receiverConnected += 1;
-            cv.notify_one();
-        });
-
-    aliceAccount->connectionManager().connectDevice(bobDeviceId,
-                                                    "git://*",
-                                                    [&](std::shared_ptr<dhtnet::ChannelSocket> socket,
-                                                        const DeviceId&) {
-                                                        if (!socket)
-                                                            successfullyNotConnected = true;
-                                                        cv.notify_one();
-                                                    });
-
-    aliceAccount->connectionManager().connectDevice(bobDeviceId,
-                                                    "sip://*",
-                                                    [&](std::shared_ptr<dhtnet::ChannelSocket> socket,
-                                                        const DeviceId&) {
-                                                        if (socket)
-                                                            successfullyConnected2 = true;
-                                                        cv.notify_one();
-                                                    });
-
-    CPPUNIT_ASSERT(cv.wait_for(lk, 60s, [&] {
-        return successfullyNotConnected && successfullyConnected2 && receiverConnected == 1;
-    }));
-    CPPUNIT_ASSERT(aliceAccount->connectionManager().activeSockets() == 1);
-}
-
-void
-ConnectionManagerTest::testMultipleChannelsSameName()
-{
-    auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
-    auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
-    auto bobDeviceId = DeviceId(std::string(bobAccount->currentDeviceId()));
-
-    bobAccount->connectionManager().onICERequest([](const DeviceId&) { return true; });
-    aliceAccount->connectionManager().onICERequest([](const DeviceId&) { return true; });
-
-    std::mutex mtx;
-    std::unique_lock<std::mutex> lk {mtx};
-    std::condition_variable cv;
-    bool successfullyConnected = false;
-    bool successfullyConnected2 = false;
-    int receiverConnected = 0;
-
-    bobAccount->connectionManager().onChannelRequest(
-        [](const std::shared_ptr<dht::crypto::Certificate>&, const std::string&) { return true; });
-
-    bobAccount->connectionManager().onConnectionReady(
-        [&receiverConnected](const DeviceId&,
-                             const std::string&,
-                             std::shared_ptr<dhtnet::ChannelSocket> socket) {
-            if (socket)
-                receiverConnected += 1;
-        });
-
-    aliceAccount->connectionManager().connectDevice(bobDeviceId,
-                                                    "git://*",
-                                                    [&](std::shared_ptr<dhtnet::ChannelSocket> socket,
-                                                        const DeviceId&) {
-                                                        if (socket) {
-                                                            successfullyConnected = true;
-                                                        }
-                                                        cv.notify_one();
-                                                    });
-
-    // We can open two sockets with the same name, it will be two different channel
-    aliceAccount->connectionManager().connectDevice(bobDeviceId,
-                                                    "git://*",
-                                                    [&](std::shared_ptr<dhtnet::ChannelSocket> socket,
-                                                        const DeviceId&) {
-                                                        if (socket) {
-                                                            successfullyConnected2 = true;
-                                                        }
-                                                        cv.notify_one();
-                                                    });
-
-    CPPUNIT_ASSERT(cv.wait_for(lk, 60s, [&] {
-        return successfullyConnected && successfullyConnected2 && receiverConnected == 2;
-    }));
-}
-
-void
-ConnectionManagerTest::testSendReceiveData()
-{
-    auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
-    auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
-    auto bobDeviceId = DeviceId(std::string(bobAccount->currentDeviceId()));
-
-    bobAccount->connectionManager().onICERequest([](const DeviceId&) { return true; });
-    aliceAccount->connectionManager().onICERequest([](const DeviceId&) { return true; });
-
-    std::mutex mtx;
-    std::unique_lock<std::mutex> lk {mtx};
-    std::condition_variable cv;
-    std::atomic_int events(0);
-    bool successfullyConnected = false, successfullyConnected2 = false, successfullyReceive = false,
-         receiverConnected = false;
-    const uint8_t buf_other[] = {0x64, 0x65, 0x66, 0x67};
-    const uint8_t buf_test[] = {0x68, 0x69, 0x70, 0x71};
-    bool dataOk = false, dataOk2 = false;
-
-    bobAccount->connectionManager().onChannelRequest(
-        [&successfullyReceive](const std::shared_ptr<dht::crypto::Certificate>&,
-                               const std::string&) {
-            successfullyReceive = true;
-            return true;
-        });
-
-    bobAccount->connectionManager().onConnectionReady(
-        [&](const DeviceId&, const std::string& name, std::shared_ptr<dhtnet::ChannelSocket> socket) {
-            if (socket && (name == "test" || name == "other")) {
-                receiverConnected = true;
-                std::error_code ec;
-                auto res = socket->waitForData(std::chrono::milliseconds(5000), ec);
-                if (res == 4) {
-                    uint8_t buf[4];
-                    socket->read(&buf[0], 4, ec);
-                    if (name == "test")
-                        dataOk = std::equal(std::begin(buf), std::end(buf), std::begin(buf_test));
-                    else
-                        dataOk2 = std::equal(std::begin(buf), std::end(buf), std::begin(buf_other));
-                    events++;
-                    cv.notify_one();
-                }
-            }
-        });
-
-    aliceAccount->connectionManager().connectDevice(bobDeviceId,
-                                                    "test",
-                                                    [&](std::shared_ptr<dhtnet::ChannelSocket> socket,
-                                                        const DeviceId&) {
-                                                        if (socket) {
-                                                            successfullyConnected = true;
-                                                            std::error_code ec;
-                                                            socket->write(&buf_test[0], 4, ec);
-                                                        }
-                                                        events++;
-                                                        cv.notify_one();
-                                                    });
-
-    aliceAccount->connectionManager().connectDevice(bobDeviceId,
-                                                    "other",
-                                                    [&](std::shared_ptr<dhtnet::ChannelSocket> socket,
-                                                        const DeviceId&) {
-                                                        if (socket) {
-                                                            successfullyConnected2 = true;
-                                                            std::error_code ec;
-                                                            socket->write(&buf_other[0], 4, ec);
-                                                        }
-                                                        events++;
-                                                        cv.notify_one();
-                                                    });
-
-    CPPUNIT_ASSERT(cv.wait_for(lk, 60s, [&] {
-        return events == 4 && successfullyReceive && successfullyConnected && successfullyConnected2
-               && dataOk && dataOk2;
-    }));
-}
-
-void
-ConnectionManagerTest::testDeclineConnection()
-{
-    auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
-    auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
-    auto bobDeviceId = DeviceId(std::string(bobAccount->currentDeviceId()));
-
-    bobAccount->connectionManager().onICERequest([](const DeviceId&) { return true; });
-    aliceAccount->connectionManager().onICERequest([](const DeviceId&) { return true; });
-
-    std::mutex mtx;
-    std::unique_lock<std::mutex> lk {mtx};
-    std::condition_variable cv;
-    bool successfullyConnected = false;
-    bool successfullyReceive = false;
-    bool receiverConnected = false;
-
-    bobAccount->connectionManager().onChannelRequest(
-        [&successfullyReceive](const std::shared_ptr<dht::crypto::Certificate>&,
-                               const std::string&) {
-            successfullyReceive = true;
-            return false;
-        });
-
-    bobAccount->connectionManager().onConnectionReady(
-        [&receiverConnected](const DeviceId&,
-                             const std::string&,
-                             std::shared_ptr<dhtnet::ChannelSocket> socket) {
-            if (socket)
-                receiverConnected = true;
-        });
-
-    aliceAccount->connectionManager().connectDevice(bobDeviceId,
-                                                    "git://*",
-                                                    [&](std::shared_ptr<dhtnet::ChannelSocket> socket,
-                                                        const DeviceId&) {
-                                                        if (socket) {
-                                                            successfullyConnected = true;
-                                                        }
-                                                        cv.notify_one();
-                                                    });
-    cv.wait_for(lk, 30s);
-    CPPUNIT_ASSERT(successfullyReceive);
-    CPPUNIT_ASSERT(!successfullyConnected);
-    CPPUNIT_ASSERT(!receiverConnected);
-}
-
-void
-ConnectionManagerTest::testAcceptsICERequest()
-{
-    auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
-    auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
-    auto bobDeviceId = DeviceId(std::string(bobAccount->currentDeviceId()));
-
-    aliceAccount->connectionManager().onICERequest([](const DeviceId&) { return true; });
-
-    std::mutex mtx;
-    std::unique_lock<std::mutex> lk {mtx};
-    std::condition_variable cv;
-    bool successfullyConnected = false;
-    bool successfullyReceive = false;
-    bool receiverConnected = false;
-
-    bobAccount->connectionManager().onChannelRequest(
-        [](const std::shared_ptr<dht::crypto::Certificate>&, const std::string&) { return true; });
-    bobAccount->connectionManager().onICERequest([&](const DeviceId&) {
-        successfullyReceive = true;
-        return true;
-    });
-
-    bobAccount->connectionManager().onConnectionReady(
-        [&receiverConnected](const DeviceId&,
-                             const std::string& name,
-                             std::shared_ptr<dhtnet::ChannelSocket> socket) {
-            receiverConnected = socket && (name == "git://*");
-        });
-
-    aliceAccount->connectionManager().connectDevice(bobDeviceId,
-                                                    "git://*",
-                                                    [&](std::shared_ptr<dhtnet::ChannelSocket> socket,
-                                                        const DeviceId&) {
-                                                        if (socket) {
-                                                            successfullyConnected = true;
-                                                        }
-                                                        cv.notify_one();
-                                                    });
-
-    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&] {
-        return successfullyReceive && successfullyConnected && receiverConnected;
-    }));
-}
-
-void
-ConnectionManagerTest::testDeclineICERequest()
-{
-    auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
-    auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
-    auto bobDeviceId = DeviceId(std::string(bobAccount->currentDeviceId()));
-
-    aliceAccount->connectionManager().onICERequest([](const DeviceId&) { return true; });
-
-    std::mutex mtx;
-    std::unique_lock<std::mutex> lk {mtx};
-    std::condition_variable cv;
-    bool successfullyConnected = false;
-    bool successfullyReceive = false;
-    bool receiverConnected = false;
-
-    bobAccount->connectionManager().onChannelRequest(
-        [](const std::shared_ptr<dht::crypto::Certificate>&, const std::string&) { return true; });
-    bobAccount->connectionManager().onICERequest([&](const DeviceId&) {
-        successfullyReceive = true;
-        return false;
-    });
-
-    bobAccount->connectionManager().onConnectionReady(
-        [&receiverConnected](const DeviceId&,
-                             const std::string& name,
-                             std::shared_ptr<dhtnet::ChannelSocket> socket) {
-            receiverConnected = socket && (name == "git://*");
-        });
-
-    aliceAccount->connectionManager().connectDevice(bobDeviceId,
-                                                    "git://*",
-                                                    [&](std::shared_ptr<dhtnet::ChannelSocket> socket,
-                                                        const DeviceId&) {
-                                                        if (socket) {
-                                                            successfullyConnected = true;
-                                                        }
-                                                        cv.notify_one();
-                                                    });
-
-    cv.wait_for(lk, 30s);
-    CPPUNIT_ASSERT(successfullyReceive);
-    CPPUNIT_ASSERT(!receiverConnected);
-    CPPUNIT_ASSERT(!successfullyConnected);
-}
-
-void
-ConnectionManagerTest::testChannelRcvShutdown()
-{
-    auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
-    auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
-    auto bobDeviceId = DeviceId(std::string(bobAccount->currentDeviceId()));
-
-    bobAccount->connectionManager().onICERequest([](const DeviceId&) { return true; });
-    aliceAccount->connectionManager().onICERequest([](const DeviceId&) { return true; });
-
-    std::mutex mtx;
-    std::unique_lock<std::mutex> lk {mtx};
-    std::condition_variable cv;
-    bool successfullyConnected = false;
-    bool shutdownReceived = false;
-
-    std::shared_ptr<dhtnet::ChannelSocket> bobSock;
-
-    bobAccount->connectionManager().onChannelRequest(
-        [](const std::shared_ptr<dht::crypto::Certificate>&, const std::string&) { return true; });
-
-    bobAccount->connectionManager().onConnectionReady(
-        [&](const DeviceId& did, const std::string& name, std::shared_ptr<dhtnet::ChannelSocket> socket) {
-            if (socket && name == "git://*" && did != bobDeviceId) {
-                bobSock = socket;
-                cv.notify_one();
-            }
-        });
-
-    aliceAccount->connectionManager().connectDevice(bobDeviceId,
-                                                    "git://*",
-                                                    [&](std::shared_ptr<dhtnet::ChannelSocket> socket,
-                                                        const DeviceId&) {
-                                                        if (socket) {
-                                                            socket->onShutdown([&] {
-                                                                shutdownReceived = true;
-                                                                cv.notify_one();
-                                                            });
-                                                            successfullyConnected = true;
-                                                            cv.notify_one();
-                                                        }
-                                                    });
-
-    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&] { return bobSock && successfullyConnected; }));
-    bobSock->shutdown();
-    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&] { return shutdownReceived; }));
-}
-
-void
-ConnectionManagerTest::testChannelSenderShutdown()
-{
-    auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
-    auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
-    auto bobDeviceId = DeviceId(std::string(bobAccount->currentDeviceId()));
-
-    bobAccount->connectionManager().onICERequest([](const DeviceId&) { return true; });
-    aliceAccount->connectionManager().onICERequest([](const DeviceId&) { return true; });
-
-    std::mutex mtx;
-    std::unique_lock<std::mutex> lk {mtx};
-    std::condition_variable rcv, scv;
-    bool successfullyConnected = false;
-    bool successfullyReceive = false;
-    bool receiverConnected = false;
-    bool shutdownReceived = false;
-
-    bobAccount->connectionManager().onChannelRequest(
-        [&successfullyReceive](const std::shared_ptr<dht::crypto::Certificate>&,
-                               const std::string& name) {
-            successfullyReceive = name == "git://*";
-            return true;
-        });
-
-    bobAccount->connectionManager().onConnectionReady(
-        [&](const DeviceId&, const std::string& name, std::shared_ptr<dhtnet::ChannelSocket> socket) {
-            if (socket) {
-                socket->onShutdown([&] {
-                    shutdownReceived = true;
-                    scv.notify_one();
-                });
-            }
-            receiverConnected = socket && (name == "git://*");
-        });
-
-    aliceAccount->connectionManager().connectDevice(bobDeviceId,
-                                                    "git://*",
-                                                    [&](std::shared_ptr<dhtnet::ChannelSocket> socket,
-                                                        const DeviceId&) {
-                                                        if (socket) {
-                                                            successfullyConnected = true;
-                                                            rcv.notify_one();
-                                                            socket->shutdown();
-                                                        }
-                                                    });
-
-    rcv.wait_for(lk, 30s);
-    scv.wait_for(lk, 30s);
-    CPPUNIT_ASSERT(shutdownReceived);
-    CPPUNIT_ASSERT(successfullyReceive);
-    CPPUNIT_ASSERT(successfullyConnected);
-    CPPUNIT_ASSERT(receiverConnected);
-}
-
-void
-ConnectionManagerTest::testCloseConnectionWith()
-{
-    auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
-    auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
-    auto bobDeviceId = DeviceId(std::string(bobAccount->currentDeviceId()));
-    auto bobUri = bobAccount->getUsername();
-
-    bobAccount->connectionManager().onICERequest([](const DeviceId&) { return true; });
-    aliceAccount->connectionManager().onICERequest([](const DeviceId&) { return true; });
-
-    std::mutex mtx;
-    std::unique_lock<std::mutex> lk {mtx};
-    std::condition_variable rcv, scv;
-    std::atomic_int events(0);
-    bool successfullyConnected = false;
-    bool successfullyReceive = false;
-    bool receiverConnected = false;
-
-    bobAccount->connectionManager().onChannelRequest(
-        [&successfullyReceive](const std::shared_ptr<dht::crypto::Certificate>&,
-                               const std::string& name) {
-            successfullyReceive = name == "git://*";
-            return true;
-        });
-
-    bobAccount->connectionManager().onConnectionReady(
-        [&](const DeviceId&, const std::string& name, std::shared_ptr<dhtnet::ChannelSocket> socket) {
-            if (socket) {
-                socket->onShutdown([&] {
-                    events += 1;
-                    scv.notify_one();
-                });
-            }
-            receiverConnected = socket && (name == "git://*");
-        });
-
-    aliceAccount->connectionManager().connectDevice(bobDeviceId,
-                                                    "git://*",
-                                                    [&](std::shared_ptr<dhtnet::ChannelSocket> socket,
-                                                        const DeviceId&) {
-                                                        if (socket) {
-                                                            socket->onShutdown([&] {
-                                                                events += 1;
-                                                                scv.notify_one();
-                                                            });
-                                                            successfullyConnected = true;
-                                                            rcv.notify_one();
-                                                        }
-                                                    });
-
-    rcv.wait_for(lk, 30s);
-    // This should trigger onShutdown
-    aliceAccount->connectionManager().closeConnectionsWith(bobUri);
-    CPPUNIT_ASSERT(scv.wait_for(lk, 60s, [&] {
-        return events == 2 && successfullyReceive && successfullyConnected && receiverConnected;
-    }));
-}
-
-void
-ConnectionManagerTest::testShutdownCallbacks()
-{
-    auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
-    auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
-    auto bobDeviceId = DeviceId(std::string(bobAccount->currentDeviceId()));
-    auto aliceUri = aliceAccount->getUsername();
-
-    bobAccount->connectionManager().onICERequest([](const DeviceId&) { return true; });
-    aliceAccount->connectionManager().onICERequest([](const DeviceId&) { return true; });
-
-    std::mutex mtx;
-    std::unique_lock<std::mutex> lk {mtx};
-    std::condition_variable rcv, chan2cv;
-    bool successfullyConnected = false;
-    bool successfullyReceive = false;
-    bool receiverConnected = false;
-
-    bobAccount->connectionManager().onChannelRequest(
-        [&successfullyReceive, &chan2cv](const std::shared_ptr<dht::crypto::Certificate>&,
-                                         const std::string& name) {
-            if (name == "1") {
-                successfullyReceive = true;
-            } else {
-                chan2cv.notify_one();
-                // Do not return directly. Let the connection be closed
-                std::this_thread::sleep_for(10s);
-            }
-            return true;
-        });
-
-    bobAccount->connectionManager().onConnectionReady(
-        [&](const DeviceId&, const std::string& name, std::shared_ptr<dhtnet::ChannelSocket> socket) {
-            receiverConnected = socket && (name == "1");
-        });
-
-    aliceAccount->connectionManager().connectDevice(bobDeviceId,
-                                                    "1",
-                                                    [&](std::shared_ptr<dhtnet::ChannelSocket> socket,
-                                                        const DeviceId&) {
-                                                        if (socket) {
-                                                            successfullyConnected = true;
-                                                            rcv.notify_one();
-                                                        }
-                                                    });
-    // Connect first channel. This will initiate a mx sock
-    CPPUNIT_ASSERT(rcv.wait_for(lk, 30s, [&] {
-        return successfullyReceive && successfullyConnected && receiverConnected;
-    }));
-
-    // Connect another channel, but close the connection
-    bool channel2NotConnected = false;
-    aliceAccount->connectionManager().connectDevice(bobDeviceId,
-                                                    "2",
-                                                    [&](std::shared_ptr<dhtnet::ChannelSocket> socket,
-                                                        const DeviceId&) {
-                                                        channel2NotConnected = !socket;
-                                                        rcv.notify_one();
-                                                    });
-    chan2cv.wait_for(lk, 30s);
-
-    // This should trigger onShutdown for second callback
-    bobAccount->connectionManager().closeConnectionsWith(aliceUri);
-    CPPUNIT_ASSERT(rcv.wait_for(lk, 30s, [&] { return channel2NotConnected; }));
-}
-
-void
-ConnectionManagerTest::testFloodSocket()
-{
-    auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
-    auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
-    auto bobDeviceId = DeviceId(std::string(bobAccount->currentDeviceId()));
-    bobAccount->connectionManager().onICERequest([](const DeviceId&) { return true; });
-    aliceAccount->connectionManager().onICERequest([](const DeviceId&) { return true; });
-    std::mutex mtx;
-    std::unique_lock<std::mutex> lk {mtx};
-    std::condition_variable cv;
-    bool successfullyConnected = false;
-    bool successfullyReceive = false;
-    bool receiverConnected = false;
-    std::shared_ptr<dhtnet::ChannelSocket> rcvSock1, rcvSock2, rcvSock3, sendSock, sendSock2, sendSock3;
-    bobAccount->connectionManager().onChannelRequest(
-        [&successfullyReceive](const std::shared_ptr<dht::crypto::Certificate>&,
-                               const std::string& name) {
-            successfullyReceive = name == "1";
-            return true;
-        });
-    bobAccount->connectionManager().onConnectionReady(
-        [&](const DeviceId&, const std::string& name, std::shared_ptr<dhtnet::ChannelSocket> socket) {
-            receiverConnected = socket != nullptr;
-            if (name == "1")
-                rcvSock1 = socket;
-            else if (name == "2")
-                rcvSock2 = socket;
-            else if (name == "3")
-                rcvSock3 = socket;
-        });
-    aliceAccount->connectionManager().connectDevice(bobDeviceId,
-                                                    "1",
-                                                    [&](std::shared_ptr<dhtnet::ChannelSocket> socket,
-                                                        const DeviceId&) {
-                                                        if (socket) {
-                                                            sendSock = socket;
-                                                            successfullyConnected = true;
-                                                        }
-                                                        cv.notify_one();
-                                                    });
-    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&] {
-        return successfullyReceive && successfullyConnected && receiverConnected;
-    }));
-    CPPUNIT_ASSERT(receiverConnected);
-    successfullyConnected = false;
-    receiverConnected = false;
-    aliceAccount->connectionManager().connectDevice(bobDeviceId,
-                                                    "2",
-                                                    [&](std::shared_ptr<dhtnet::ChannelSocket> socket,
-                                                        const DeviceId&) {
-                                                        if (socket) {
-                                                            sendSock2 = socket;
-                                                            successfullyConnected = true;
-                                                        }
-                                                        cv.notify_one();
-                                                    });
-    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&] { return successfullyConnected && receiverConnected; }));
-    successfullyConnected = false;
-    receiverConnected = false;
-    aliceAccount->connectionManager().connectDevice(bobDeviceId,
-                                                    "3",
-                                                    [&](std::shared_ptr<dhtnet::ChannelSocket> socket,
-                                                        const DeviceId&) {
-                                                        if (socket) {
-                                                            sendSock3 = socket;
-                                                            successfullyConnected = true;
-                                                        }
-                                                        cv.notify_one();
-                                                    });
-    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&] { return successfullyConnected && receiverConnected; }));
-    std::mutex mtxRcv {};
-    std::string alphabet, shouldRcv, rcv1, rcv2, rcv3;
-    for (int i = 0; i < 100; ++i)
-        alphabet += "QWERTYUIOPASDFGHJKLZXCVBNM";
-    rcvSock1->setOnRecv([&](const uint8_t* buf, size_t len) {
-        rcv1 += std::string(buf, buf + len);
-        return len;
-    });
-    rcvSock2->setOnRecv([&](const uint8_t* buf, size_t len) {
-        rcv2 += std::string(buf, buf + len);
-        return len;
-    });
-    rcvSock3->setOnRecv([&](const uint8_t* buf, size_t len) {
-        rcv3 += std::string(buf, buf + len);
-        return len;
-    });
-    for (uint64_t i = 0; i < alphabet.size(); ++i) {
-        auto send = std::string(8000, alphabet[i]);
-        shouldRcv += send;
-        std::error_code ec;
-        sendSock->write(reinterpret_cast<unsigned char*>(send.data()), send.size(), ec);
-        sendSock2->write(reinterpret_cast<unsigned char*>(send.data()), send.size(), ec);
-        sendSock3->write(reinterpret_cast<unsigned char*>(send.data()), send.size(), ec);
-        CPPUNIT_ASSERT(!ec);
-    }
-    CPPUNIT_ASSERT(cv.wait_for(lk, 60s, [&] {
-        return shouldRcv == rcv1 && shouldRcv == rcv2 && shouldRcv == rcv3;
-    }));
-}
-
-void
-ConnectionManagerTest::testDestroyWhileSending()
-{
-    // Same as test before, but destroy the accounts while sending.
-    // This test if a segfault occurs
-    auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
-    auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
-    auto bobDeviceId = DeviceId(std::string(bobAccount->currentDeviceId()));
-    bobAccount->connectionManager().onICERequest([](const DeviceId&) { return true; });
-    aliceAccount->connectionManager().onICERequest([](const DeviceId&) { return true; });
-    std::mutex mtx;
-    std::unique_lock<std::mutex> lk {mtx};
-    std::condition_variable cv;
-    bool successfullyConnected = false;
-    bool successfullyReceive = false;
-    bool receiverConnected = false;
-    std::shared_ptr<dhtnet::ChannelSocket> rcvSock1, rcvSock2, rcvSock3, sendSock, sendSock2, sendSock3;
-    bobAccount->connectionManager().onChannelRequest(
-        [&successfullyReceive](const std::shared_ptr<dht::crypto::Certificate>&,
-                               const std::string& name) {
-            successfullyReceive = name == "1";
-            return true;
-        });
-    bobAccount->connectionManager().onConnectionReady(
-        [&](const DeviceId&, const std::string& name, std::shared_ptr<dhtnet::ChannelSocket> socket) {
-            receiverConnected = socket != nullptr;
-            if (name == "1")
-                rcvSock1 = socket;
-            else if (name == "2")
-                rcvSock2 = socket;
-            else if (name == "3")
-                rcvSock3 = socket;
-        });
-    aliceAccount->connectionManager().connectDevice(bobDeviceId,
-                                                    "1",
-                                                    [&](std::shared_ptr<dhtnet::ChannelSocket> socket,
-                                                        const DeviceId&) {
-                                                        if (socket) {
-                                                            sendSock = socket;
-                                                            successfullyConnected = true;
-                                                        }
-                                                        cv.notify_one();
-                                                    });
-    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&] {
-        return successfullyReceive && successfullyConnected && receiverConnected;
-    }));
-    successfullyConnected = false;
-    receiverConnected = false;
-    aliceAccount->connectionManager().connectDevice(bobDeviceId,
-                                                    "2",
-                                                    [&](std::shared_ptr<dhtnet::ChannelSocket> socket,
-                                                        const DeviceId&) {
-                                                        if (socket) {
-                                                            sendSock2 = socket;
-                                                            successfullyConnected = true;
-                                                        }
-                                                        cv.notify_one();
-                                                    });
-    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&] { return successfullyConnected && receiverConnected; }));
-    successfullyConnected = false;
-    receiverConnected = false;
-    aliceAccount->connectionManager().connectDevice(bobDeviceId,
-                                                    "3",
-                                                    [&](std::shared_ptr<dhtnet::ChannelSocket> socket,
-                                                        const DeviceId&) {
-                                                        if (socket) {
-                                                            sendSock3 = socket;
-                                                            successfullyConnected = true;
-                                                        }
-                                                        cv.notify_one();
-                                                    });
-    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&] { return successfullyConnected && receiverConnected; }));
-    std::mutex mtxRcv {};
-    std::string alphabet;
-    for (int i = 0; i < 100; ++i)
-        alphabet += "QWERTYUIOPASDFGHJKLZXCVBNM";
-    rcvSock1->setOnRecv([&](const uint8_t*, size_t len) { return len; });
-    rcvSock2->setOnRecv([&](const uint8_t*, size_t len) { return len; });
-    rcvSock3->setOnRecv([&](const uint8_t*, size_t len) { return len; });
-    for (uint64_t i = 0; i < alphabet.size(); ++i) {
-        auto send = std::string(8000, alphabet[i]);
-        std::error_code ec;
-        sendSock->write(reinterpret_cast<unsigned char*>(send.data()), send.size(), ec);
-        sendSock2->write(reinterpret_cast<unsigned char*>(send.data()), send.size(), ec);
-        sendSock3->write(reinterpret_cast<unsigned char*>(send.data()), send.size(), ec);
-        CPPUNIT_ASSERT(!ec);
-    }
-
-    // No need to wait, immediately destroy, no segfault must occurs
-}
-
-void
-ConnectionManagerTest::testIsConnecting()
-{
-    auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
-    auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
-    auto bobDeviceId = DeviceId(std::string(bobAccount->currentDeviceId()));
-
-    bobAccount->connectionManager().onICERequest([](const DeviceId&) { return true; });
-    aliceAccount->connectionManager().onICERequest([](const DeviceId&) { return true; });
-
-    std::mutex mtx;
-    std::unique_lock<std::mutex> lk {mtx};
-    std::condition_variable cv;
-    bool successfullyConnected = false, successfullyReceive = false;
-
-    bobAccount->connectionManager().onChannelRequest(
-        [&](const std::shared_ptr<dht::crypto::Certificate>&, const std::string&) {
-            successfullyReceive = true;
-            cv.notify_one();
-            std::this_thread::sleep_for(2s);
-            return true;
-        });
-
-    CPPUNIT_ASSERT(!aliceAccount->connectionManager().isConnecting(bobDeviceId, "sip"));
-    aliceAccount->connectionManager().connectDevice(bobDeviceId,
-                                                    "sip",
-                                                    [&](std::shared_ptr<dhtnet::ChannelSocket> socket,
-                                                        const DeviceId&) {
-                                                        if (socket) {
-                                                            successfullyConnected = true;
-                                                        }
-                                                        cv.notify_one();
-                                                    });
-    // connectDevice is full async, so isConnecting will be true after a few ms.
-    CPPUNIT_ASSERT(cv.wait_for(lk, 60s, [&] { return successfullyReceive; }));
-    CPPUNIT_ASSERT(aliceAccount->connectionManager().isConnecting(bobDeviceId, "sip"));
-    CPPUNIT_ASSERT(cv.wait_for(lk, 60s, [&] { return successfullyConnected; }));
-    std::this_thread::sleep_for(
-        std::chrono::milliseconds(100)); // Just to wait for the callback to finish
-    CPPUNIT_ASSERT(!aliceAccount->connectionManager().isConnecting(bobDeviceId, "sip"));
-}
-
-void
-ConnectionManagerTest::testCanSendBeacon()
-{
-    auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
-    auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
-    auto bobDeviceId = DeviceId(std::string(bobAccount->currentDeviceId()));
-
-    bobAccount->connectionManager().onICERequest([](const DeviceId&) { return true; });
-    aliceAccount->connectionManager().onICERequest([](const DeviceId&) { return true; });
-
-    std::mutex mtx;
-    std::unique_lock<std::mutex> lk {mtx};
-    std::condition_variable cv;
-    bool successfullyConnected = false;
-
-    std::shared_ptr<dhtnet::MultiplexedSocket> aliceSocket, bobSocket;
-    bobAccount->connectionManager().onChannelRequest(
-        [&](const std::shared_ptr<dht::crypto::Certificate>&, const std::string&) { return true; });
-    bobAccount->connectionManager().onConnectionReady(
-        [&](const DeviceId&, const std::string&, std::shared_ptr<dhtnet::ChannelSocket> socket) {
-            if (socket && socket->name() == "sip")
-                bobSocket = socket->underlyingSocket();
-            cv.notify_one();
-        });
-
-    aliceAccount->connectionManager().connectDevice(bobDeviceId,
-                                                    "sip",
-                                                    [&](std::shared_ptr<dhtnet::ChannelSocket> socket,
-                                                        const DeviceId&) {
-                                                        if (socket) {
-                                                            aliceSocket = socket->underlyingSocket();
-                                                            successfullyConnected = true;
-                                                        }
-                                                        cv.notify_one();
-                                                    });
-    // connectDevice is full async, so isConnecting will be true after a few ms.
-    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&] { return aliceSocket && bobSocket && successfullyConnected; }));
-    CPPUNIT_ASSERT(aliceSocket->canSendBeacon());
-
-    // Because onConnectionReady is true before version is sent, we can wait a bit
-    // before canSendBeacon is true.
-    auto start = std::chrono::steady_clock::now();
-    auto aliceCanSendBeacon = false;
-    auto bobCanSendBeacon = false;
-    do {
-        aliceCanSendBeacon = aliceSocket->canSendBeacon();
-        bobCanSendBeacon = bobSocket->canSendBeacon();
-        if (!bobCanSendBeacon || !aliceCanSendBeacon)
-            std::this_thread::sleep_for(1s);
-    } while ((not bobCanSendBeacon or not aliceCanSendBeacon)
-             and std::chrono::steady_clock::now() - start < 5s);
-
-    CPPUNIT_ASSERT(bobCanSendBeacon && aliceCanSendBeacon);
-}
-
-void
-ConnectionManagerTest::testCannotSendBeacon()
-{
-    auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
-    auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
-    auto bobDeviceId = DeviceId(std::string(bobAccount->currentDeviceId()));
-
-    bobAccount->connectionManager().onICERequest([](const DeviceId&) { return true; });
-    aliceAccount->connectionManager().onICERequest([](const DeviceId&) { return true; });
-
-    std::mutex mtx;
-    std::unique_lock<std::mutex> lk {mtx};
-    std::condition_variable cv;
-    bool successfullyConnected = false;
-
-    std::shared_ptr<dhtnet::MultiplexedSocket> aliceSocket, bobSocket;
-    bobAccount->connectionManager().onChannelRequest(
-        [&](const std::shared_ptr<dht::crypto::Certificate>&, const std::string&) { return true; });
-    bobAccount->connectionManager().onConnectionReady(
-        [&](const DeviceId&, const std::string&, std::shared_ptr<dhtnet::ChannelSocket> socket) {
-            if (socket && socket->name() == "sip")
-                bobSocket = socket->underlyingSocket();
-            cv.notify_one();
-        });
-
-    aliceAccount->connectionManager().connectDevice(bobDeviceId,
-                                                    "sip",
-                                                    [&](std::shared_ptr<dhtnet::ChannelSocket> socket,
-                                                        const DeviceId&) {
-                                                        if (socket) {
-                                                            aliceSocket = socket->underlyingSocket();
-                                                            successfullyConnected = true;
-                                                        }
-                                                        cv.notify_one();
-                                                    });
-    // connectDevice is full async, so isConnecting will be true after a few ms.
-    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&] { return aliceSocket && bobSocket; }));
-
-    int version = 1412;
-    bobSocket->setOnVersionCb([&](auto v) {
-        version = v;
-        cv.notify_one();
-    });
-    aliceSocket->setVersion(0);
-    aliceSocket->sendVersion();
-    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&] { return version == 0; }));
-    CPPUNIT_ASSERT(!bobSocket->canSendBeacon());
-}
-
-void
-ConnectionManagerTest::testConnectivityChangeTriggerBeacon()
-{
-    auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
-    auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
-    auto bobDeviceId = DeviceId(std::string(bobAccount->currentDeviceId()));
-
-    bobAccount->connectionManager().onICERequest([](const DeviceId&) { return true; });
-    aliceAccount->connectionManager().onICERequest([](const DeviceId&) { return true; });
-
-    std::mutex mtx;
-    std::unique_lock<std::mutex> lk {mtx};
-    std::condition_variable cv;
-    bool successfullyConnected = false;
-
-    std::shared_ptr<dhtnet::MultiplexedSocket> aliceSocket, bobSocket;
-    bobAccount->connectionManager().onChannelRequest(
-        [&](const std::shared_ptr<dht::crypto::Certificate>&, const std::string&) { return true; });
-    bobAccount->connectionManager().onConnectionReady(
-        [&](const DeviceId&, const std::string&, std::shared_ptr<dhtnet::ChannelSocket> socket) {
-            if (socket && socket->name() == "sip")
-                bobSocket = socket->underlyingSocket();
-            cv.notify_one();
-        });
-
-    aliceAccount->connectionManager().connectDevice(bobDeviceId,
-                                                    "sip",
-                                                    [&](std::shared_ptr<dhtnet::ChannelSocket> socket,
-                                                        const DeviceId&) {
-                                                        if (socket) {
-                                                            aliceSocket = socket->underlyingSocket();
-                                                            successfullyConnected = true;
-                                                        }
-                                                        cv.notify_one();
-                                                    });
-    // connectDevice is full async, so isConnecting will be true after a few ms.
-    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&] { return aliceSocket && bobSocket; }));
-
-    bool hasRequest = false;
-    bobSocket->setOnBeaconCb([&](auto p) {
-        if (p)
-            hasRequest = true;
-        cv.notify_one();
-    });
-    aliceAccount->connectionManager().connectivityChanged();
-    CPPUNIT_ASSERT(cv.wait_for(lk, 10s, [&] { return hasRequest; }));
-}
-
-void
-ConnectionManagerTest::testOnNoBeaconTriggersShutdown()
-{
-    auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
-    auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
-    auto bobDeviceId = DeviceId(std::string(bobAccount->currentDeviceId()));
-
-    bobAccount->connectionManager().onICERequest([](const DeviceId&) { return true; });
-    aliceAccount->connectionManager().onICERequest([](const DeviceId&) { return true; });
-
-    std::mutex mtx;
-    std::unique_lock<std::mutex> lk {mtx};
-    std::condition_variable cv;
-    bool successfullyConnected = false;
-
-    std::shared_ptr<dhtnet::MultiplexedSocket> aliceSocket, bobSocket;
-    bobAccount->connectionManager().onChannelRequest(
-        [&](const std::shared_ptr<dht::crypto::Certificate>&, const std::string&) { return true; });
-    bobAccount->connectionManager().onConnectionReady(
-        [&](const DeviceId&, const std::string&, std::shared_ptr<dhtnet::ChannelSocket> socket) {
-            if (socket && socket->name() == "sip")
-                bobSocket = socket->underlyingSocket();
-            cv.notify_one();
-        });
-
-    aliceAccount->connectionManager().connectDevice(bobDeviceId,
-                                                    "sip",
-                                                    [&](std::shared_ptr<dhtnet::ChannelSocket> socket,
-                                                        const DeviceId&) {
-                                                        if (socket) {
-                                                            aliceSocket = socket->underlyingSocket();
-                                                            successfullyConnected = true;
-                                                        }
-                                                        cv.notify_one();
-                                                    });
-    // connectDevice is full async, so isConnecting will be true after a few ms.
-    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&] { return aliceSocket && bobSocket; }));
-
-    bool isClosed = false;
-    aliceSocket->onShutdown([&] {
-        isClosed = true;
-        cv.notify_one();
-    });
-    bobSocket->answerToBeacon(false);
-    aliceAccount->connectionManager().connectivityChanged();
-    CPPUNIT_ASSERT(cv.wait_for(lk, 10s, [&] { return isClosed; }));
-}
-
-void
-ConnectionManagerTest::testShutdownWhileNegotiating()
-{
-    auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
-    auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
-    auto bobDeviceId = DeviceId(std::string(bobAccount->currentDeviceId()));
-
-    aliceAccount->connectionManager().onICERequest([](const DeviceId&) { return true; });
-
-    std::mutex mtx;
-    std::unique_lock<std::mutex> lk {mtx};
-    std::condition_variable cv;
-    bool successfullyReceive = false;
-    bool notConnected = false;
-
-    bobAccount->connectionManager().onICERequest([&](const DeviceId&) {
-        successfullyReceive = true;
-        cv.notify_one();
-        return true;
-    });
-
-    aliceAccount->connectionManager().connectDevice(bobDeviceId,
-                                                    "git://*",
-                                                    [&](std::shared_ptr<dhtnet::ChannelSocket> socket,
-                                                        const DeviceId&) {
-                                                        notConnected = !socket;
-                                                        cv.notify_one();
-                                                    });
-
-    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&] { return successfullyReceive; }));
-    Manager::instance().setAccountActive(aliceId, false, true);
-    CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&] { return notConnected; }));
-}
-
-} // namespace test
-} // namespace jami
-
-RING_TEST_RUNNER(jami::test::ConnectionManagerTest::name())