<?xml version="1.0" ?>
<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">
            Used to handle the configuration stuff: accounts settings, user preferences, ...
            TODO: move runtime account stuff in accountmanager
        </tp:docstring>

        <method name="getAccountTemplate" tp:name-for-bindings="getAccountTemplate">
            <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="MapStringString"/>
            <arg type="s" name="accountType" direction="in" tp:type="String">
            </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="getAccountDetails" tp:name-for-bindings="getAccountDetails">
            <tp:docstring>
                Get all parameters of the specified account.
            </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" direction="out" tp:type="String_String_Map">
                <tp:docstring>
                    The available keys / parameters are:
                    <ul>
                        <li>CONFIG_ACCOUNT_ENABLE:    True or False (Default: True)</li>
                        <li>CONFIG_ACCOUNT_RESOLVE_ONCE</li>
                        <li>CONFIG_ACCOUNT_TYPE: SIP or RING</li>
                        <li>HOSTNAME: The IP address or hostname of the registrar</li>
                        <li>USERNAME: The username (or extension) of the account</li>
                        <li>PASSWORD: The password associated to the account</li>
                        <li>REALM</li>
                        <li>CONFIG_ACCOUNT_MAILBOX: Number to dial to access the voicemail box</li>
                        <li>CONFIG_ACCOUNT_REGISTRATION_EXPIRE: SIP header expiration value (Default: 1600)</li>
                        <li>BIND_ADDRESS: Custom bind SIP ip address</li>
                        <li>LOCAL_INTERFACE: The network interface (Default: eth0)</li>
                        <li>PUBLISHED_SAMEAS_LOCAL: If False, the published address equals the local address. This is the default.</li>
                        <li>PUBLISHED_ADDRESS: The SIP published address</li>
                        <li>LOCAL_PORT: The SIP listening port (Default: 5060)</li>
                        <li>PUBLISHED_PORT: The SIP published port</li>
                        <li>DISPLAY_NAMEL: The display name</li>
                        <li>STUN_ENABLE: True or False (Default: False)</li>
                        <li>STUN_SERVER: The STUN server address</li>
                        <li>ACCOUNT_REGISTRATION_STATUS: The account registration status. Should be Registered to make calls.</li>
                        <li>ACCOUNT_REGISTRATION_STATE_CODE</li>
                        <li>ACCOUNT_REGISTRATION_STATE_DESC</li>
                        <li>CONFIG_DEFAULT_PRESENCE_ENABLED: enable/disable presence support - true or false</li>
                        <li>SRTP_KEY_EXCHANGE</li>
                        <li>SRTP_ENABLE: Whether or not voice communication are encrypted - True or False (Default: False)</li>
                        <li>SRTP_RTP_FALLBACK</li>
                        <li>TLS_LISTENER_PORT: TLS listening port (Default: 5061)</li>
                        <li>TLS_ENABLE: Whether or not signalling is encrypted - True or False (Default: False)</li>
                        <li>TLS_CA_LIST_FILE</li>
                        <li>TLS_CERTIFICATE_FILE</li>
                        <li>TLS_PRIVATE_KEY_FILE</li>
                        <li>TLS_METHOD</li>
                        <li>TLS_CIPHERS</li>
                        <li>TLS_SERVER_NAME</li>
                        <li>TLS_VERIFY_SERVER</li>
                        <li>TLS_VERIFY_CLIENT</li>
                        <li>TLS_REQUIRE_CLIENT_CERTIFICATE</li>
                        <li>TLS_DISABLE_SECURE_DLG_CHECK</li>
                        <li>TLS_NEGOTIATION_TIMEOUT_SEC</li>
                    </ul>
                </tp:docstring>
            </arg>
        </method>

        <method name="getVolatileAccountDetails" tp:name-for-bindings="getVolatileAccountDetails">
            <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>
                   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>

        <method name="setAccountDetails" tp:name-for-bindings="setAccountDetails">
            <tp:docstring>
                Send new account parameters, or account parameters changes, to the core. The hash table is not required to be complete, only the updated parameters may be specified.
                <tp:rationale>Account settings are written to the configuration file when ring properly quits.</tp:rationale>
                <tp:rationale>After calling this method, the core will emit the signal <tp:member-ref>accountDetailsChanged</tp:member-ref> with the updated data. The client must subscribe to this signal and use it to update its internal data structure.</tp:rationale>
            </tp:docstring>
            <arg type="s" name="accountId" direction="in">
            </arg>
            <annotation name="org.qtproject.QtDBus.QtTypeName.In1" value="MapStringString"/>
            <arg type="a{ss}" name="details" direction="in" tp:type="String_String_Map">
            </arg>
        </method>

        <method name="setAccountActive" tp:name-for-bindings="setAccountActive">
            <tp:docstring>
              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>
                    The account ID
                </tp:docstring>
            </arg>
            <arg type="b" name="enable" direction="in">
                <tp:docstring>
                    <p>Set if enabled.</p>
                </tp:docstring>
            </arg>
        </method>

        <method name="setCredentials" tp:name-for-bindings="setCredentials">
            <arg type="s" name="accountId" direction="in">
            </arg>
            <annotation name="org.qtproject.QtDBus.QtTypeName.In1" value="VectorMapStringString"/>
            <arg type="aa{ss}" name="credentialInformation" direction="in" tp:type="String_String_Map">
            </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>
               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>
                    The new account settings
                </tp:docstring>
            </arg>
            <arg type="s" name="createdAccountId" direction="out">
                <tp:docstring>
                    A new account ID
                </tp:docstring>
            </arg>
        </method>

        <method name="exportToFile" tp:name-for-bindings="exportToFile">
            <tp:added version="15.0.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="scheme" direction="in">
            <tp:docstring>
               The password scheme. Accepted values:
                <ul>
                     <li>(empty string): no encryption.</li>
                     <li>password: plain-text password string.</li>
                     <li>key: base64-encoded binary key.</li>
                </ul>
            </tp:docstring>
            </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>

        <signal name="deviceAuthStateChanged" tp:name-for-bindings="deviceAuthStateChanged">
            <tp:docstring>
               Notify clients when the device authentication state changed. During the import-account process.
            </tp:docstring>
            <arg type="s" name="accountId">
            </arg>
            <arg type="i" name="state">
            </arg>
            <annotation name="org.qtproject.QtDBus.QtTypeName.Out2" value="MapStringString"/>
            <arg type="a{ss}" name="detail" tp:type="String_String_Map">
                <tp:docstring>
                   TODO: add docstring for this map
                </tp:docstring>
            </arg>
        </signal>

        <method name="provideAccountAuthentication" tp:name-for-bindings="provideAccountAuthentication">
            <tp:added version="15.0.0"/>
            <tp:docstring>
               Provide account authentication credentials to the core.
            </tp:docstring>
            <arg type="s" name="accountId" direction="in">
            </arg>
            <arg type="s" name="credentialsFromUser" direction="in">
            </arg>
            <arg type="s" name="scheme" direction="in">
                <tp:docstring>
                   The password scheme. Accepted values:
                    <ul>
                         <li>(empty string): no encryption.</li>
                         <li>password: plain-text password string.</li>
                         <li>key: base64-encoded binary key.</li>
                    </ul>
                </tp:docstring>
            </arg>
            <arg type="b" name="success" direction="out">
                <tp:docstring>
                   True if the operation was performed successfully.
                </tp:docstring>
            </arg>
        </method>

        <signal name="addDeviceStateChanged" tp:name-for-bindings="addDeviceStateChanged">
            <tp:docstring>
               Notify clients when the addDevice operation state changed.
            </tp:docstring>
            <arg type="s" name="accountId">
            </arg>
            <arg type="u" name="op_id">
            </arg>
            <arg type="i" name="state">
            </arg>
            <annotation name="org.qtproject.QtDBus.QtTypeName.Out3" value="MapStringString"/>
            <arg type="a{ss}" name="detail" tp:type="String_String_Map">
                <tp:docstring>
                   TODO: add docstring for this map
                </tp:docstring>
            </arg>
        </signal>

        <method name="addDevice" tp:name-for-bindings="addDevice">
            <tp:added version="16.0.0"/>
            <tp:docstring>
               Add a new device to the account.
            </tp:docstring>
            <arg type="s" name="accountId" direction="in">
            </arg>
            <arg type="s" name="uri" direction="in">
            </arg>
            <arg type="i" name="op_id" direction="out">
                <tp:docstring>
                   The operation ID.
                </tp:docstring>
            </arg>
        </method>

        <method name="confirmAddDevice" tp:name-for-bindings="confirmAddDevice">
            <tp:added version="16.0.0"/>
            <tp:docstring>
               Confirm the addition of a new device to the account.
            </tp:docstring>
            <arg type="s" name="accountId" direction="in">
            </arg>
            <arg type="u" name="op_id" direction="in">
                <tp:docstring>
                   The operation ID.
                </tp:docstring>
            </arg>
            <arg type="b" name="success" direction="out">
                <tp:docstring>
                   True if the operation was performed successfully.
                </tp:docstring>
            </arg>
        </method>

        <method name="cancelAddDevice" tp:name-for-bindings="cancelAddDevice">
            <tp:added version="16.0.0"/>
            <tp:docstring>
               Cancel the addition of a new device to the account.
            </tp:docstring>
            <arg type="s" name="accountId" direction="in">
            </arg>
            <arg type="u" name="op_id" direction="in">
                <tp:docstring>
                   The operation ID.
                </tp:docstring>
            </arg>
            <arg type="b" name="success" direction="out">
                <tp:docstring>
                   True if the operation was performed successfully.
                </tp:docstring>
            </arg>
        </method>

        <method name="revokeDevice" tp:name-for-bindings="revokeDevice">
            <tp:added version="15.0.0"/>
            <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="deviceId" direction="in">
            </arg>
            <arg type="s" name="scheme" 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 performed successfully.
                </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>
                   Status code: 0 for success
                    <ul>
                        <li>SUCCESS = 0         everything went fine. Device is now revoked.</li>
                        <li>WRONG_PASSWORD = 1  revocation failed: incorrect 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>
               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>
                   A map of device IDs with corresponding labels.
                </tp:docstring>
            </arg>
        </signal>

        <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>
                   A map of device IDs with corresponding labels.
                </tp:docstring>
            </arg>
        </method>

        <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>
                   True if the operation was successful.
                </tp:docstring>
            </arg>
        </method>

        <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">
              The account to use. If empty, use the default nameserver.
            </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>
                   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>
               Performs address lookup for the specified account (if any) or using the default nameserver.
            </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">
              The name server URI to use, considered only if accountId is empty.
            </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>
                   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>
               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="s" name="requestName">
            </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>
               Performs name registration with Nameserver protocol for the specified account.
            </tp:docstring>
            <arg type="s" name="accountId" direction="in">
            </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="s" name="scheme" 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. 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>
               Notify clients when the registerName operation ended.
            </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: incorrect 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>

        <method name="searchUser" tp:name-for-bindings="searchUser">
            <tp:docstring>
               Performs name registration with Nameserver protocol for the specified account.
            </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>
                   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>
               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>
                   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>
                   List of user results
                </tp:docstring>
            </arg>
        </signal>

        <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>
                   An ordered list of account IDs, delimited by '/'
                </tp:docstring>
            </arg>
        </method>

        <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>
                    The account to remove, identified by its ID
                </tp:docstring>
            </arg>
        </method>

        <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>
                   A list of account IDs
                </tp:docstring>
            </arg>
        </method>

        <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>

        <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>
                    The account ID
                </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>

        <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>
               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="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>
               Get Discovered Peer Map
            </tp:docstring>
        </method>

        <method name="updateProfile" tp:name-for-bindings="updateProfile">
            <arg type="s" name="accountId" direction="in"/>
            <arg type="s" name="displayName" direction="in"/>
            <arg type="s" name="avatar" direction="in"/>
            <arg type="s" name="fileType" direction="in">
                <tp:docstring>
                The file type of the avatar, for now JPEG or PNG
                </tp:docstring>
            </arg>
            <arg type="s" name="botOwner" direction="in">
                <tp:docstring>
                The owner of the bot. An empty botOwner means the profile is not a bot.
                </tp:docstring>
            </arg>
            <arg type="i" name="flag" direction="in"/>
            <tp:docstring>
               Update the profile of the account and send it to peers.
                Flag options :
                    <ul>
                        <li>0 = modify avatar from path</li>
                        <li>1 = modify avatar from base64 img</li>
                        <li>2 = remove avatar from profile</li>
                    </ul>

            </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>
                DEPRECATED!
                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>
               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>
               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 message status.
                    <ul>
                        <li>SENDING = 0    message is being sent or waiting for peer confirmation.</li>
                        <li>SENT    = 1    message have been received from the other end.</li>
                        <li>READ    = 2    message have been read by the peer.</li>
                    </ul>
                </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>
               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>
               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>



        <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>
               A conversation uri (swarm:xxxx or jami:xxxx)
                </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>
               The account ID
                </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>
               The message ID
                </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>
               True if the message status was set, false if account, contact or message is unknown.
                </tp:docstring>
            </arg>
        </method>

        <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>
               The device: mic or speaker
                </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>
               The device: mic or speaker
                </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>
               The device: mic or speaker
                </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>
                   True to mute audio capture, false to unmute.
                </tp:docstring>
            </arg>
        </method>

        <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>

        <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>

        <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>

        <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>

        <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>
               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>

        <!-- Hardware encoding/decoding signals -->
        <signal name="hardwareDecodingChanged" tp:name-for-bindings="hardwareDecodingChanged">
            <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>
        </signal>
        <signal name="hardwareEncodingChanged" tp:name-for-bindings="hardwareEncodingChanged">
            <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>
        </signal>

        <!-- 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="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>
        </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>

        <!-- Audio meter -->
        <method name="isAudioMeterActive" tp:name-for-bindings="isAudioMeterActive">
            <tp:docstring>Gets whether or not an audio meter is active for id. If id is empty, returns whether or not there is at least one audio meter active.</tp:docstring>
            <arg type="s" name="id" direction="in">
                <tp:docstring>Ring buffer id.</tp:docstring>
            </arg>
            <arg type="b" name="isActive" direction="out" tp:type="Boolean">
                <tp:docstring>If the audio meter is active for the passed in id.</tp:docstring>
            </arg>
        </method>

        <method name="setAudioMeterState" tp:name-for-bindings="setAudioMeterState">
            <tp:docstring>Sets whether or not the audio meter should be active for id. If id is empty, applies to all ring buffers.</tp:docstring>
            <arg type="s" name="id" direction="in">
                <tp:docstring>Ring buffer id.</tp:docstring>
            </arg>
            <arg type="b" name="state" direction="in" tp:type="Boolean">
                <tp:docstring>True to enabled the audio meter, false to disable.</tp:docstring>
            </arg>
        </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>
        </signal>

        <!--    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="setNoiseSuppressState" tp:name-for-bindings="setNoiseSuppressState">
            <tp:added version="13.5.0"/>
            <arg type="s" name="state" direction="in">
            </arg>
        </method>

        <method name="getEchoCancellationState" tp:name-for-bindings="getEchoCancellationState">
            <arg type="s" name="state" direction="out">
            </arg>
        </method>

        <method name="setEchoCancellationState" tp:name-for-bindings="setEchoCancellationState">
            <arg type="s" name="state" direction="in">
            </arg>
        </method>

        <method name="getVoiceActivityDetectionState" tp:name-for-bindings="getVoiceActivityDetectionState">
            <arg type="b" name="state" direction="out">
            </arg>
        </method>

        <method name="setVoiceActivityDetectionState" tp:name-for-bindings="setVoiceActivityDetectionState">
            <arg type="b" name="state" direction="in">
            </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>

        <!--    General Settings Panel         -->

        <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="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>

        <signal name="accountsChanged" tp:name-for-bindings="accountsChanged">
        </signal>

        <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>
                   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>
                   The optional account-type specific message code. 0 when not available.
                </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>

        <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>
                   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>
               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>
                   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>
                   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>
                   A list of certificate ids with the provided status
                </tp:docstring>
            </arg>
        </method>

        <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>
               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>
               Notify clients that a certificate path have been added to the store.
            </tp:docstring>
            <arg type="s" name="path">
                <tp:docstring>
                   Pinned path.
                </tp:docstring>
            </arg>
            <arg type="as" name="certIds">
                <tp:docstring>
                   A list of certificate ids.
                </tp:docstring>
            </arg>
        </signal>

        <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>
                   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>
                   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>
                   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>
                   True if the operation succeeded.
                </tp:docstring>
            </arg>
        </method>

        <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>
                   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>
                 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>
                 The list of contact information of given account.
                </tp:docstring>
            </arg>
        </method>

        <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>
               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>
               Monitor
            </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>
               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>
               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>
               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>
               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>
               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>
               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>
               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>
               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>
               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>
               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>
               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>
               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>
               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>
               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="loadConversation" tp:name-for-bindings="loadConversation">
           <tp:added version="14.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="loadSwarmUntil" tp:name-for-bindings="loadSwarmUntil">
            <tp:added version="15.1.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="toMessage" 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="clearCache" tp:name-for-bindings="clearCache">
            <tp:added version="14.0.0"/>
            <tp:docstring>
               Clear interactions loaded from daemon. Used by dbus to reload interactions
            </tp:docstring>
            <arg type="s" name="accountId" direction="in"/>
            <arg type="s" name="conversationId" direction="in"/>
        </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>
               Notify clients that a media parameter changed.
            </tp:docstring>
            <arg type="s" name="accountId">
                <tp:docstring>
                   An account id.
                </tp:docstring>
            </arg>
        </signal>

        <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>

        <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>
                   An account id.
                </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>

        <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>
                   An account id.
                </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>
                   Interaction id (empty for non swarm)
                </tp:docstring>
            </arg>
            <arg type="s" name="fileId">
                <tp:docstring>
                   File transfer unique id.
                </tp:docstring>
            </arg>
            <arg type="i" name="code">
                <tp:docstring>
                   A libjami::DataTransferEventCode code
                </tp:docstring>
            </arg>
        </signal>

       <signal name="swarmLoaded" tp:name-for-bindings="swarmLoaded">
           <tp:added version="14.0.0"/>
           <tp:docstring>
               Notify clients when a conversation is loaded
           </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>
                   Account id related
               </tp:docstring>
           </arg>
           <arg type="s" name="conversation_id">
               <tp:docstring>
                   Conversation id
               </tp:docstring>
           </arg>
           <annotation name="org.qtproject.QtDBus.QtTypeName.Out3" value="VectorSwarmMessage"/>
           <arg type="a(sssa{ss}aa{ss}aa{ss}a{si})" name="messages">
               <tp:docstring>
                    Messages of the conversation
               </tp:docstring>
           </arg>
       </signal>

       <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>
                   Id of the related loadConversationMessages's request
                </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>
                   Conversation id
                </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>

       <signal name="swarmMessageReceived" tp:name-for-bindings="swarmMessageReceived">
           <tp:added version="14.0.0"/>
           <tp:docstring>
               Notify clients when a conversation receives a new message
           </tp:docstring>
           <arg type="s" name="account_id">
               <tp:docstring>
                   Account id related
               </tp:docstring>
           </arg>
           <arg type="s" name="conversation_id">
               <tp:docstring>
                   Conversation id
               </tp:docstring>
           </arg>
           <annotation name="org.qtproject.QtDBus.QtTypeName.Out2" value="SwarmMessage"/>
           <arg type="(sssa{ss}aa{ss}aa{ss}a{si})" name="message">
               <tp:docstring>
                    The new message
               </tp:docstring>
           </arg>
       </signal>

       <signal name="swarmMessageUpdated" tp:name-for-bindings="swarmMessageUpdated">
           <tp:added version="14.0.0"/>
           <tp:docstring>
               Notify clients when a conversation receives a new message
           </tp:docstring>
           <arg type="s" name="account_id">
               <tp:docstring>
                   Account id related
               </tp:docstring>
           </arg>
           <arg type="s" name="conversation_id">
               <tp:docstring>
                   Conversation id
               </tp:docstring>
           </arg>
           <annotation name="org.qtproject.QtDBus.QtTypeName.Out2" value="SwarmMessage"/>
           <arg type="(sssa{ss}aa{ss}aa{ss}a{si})" name="message">
               <tp:docstring>
                    The new message
               </tp:docstring>
           </arg>
       </signal>

       <signal name="reactionAdded" tp:name-for-bindings="reactionAdded">
           <tp:added version="14.0.0"/>
           <tp:docstring>
               Notify clients when a conversation receives a new message
           </tp:docstring>
           <arg type="s" name="account_id">
               <tp:docstring>
                   Account id related
               </tp:docstring>
           </arg>
           <arg type="s" name="conversation_id">
               <tp:docstring>
                   Conversation id
               </tp:docstring>
           </arg>
           <arg type="s" name="message_id">
               <tp:docstring>
                   Conversation id
               </tp:docstring>
           </arg>
           <annotation name="org.qtproject.QtDBus.QtTypeName.Out3" value="MapStringString"/>
           <arg type="a{ss}" name="reaction">
               <tp:docstring>
                    The new message
               </tp:docstring>
           </arg>
       </signal>

       <signal name="reactionRemoved" tp:name-for-bindings="reactionRemoved">
           <tp:added version="14.0.0"/>
           <tp:docstring>
               Notify clients when a conversation receives a new message
           </tp:docstring>
           <arg type="s" name="account_id">
               <tp:docstring>
                   Account id related
               </tp:docstring>
           </arg>
           <arg type="s" name="conversation_id">
               <tp:docstring>
                   Conversation id
               </tp:docstring>
           </arg>
           <arg type="s" name="message_id">
               <tp:docstring>
                   Message's id
               </tp:docstring>
           </arg>
           <arg type="s" name="reaction_id">
               <tp:docstring>
                   Reaction's id
               </tp:docstring>
           </arg>
       </signal>


       <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>
                   Account id related
                </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>
                    The new profile
                </tp:docstring>
            </arg>
        </signal>

        <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>
                   Account id related
                </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>
                    Informations of the request
                </tp:docstring>
            </arg>
        </signal>

        <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>
                   Account id related
                </tp:docstring>
            </arg>
            <arg type="s" name="conversation_id">
                <tp:docstring>
                   Conversation id
                </tp:docstring>
            </arg>
        </signal>

        <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>
                   Account id related
                </tp:docstring>
            </arg>
            <arg type="s" name="conversation_id">
                <tp:docstring>
                   Conversation id
                </tp:docstring>
            </arg>
        </signal>

        <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>
                   Account id related
                </tp:docstring>
            </arg>
            <arg type="s" name="conversation_id">
                <tp:docstring>
                   Conversation id
                </tp:docstring>
            </arg>
        </signal>

        <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>
                   Account id related
                </tp:docstring>
            </arg>
            <arg type="s" name="conversation_id">
                <tp:docstring>
                   Conversation id
                </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>
                   event: 0 = add, 1 = joins, 2 = leave, 3 = banned
                </tp:docstring>
            </arg>
        </signal>

        <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>
                   Account id related
                </tp:docstring>
            </arg>
            <arg type="s" name="conversation_id">
                <tp:docstring>
                   Conversation id
                </tp:docstring>
            </arg>
            <arg type="u" name="code">
                <tp:docstring>
                   TODO
                </tp:docstring>
            </arg>
            <arg type="s" name="what">
                <tp:docstring>
                   The error's description
                </tp:docstring>
            </arg>
        </signal>

        <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>
                   Account id related
                </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>
                    New preferences
                </tp:docstring>
            </arg>
        </signal>

        <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>
                   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>

        <signal name="messageSend" tp:name-for-bindings="messageSend">
            <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>
        </signal>
    </interface>
</node>
