<?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>
            <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 adress 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>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_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>accountsChanged</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>
            <annotation name="org.qtproject.QtDBus.QtTypeName.In1" value="MapStringString"/>
            <arg type="s" name="accountID" direction="in">
            </arg>
            <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="exportOnRing" tp:name-for-bindings="exportOnRing">
           <tp:docstring>
               Export account on the DHT using the given password and generated PIN (returned through exportOnRingEnded signal).
           </tp:docstring>
           <arg type="s" name="accountID" direction="in">
           </arg>
           <arg type="s" name="password" direction="in">
           </arg>
           <arg type="b" name="success" direction="out">
               <tp:docstring>
                   True if the operation was initialized successfully. exportOnRingEnded will be trigered on completion.
               </tp:docstring>
           </arg>
       </method>

       <signal name="exportOnRingEnded" tp:name-for-bindings="exportOnRingEnded">
           <tp:docstring>
               Notify clients when the exportOnRing operation ended.
           </tp:docstring>
           <arg type="s" name="accountID">
           </arg>
           <arg type="i" name="status">
               <tp:docstring>
                   Status code: 0 for success
                  <ul>
                      <li>SUCCESS = 0         everything went fine. PIN is set.</li>
                      <li>WRONG_PASSWORD = 1  wrong password provided.</li>
                      <li>NETWORK_ERROR = 2   can't publish archive on the network.</li>
                  </ul>
               </tp:docstring>
           </arg>
           <arg type="s" name="PIN">
               <tp:docstring>
                   A PIN to show to the user to import the account from somewhere else.
               </tp:docstring>
           </arg>
       </signal>

       <method name="revokeDevice" tp:name-for-bindings="revokeDevice">
           <tp:docstring>
               Revoke device attached to the given Ring account, and publish the new revocation list.
           </tp:docstring>
           <arg type="s" name="accountID" direction="in">
           </arg>
           <arg type="s" name="password" direction="in">
           </arg>
           <arg type="s" name="deviceId" direction="in">
           </arg>
           <arg type="b" name="success" direction="out">
               <tp:docstring>
                   True if the operation was performed successfully.
               </tp:docstring>
           </arg>
       </method>

       <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.In1" 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="lookupName" tp:name-for-bindings="lookupName">
           <tp:docstring>
               Performs name lookup with RingNS protocol 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 RingNS server.
           </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 with RingNS protocol 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 RingNS server.
           </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="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 RingNS protocol for the specified account.
           </tp:docstring>
           <arg type="s" name="accountID" direction="in">
           </arg>
           <arg type="s" name="password" direction="in">
             <tp:docstring>
                 Ring account main password.
             </tp:docstring>
           </arg>
           <arg type="s" name="name" direction="in">
               <tp:docstring>
                   Name to register. Must be lower-case ASCII, digits or "-" or "_".
               </tp:docstring>
           </arg>
           <arg type="b" name="success" direction="out">
               <tp:docstring>
                   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: wrong password.</li>
                      <li>INVALID_NAME = 2    registration failed: invalid name.</li>
                      <li>ALREADY_TAKEN = 3   registration failed: name is already taken.</li>
                      <li>NETWORK_ERROR = 4   registration failed: network or server error.</li>
                  </ul>
               </tp:docstring>
           </arg>
           <arg type="s" name="name">
               <tp:docstring>
                   The name that was attempted to register.
               </tp:docstring>
           </arg>
       </signal>

       <method name="testAccountICEInitialization" tp:name-for-bindings="testAccountICEInitialization">
           <tp:docstring>
               Test initializing an ICE transport with the current account configuration.
           </tp:docstring>
           <arg type="s" name="accountID" direction="in">
           </arg>
           <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="MapStringString"/>
           <arg type="a{ss}" name="result" direction="out" tp:type="String_String_Map">
               <tp:docstring>
                   A string map.
                   Available attributes:
                   <ul>
                       <li>STATUS: 0 for success, non-0 for error</li>
                       <li>MESSAGE: message explaining the status</li>
                   </ul>
               </tp:docstring>
           </arg>
       </method>

       <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="importAccounts" tp:name-for-bindings="importAccounts">
            <tp:docstring>
              Import previously exported accounts
            </tp:docstring>
           <arg type="s" name="path" direction="in">
               <tp:docstring>
                    Path of the file to import
               </tp:docstring>
           </arg>
           <arg type="s" name="password" direction="in">
               <tp:docstring>
                    Decryption password
               </tp:docstring>
           </arg>
           <arg type="i" direction="out">
               <tp:docstring>
                    <p>Return code, 0 for success.</p>
               </tp:docstring>
           </arg>
        </method>

        <method name="exportAccounts" tp:name-for-bindings="exportAccounts">
            <tp:docstring>
              Export account configuration to an encrypted file.
            </tp:docstring>
           <annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="VectorString"/>
           <arg type="as" name="accountIDs" direction="in">
               <tp:docstring>
                   A list of account IDs
               </tp:docstring>
           </arg>
           <arg type="s" name="filepath" direction="in">
               <tp:docstring>
                    Where to export the account
               </tp:docstring>
           </arg>
           <arg type="s" name="password" direction="in">
               <tp:docstring>
                    File encryption password
               </tp:docstring>
           </arg>
           <arg type="i" direction="out">
               <tp:docstring>
                    <p>Return code, 0 for success.</p>
               </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="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="getMessageStatus" tp:name-for-bindings="getMessageStatus">
          <arg type="t" name="id" direction="in"/>
          <arg type="i" name="status" direction="out">
             <tp:docstring>
               The message status.
                <ul>
                    <li>UNKNOWN = 0    unknown message or message status</li>
                    <li>SENDING = 1    message is being sent or waiting for peer confirmation.</li>
                    <li>SENT = 2      message have been received from the other end.</li>
                    <li>READ = 3       message have been read by the peer.</li>
                    <li>FAILURE = 4    the message coudn't be delivered.</li>
                </ul>
             </tp:docstring>
          </arg>
       </method>

       <signal name="incomingAccountMessage" tp:name-for-bindings="incomingAccountMessage">
           <tp:added version="2.2.0"/>
           <tp:docstring>
               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="from"/>
           <annotation name="org.qtproject.QtDBus.QtTypeName.In2" value="MapStringString"/>
          <arg type="a{ss}" name="payloads"/>
       </signal>

       <signal name="accountMessageStatusChanged" tp:name-for-bindings="accountMessageStatusChanged">
           <tp:added version="2.3.0"/>
           <tp:docstring>
               Notify clients that a sent text message status have changed
           </tp:docstring>
           <arg type="s" name="accountID"/>
           <arg type="t" name="id"/>
           <arg type="s" name="to"/>
           <arg type="i" name="status">
              <tp:docstring>The new status of the message, see getMessageStatus for possible values.</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>

       <!--      ///////////////////////               -->

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

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

       <!--    General Settings Panel         -->

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

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

       <!-- Hook configuration -->
       <method name="getHookSettings" tp:name-for-bindings="getHookSettings">
           <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="MapStringString"/>
           <arg type="a{ss}" name="settings" direction="out">
           </arg>
       </method>

       <method name="setHookSettings" tp:name-for-bindings="setHookSettings">
           <annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="MapStringString"/>
           <arg type="a{ss}" name="settings" direction="in">
           </arg>
       </method>

       <signal name="accountsChanged" tp:name-for-bindings="accountsChanged">
       </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.In1" 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 Ring.
           </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="getTlsDefaultSettings" tp:name-for-bindings="getTlsDefaultSettings">
                   <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="MapStringString"/>
           <arg type="a{ss}" name="details" direction="out">
           </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="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="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"/>
           <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="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="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="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="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 succesfully 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"/>
           <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="MapStringString"/>
           <arg type="s" name="accountID" direction="in">
           </arg>
           <arg type="a{ss}" name="details" direction="out" tp:type="String_String_Map">
               <tp:docstring>
                   A list of contact request details.
               </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="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>
       </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 IDs.
             </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="getShortcuts" tp:name-for-bindings="getShortcuts">
                   <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="MapStringString"/>
           <arg type="a{ss}" name="shortcutsMap" direction="out">
           </arg>
       </method>

       <method name="setShortcuts" tp:name-for-bindings="setShortcuts">
                   <annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="MapStringString"/>
           <arg type="a{ss}" name="shortcutsMap" direction="in">
           </arg>
       </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>


   </interface>
</node>
