<?xml version="1.0" encoding="UTF-8" ?>

<node name="/cx.ring.Ring.CallManager" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
    <interface name="cx.ring.Ring.CallManager">

        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
            <p>The CallManager interface is used to manage call and conference related actions.</p>
            <p>Since daemon supports multiple incoming/outgoing calls, any action involving a specific call must address the method using a unique callId.
            Daemon will generate a unique callId for outgoing and incoming calls.</p>
        </tp:docstring>
        <method name="placeCall" tp:name-for-bindings="placeCall">
            <tp:docstring>
              <p>This is the main method in order to place a new call. The call is registered with the daemon using this method.</p>
            </tp:docstring>
            <arg type="s" name="accountId" direction="in">
              <tp:docstring>
                The ID of the account with which you want to make a call. If the call is to be placed without any account by means of a SIP URI (i.e. sip:num@server), the "IP2IP_PROFILE" is passed as the accountId. For more details on accounts see the configuration manager interface.
              </tp:docstring>
            </arg>
            <arg type="s" name="to" direction="in">
              <tp:docstring>
                If bound to a VoIP account, then the argument is the phone number. In case of calls involving "IP2IP_PROFILE", a complete SIP URI must be specified.
              </tp:docstring>
            </arg>
            <arg type="s" name="callId" direction="out"/>
        </method>

        <method name="placeCallWithMedia" tp:name-for-bindings="placeCallWithMedia">
            <tp:added version="9.10.0"/>
            <tp:docstring>
              <p>Place a new call. This version allows passing the list of medias and their attributes.</p>
            </tp:docstring>
            <arg type="s" name="accountId" direction="in">
              <tp:docstring>
                The local account ID. Also supports SIP URI (i.e. sip:num@server) using the "IP2IP_PROFILE" as the account ID.
              </tp:docstring>
            </arg>
            <arg type="s" name="to" direction="in">
              <tp:docstring>
                For SIP accounts, the argument is the phone number. In case of calls involving "IP2IP_PROFILE", a complete SIP URI must be specified.
              </tp:docstring>
            </arg>
            <annotation name="org.qtproject.QtDBus.QtTypeName.In2" value="VectorMapStringString"/>
            <arg type="aa{ss}" name="mediaList" direction="in">
              <tp:docstring>
                A list of medias to offer in the call.
              </tp:docstring>
            </arg>
            <arg type="s" name="callId" direction="out"/>
        </method>

        <method name="requestMediaChange" tp:name-for-bindings="requestMediaChange">
            <tp:added version="11.0.0"/>
            <tp:docstring>
              <p>Request changes in the media of the specified call.</p>
            </tp:docstring>
            <arg type="s" name="accountId" direction="in" />
            <arg type="s" name="callId" direction="in">
              <tp:docstring>
                The ID of the call.
              </tp:docstring>
            </arg>
            <annotation name="org.qtproject.QtDBus.QtTypeName.In2" value="VectorMapStringString"/>
            <arg type="aa{ss}" name="mediaList" direction="in">
              <tp:docstring>
                A list of media attributes to apply.
              </tp:docstring>
            </arg>
            <arg type="b" name="requestMediaChangeSucceeded" direction="out"/>
        </method>

        <method name="refuse" tp:name-for-bindings="refuse">
            <tp:added version="11.0.0"/>
            <tp:docstring>
              Refuse an incoming call.
            </tp:docstring>
            <arg type="s" name="accountId" direction="in" />
            <arg type="s" name="callId" direction="in">
              <tp:docstring>
                The callId.
              </tp:docstring>
            </arg>
            <arg type="b" name="refuseSucceeded" direction="out"/>
        </method>

        <signal name="SmartInfo" tp:name-for-bindings="SmartInfo">
            <tp:docstring>
              Once enabled using the startSmartInfo method, this signal is emitted every refreshTimeMS
            </tp:docstring>
             <annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="MapStringString"/>
             <arg type="a{ss}" name="info" direction="out" />
       </signal>

        <method name="accept" tp:name-for-bindings="accept">
            <tp:added version="11.0.0"/>
            <tp:docstring>
              Answer an incoming call. Automatically puts the current call on HOLD.
            </tp:docstring>
            <arg type="s" name="accountId" direction="in" />
            <arg type="s" name="callId" direction="in">
              <tp:docstring>
                The callId.
              </tp:docstring>
            </arg>
            <arg type="b" name="acceptSucceeded" direction="out"/>
        </method>

        <method name="acceptWithMedia" tp:name-for-bindings="acceptWithMedia">
            <tp:added version="11.0.0"/>
            <tp:docstring>
              Answer an incoming call with the list of media. This version to control
              attributes for each media (accepted, muted, ...)
            </tp:docstring>
            <arg type="s" name="accountId" direction="in" />
            <arg type="s" name="callId" direction="in">
              <tp:docstring>
                The callId.
              </tp:docstring>
            </arg>
            <annotation name="org.qtproject.QtDBus.QtTypeName.In2" value="VectorMapStringString"/>
            <arg type="aa{ss}" name="mediaList" direction="in">
              <tp:docstring>
                The list of media.
              </tp:docstring>
            </arg>
            <arg type="b" name="acceptSucceeded" direction="out"/>
        </method>

        <method name="answerMediaChangeRequest" tp:name-for-bindings="answerMediaChangeRequest">
            <tp:added version="11.0.0"/>
            <tp:docstring>
              Answer to a media update request.
            </tp:docstring>
            <arg type="s" name="accountId" direction="in" />
            <arg type="s" name="callId" direction="in">
              <tp:docstring>
                The callId.
              </tp:docstring>
            </arg>
            <annotation name="org.qtproject.QtDBus.QtTypeName.In2" value="VectorMapStringString"/>
            <arg type="aa{ss}" name="mediaList" direction="in">
              <tp:docstring>
                The list of media. Shoudld be of the same size as the media list in
                the media update request. An empty media list means that the media
                update request was refused.
              </tp:docstring>
            </arg>
            <arg type="b" name="answerMediaChangeRequestSucceeded" direction="out"/>
        </method>

        <method name="hangUp" tp:name-for-bindings="hangUp">
            <tp:added version="11.0.0"/>
            <tp:docstring>
              Hangup a call in state "CURRENT" or "HOLD".
            </tp:docstring>
            <arg type="s" name="accountId" direction="in" />
            <arg type="s" name="callId" direction="in">
              <tp:docstring>
                The callId.
              </tp:docstring>
            </arg>
            <arg type="b" name="hangupSucceeded" direction="out"/>
        </method>

        <method name="hangUpConference" tp:name-for-bindings="hangUpConference">
            <tp:added version="11.0.0"/>
            <tp:docstring>
              Hangup a conference, and every call participating to the conference.
            </tp:docstring>
            <arg type="s" name="accountId" direction="in" />
            <arg type="s" name="confID" direction="in">
              <tp:docstring>
                The unique conference ID.
              </tp:docstring>
            </arg>
            <arg type="b" name="hangupSucceeded" direction="out"/>
        </method>

        <method name="hold" tp:name-for-bindings="hold">
            <tp:added version="11.0.0"/>
            <tp:docstring>
              Place a call on hold.
            </tp:docstring>
            <arg type="s" name="accountId" direction="in"/>
            <arg type="s" name="callId" direction="in">
              <tp:docstring>
                The callId.
              </tp:docstring>
            </arg>
            <arg type="b" name="holdSucceeded" direction="out"/>
        </method>

        <method name="unhold" tp:name-for-bindings="unhold">
            <tp:added version="11.0.0"/>
            <tp:docstring>
              Take a call off hold, and place this call in state CURRENT.
            </tp:docstring>
            <arg type="s" name="accountId" direction="in"/>
            <arg type="s" name="callId" direction="in">
              <tp:docstring>
                The callId.
              </tp:docstring>
            </arg>
            <arg type="b" name="unHoldSucceeded" direction="out"/>
        </method>

        <method name="muteLocalMedia" tp:name-for-bindings="muteLocalMedia">
            <tp:added version="11.0.0"/>
            <arg type="s" name="accountId" direction="in" />
            <arg type="s" name="callid" direction="in">
              <tp:docstring>
                The callid to mute
              </tp:docstring>
            </arg>
            <arg type="s" name="mediaType" direction="in">
              <tp:docstring>
                The type of media (AUDIO or VIDEO)
              </tp:docstring>
            </arg>
            <arg type="b" name="mute" direction="in">
                <tp:docstring>
                    True to mute audio capture, false to unmute.
                </tp:docstring>
            </arg>
            <arg type="b" name="res" direction="out">
                <tp:docstring>
                    True if mute succeed. False otherwise
                </tp:docstring>
            </arg>
        </method>

        <method name="transfer" tp:name-for-bindings="transfer">
            <tp:added version="11.0.0"/>
            <tp:docstring>
              Transfer a call to the given phone number.
            </tp:docstring>
            <arg type="s" name="accountId" direction="in" />
            <arg type="s" name="callId" direction="in">
              <tp:docstring>
                The callId.
              </tp:docstring>
            </arg>
            <arg type="s" name="to" direction="in">
              <tp:docstring>
                The phone number to which the call will be transferred.
              </tp:docstring>
            </arg>
            <arg type="b" name="transferSucceeded" direction="out"/>
        </method>

        <method name="attendedTransfer" tp:name-for-bindings="attendedTransfer">
            <tp:added version="11.0.0"/>
            <tp:docstring>
              Perform an attended transfer on two calls.
            </tp:docstring>
            <arg type="s" name="accountId" direction="in" />
            <arg type="s" name="transferID" direction="in">
              <tp:docstring>
                The callId of the call to be transferred.
              </tp:docstring>
            </arg>
            <arg type="s" name="targetID" direction="in">
              <tp:docstring>
                The callId of the target call.
              </tp:docstring>
            </arg>
            <arg type="b" name="transferSucceeded" direction="out"/>
        </method>

        <method name="playDTMF" tp:name-for-bindings="playDTMF">
            <tp:docstring>
              Dual-Tone multi-frequency. Tell the core to play dialtones. A SIP INFO message is sent to notify the server.
            </tp:docstring>
            <arg type="s" name="key" direction="in">
              <tp:docstring>
                Unicode character for pressed key.
              </tp:docstring>
            </arg>
        </method>

        <method name="startTone" tp:name-for-bindings="startTone">
            <tp:docstring>
              Start audio stream and play tone.
            </tp:docstring>
            <arg type="i" name="start" direction="in"/>
            <arg type="i" name="type" direction="in"/>
        </method>

        <method name="joinParticipant" tp:name-for-bindings="joinParticipant">
            <tp:added version="11.0.0"/>
            <tp:docstring>
              <p>Join two participants together to create a 3-way conference including the current client.</p>
              <tp:rationale>The signal <tp:member-ref>conferenceCreated</tp:member-ref> is emitted on success.</tp:rationale>
            </tp:docstring>
            <arg type="s" name="accountId" direction="in" />
            <arg type="s" name="sel_callId" direction="in"/>
            <arg type="s" name="account2Id" direction="in" />
            <arg type="s" name="drag_callId" direction="in"/>
            <arg type="b" name="joinSucceeded" direction="out"/>
        </method>

        <method name="createConfFromParticipantList" tp:name-for-bindings="createConfFromParticipantList">
            <tp:added version="11.0.0"/>
            <tp:docstring>
                <p>Create a conference from a list of participants</p>
            <tp:rationale>The signal <tp:member-ref>conferenceCreated</tp:member-ref> is emitted on success.</tp:rationale>
            </tp:docstring>
            <arg type="s" name="accountId" direction="in" />
            <arg type="as" name="participants" direction="in"/>
        </method>

        <method name="setConferenceLayout" tp:name-for-bindings="setConferenceLayout">
            <tp:added version="11.0.0"/>
            <tp:docstring>
                <p>Change displayed layout for a conference. We currently support 3 layouts:
                0. (default) = grid view
                1. One big with small previews
                2. One participant</p>
            </tp:docstring>
            <arg type="s" name="accountId" direction="in" />
            <arg type="s" name="confId" direction="in"/>
            <arg type="u" name="layout" direction="in"/>
        </method>

        <method name="setActiveParticipant" tp:name-for-bindings="setActiveParticipant">
            <tp:added version="11.0.0"/>
            <tp:docstring>
                <p>Depending the layout of the conference, someone can be shown bigger than the others.
                This methods is here to set which call is shown. Note if the active participant leave while
                shown, the layout will change to the default one (grid view).</p>
            </tp:docstring>
            <arg type="s" name="accountId" direction="in" />
            <arg type="s" name="confId" direction="in"/>
            <arg type="s" name="callId" direction="in"/>
        </method>

        <method name="setActiveStream" tp:name-for-bindings="setActiveStream">
            <tp:added version="13.1.0"/>
            <arg type="s" name="accountId" direction="in" />
            <arg type="s" name="confId" direction="in"/>
            <arg type="s" name="accountUri" direction="in"/>
            <arg type="s" name="deviceId" direction="in"/>
            <arg type="s" name="streamId" direction="in"/>
            <arg type="b" name="state" direction="in"/>
        </method>

        <method name="setModerator" tp:name-for-bindings="setModerator">
            <tp:added version="11.0.0"/>
            <arg type="s" name="accountId" direction="in" />
            <arg type="s" name="confId" direction="in"/>
            <arg type="s" name="peerId" direction="in"/>
            <arg type="b" name="state" direction="in"/>
        </method>

        <method name="muteParticipant" tp:name-for-bindings="muteParticipant">
            <tp:added version="11.0.0"/>
            <arg type="s" name="accountId" direction="in" />
            <arg type="s" name="confId" direction="in"/>
            <arg type="s" name="peerId" direction="in"/>
            <arg type="b" name="state" direction="in"/>
        </method>

        <method name="muteStream" tp:name-for-bindings="muteStream">
            <tp:added version="13.1.0"/>
            <arg type="s" name="accountId" direction="in" />
            <arg type="s" name="confId" direction="in"/>
            <arg type="s" name="accountUri" direction="in"/>
            <arg type="s" name="deviceId" direction="in"/>
            <arg type="s" name="streamId" direction="in"/>
            <arg type="b" name="state" direction="in"/>
        </method>

        <method name="isConferenceParticipant" tp:name-for-bindings="isConferenceParticipant">
            <tp:added version="11.0.0"/>
            <arg type="s" name="accountId" direction="in"/>
            <arg type="s" name="callId" direction="in"/>
            <arg type="b" name="isParticipant" direction="out"/>
        </method>

        <method name="raiseParticipantHand" tp:name-for-bindings="raiseParticipantHand">
            <tp:added version="11.0.0"/>
            <arg type="s" name="accountId" direction="in"/>
            <arg type="s" name="confId" direction="in"/>
            <arg type="s" name="peerId" direction="in"/>
            <arg type="b" name="state" direction="in"/>
        </method>

        <method name="raiseHand" tp:name-for-bindings="raiseHand">
            <tp:added version="13.1.0"/>
            <arg type="s" name="accountId" direction="in" />
            <arg type="s" name="confId" direction="in"/>
            <arg type="s" name="accountUri" direction="in"/>
            <arg type="s" name="deviceId" direction="in"/>
            <arg type="b" name="state" direction="in"/>
        </method>

        <method name="hangupParticipant" tp:name-for-bindings="hangupParticipant">
            <tp:added version="11.0.0"/>
            <arg type="s" name="accountId" direction="in" />
            <arg type="s" name="confId" direction="in"/>
            <arg type="s" name="peerId" direction="in"/>
            <arg type="s" name="deviceId" direction="in"/>
        </method>

        <method name="addParticipant" tp:name-for-bindings="addParticipant">
            <tp:added version="11.0.0"/>
            <tp:docstring>
              <p>Join a new particiant to an existing conference.</p>
              <tp:rationale>The signal <tp:member-ref>conferenceChanged</tp:member-ref> is emitted on success.</tp:rationale>
            </tp:docstring>
            <arg type="s" name="accountId" direction="in" />
            <arg type="s" name="callId" direction="in">
              <tp:docstring>
                The ID of the call to add to the conference
              </tp:docstring>
            </arg>
            <arg type="s" name="account2Id" direction="in" />
            <arg type="s" name="confID" direction="in">
              <tp:docstring>
                An existing conference ID
              </tp:docstring>
            </arg>
            <arg type="b" name="addSucceeded" direction="out"/>
        </method>

        <method name="addMainParticipant" tp:name-for-bindings="addMainParticipant">
            <tp:added version="11.0.0"/>
            <tp:docstring>
              <p>As the core can handle multiple calls and conferences, it may happen that the client's user leaves a conference to answer an incoming call or to start new calls. This method is used to reintroduce client's user into the conference.</p>
              <p>Its put the current call on HOLD or detaches client's user from the another conference.</p>
            </tp:docstring>
            <arg type="s" name="accountId" direction="in" />
            <arg type="s" name="confID" direction="in">
              <tp:docstring>
                An existing conference ID
              </tp:docstring>
            </arg>
            <arg type="b" name="addSucceeded" direction="out"/>
        </method>

        <method name="detachLocalParticipant" tp:name-for-bindings="detachLocalParticipant">
            <tp:added version="3.0.0"/>
            <tp:docstring>
                Detach local participant from the conference.
                Remote participants are placed in hold.
                The signal <tp:member-ref>conferenceChanged</tp:member-ref> is emitted.
            </tp:docstring>
            <arg type="b" name="detachSucceeded" direction="out"/>
        </method>

        <method name="detachParticipant" tp:name-for-bindings="detachParticipant">
            <tp:added version="11.0.0"/>
            <tp:docstring>
              Detach the given call from the conference. If only one participant is left, the conference is deleted and the signal <tp:member-ref>conferenceRemoved</tp:member-ref> is emitted.
            </tp:docstring>
            <arg type="s" name="accountId" direction="in" />
            <arg type="s" name="callId" direction="in">
              <tp:docstring>
                The call ID
              </tp:docstring>
            </arg>
            <arg type="b" name="detachSucceeded" direction="out"/>
        </method>

        <method name="joinConference" tp:name-for-bindings="joinConference">
            <tp:added version="11.0.0"/>
            <tp:docstring>
                Join two conferences together.
            </tp:docstring>
            <arg type="s" name="accountId" direction="in" />
            <arg type="s" name="sel_confID" direction="in"/>
            <arg type="s" name="account2Id" direction="in" />
            <arg type="s" name="drag_confID" direction="in"/>
            <arg type="b" name="joinSucceeded" direction="out"/>
        </method>

        <method name="getConferenceDetails" tp:name-for-bindings="getConferenceDetails">
            <tp:added version="11.0.0"/>
            <tp:docstring>
              Returns a hashtable containing conference details.
            </tp:docstring>
            <arg type="s" name="accountId" direction="in" />
            <arg type="s" name="confId" direction="in">
              <tp:docstring>
                The conference ID
              </tp:docstring>
            </arg>
            <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="MapStringString"/>
            <arg type="a{ss}" name="infos" direction="out">
              <tp:docstring>
                A map containing the ID of the conferences
                and their states:
                <ul>
                  <li>ACTIVE_ATTACHED</li>
                  <li>ACTIVE_DETACHED</li>
                  <li>HOLD</li>
                </ul>
              </tp:docstring>
            </arg>
        </method>

        <method name="getConferenceList" tp:name-for-bindings="getConferenceList">
            <tp:added version="11.0.0"/>
            <tp:docstring>
              Returns a list containing all active
              conferences.
              <tp:rationale>To update client status, one should
              use <tp:member-ref>getParticipantList</tp:member-ref>
              with provided conference IDs.</tp:rationale>
            </tp:docstring>
            <arg type="s" name="accountId" direction="in" />
            <arg type="as" name="list" direction="out">
              <tp:docstring>
                The list of conferences.
              </tp:docstring>
            </arg>
        </method>

        <method name="getConferenceId" tp:name-for-bindings="getConferenceId">
            <tp:added version="11.0.0"/>
            <tp:docstring>
                If this call participate to a conference, return the conference id.
                Return an empty string elsewhere.
            </tp:docstring>
            <arg type="s" name="accountId" direction="in" />
            <arg type="s" name="callId" direction="in">
              <tp:docstring>
                The call id.
              </tp:docstring>
            </arg>
            <arg type="s" name="confID" direction="out">
              <tp:docstring>
                A string containing the conference ID, or an empty string.
              </tp:docstring>
            </arg>
        </method>

        <method name="toggleRecording" tp:name-for-bindings="toggleRecording">
            <tp:added version="11.0.0"/>
            <tp:docstring>
              Toggle recording for a call.
            </tp:docstring>
            <arg type="s" name="accountId" direction="in" />
            <arg type="s" name="callId" direction="in">
              <tp:docstring>
                The ID of the call to start/stop recording.
              </tp:docstring>
            </arg>
            <arg type="b" name="isRecording" direction="out">
              <tp:docstring>
                Returns true is the call is being recorded. False otherwise.
              </tp:docstring>
            </arg>
        </method>

        <method name="startSmartInfo" tp:name-for-bindings="startSmartInfo">
            <tp:docstring>
              Start sending the signal smartInfo
            </tp:docstring>
            <arg type="u" name="refreshTimeMs" direction="in">
              <tp:docstring>
                Set the sending time (in milliseconds) of the signal.
              </tp:docstring>
            </arg>
        </method>

        <method name="stopSmartInfo" tp:name-for-bindings="stopSmartInfo">
            <tp:docstring>
              Stop sending the signal smartInfo
            </tp:docstring>
        </method>

        <method name="getIsRecording" tp:name-for-bindings="getIsRecording">
            <tp:added version="11.0.0"/>
            <tp:docstring>
              Tells whether or not a call is being recorded.
            </tp:docstring>
            <arg type="s" name="accountId" direction="in" />
            <arg type="s" name="callId" direction="in">
              <tp:docstring>
                The call ID.
              </tp:docstring>
            </arg>
            <arg type="b" name="isRecording" direction="out">
              <tp:docstring>
                Returns true is the call is being recorded. False otherwise.
              </tp:docstring>
            </arg>
        </method>

        <method name="recordPlaybackSeek" tp:name-for-bindings="recordPlaybackSeek">
            <tp:docstring>
              <p>Sets the playback position using a linear scale [0,100].</p>
            </tp:docstring>
            <arg type="d" name="value" direction="in"/>
        </method>

        <signal name="recordPlaybackFilepath" tp:name-for-bindings="recordPlaybackFilepath">
            <tp:docstring>
              Once after starting recording for the first time, this signal is emitted to
              provide the recorded file path to client application.
            </tp:docstring>
            <arg type="s" name="callId" />
            <arg type="s" name="filepath"/>
        </signal>

        <signal name="recordPlaybackStopped" tp:name-for-bindings="recordPlaybackStopped">
            <tp:docstring/>
            <arg type="s" name="filepath" />
        </signal>

        <signal name="updatePlaybackScale" tp:name-for-bindings="updatePlaybackScale">
            <tp:docstring/>
            <arg type="s" name="filepath" />
            <arg type="i" name="position" />
            <arg type="i" name="size" />
        </signal>

        <method name="getCallDetails" tp:name-for-bindings="getCallDetails">
            <tp:added version="11.0.0"/>
            <tp:docstring>
              Get all the details about a specific call.
            </tp:docstring>
            <arg type="s" name="accountId" direction="in" />
            <arg type="s" name="callId" direction="in">
              <tp:docstring>
                The call ID.
              </tp:docstring>
            </arg>
            <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="MapStringString"/>
            <arg type="a{ss}" name="infos" direction="out" tp:type="String_String_Map">
              <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
                <p>A map containing the call details: </p>
                <ul>
                  <li>ACCOUNTID</li>
                  <li>PEER_NUMBER</li>
                  <li>PEER_NAME</li>
                  <li>DISPLAY_NAME</li>
                  <li>CALL_STATE</li>
                  <li>CALL_TYPE</li>
                  <li>CONF_ID</li>
                </ul>
              </tp:docstring>
            </arg>
        </method>

        <method name="getCallList" tp:name-for-bindings="getCallList">
            <tp:added version="11.0.0"/>
            <tp:docstring>
              Get the list of active calls.
              <tp:rationale>To get the call details, iterate on the return value and call <tp:member-ref>getCallDetails</tp:member-ref> method.</tp:rationale>
            </tp:docstring>
            <arg type="s" name="accountId" direction="in"/>
            <arg type="as" name="list" direction="out">
              <tp:docstring>
                A list of call IDs.
              </tp:docstring>
            </arg>
        </method>

        <method name="switchInput" tp:name-for-bindings="switchInput">
            <tp:added version="11.0.0"/>
            <tp:docstring>
                Switch input for the specified call
            </tp:docstring>
            <arg type="s" name="accountId" direction="in"/>
            <arg type="s" name="callId" direction="in"/>
            <arg type="s" name="input" direction="in"/>
            <arg type="b" direction="out" />
        </method>

        <method name="switchSecondaryInput" tp:name-for-bindings="switchSecondaryInput">
            <tp:added version="11.0.0"/>
            <tp:docstring>
                Switch secondary input for the specified conference
            </tp:docstring>
            <arg type="s" name="accountId" direction="in" />
            <arg type="s" name="conferenceId" direction="in"/>
            <arg type="s" name="input" direction="in"/>
            <arg type="b" direction="out" />
        </method>

        <method name="sendTextMessage" tp:name-for-bindings="sendTextMessage">
            <tp:added version="11.0.0"/>
            <tp:docstring>
                Send a text message to the specified call
            </tp:docstring>
            <arg type="s" name="accountId" direction="in"/>
            <arg type="s" name="callId" direction="in"/>
            <annotation name="org.qtproject.QtDBus.QtTypeName.In2" value="MapStringString"/>
            <arg type="a{ss}" name="payloads" direction="in"/>
            <arg type="b" name="isMixed" direction="in"/>
        </method>


        <method name="getConferenceInfos" tp:name-for-bindings="getConferenceInfos">
            <tp:docstring>
                Retrieve conferences infos with the following format:
                Layout = {
                  {
                    "uri": "participant", "x":"0", "y":"0", "w": "0", "h": "0"
                  },
                  {
                      "uri": "participant1", "x":"0", "y":"0", "w": "0", "h": "0"
                  }
                    (...)
                }
            </tp:docstring>
            <tp:added version="11.0.0"/>
            <arg type="s" name="accountId" direction="in" />
            <arg type="s" name="confId" direction="in" />
            <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="VectorMapStringString"/>
            <arg type="aa{ss}" direction="out" />
        </method>

        <signal name="incomingCall" tp:name-for-bindings="incomingCall">
            <tp:docstring>
              <p>Notify an incoming call.</p>
              <p>The callId generated by the daemon must be stored by the clients in order to address other action for
                this call. This signal is emitted when we receive a call from a remote peer</p>
              <tp:rationale>The client must subscribe to this signal to handle incoming calls.</tp:rationale>
            </tp:docstring>
            <arg type="s" name="accountId">
              <tp:docstring>
                The account ID of the callee. Clients must notify the right account when receiving this signal.
              </tp:docstring>
            </arg>
            <arg type="s" name="callId">
              <tp:docstring>
                A new call ID.
              </tp:docstring>
            </arg>
            <arg type="s" name="from">
              <tp:docstring>
                The caller phone number.
              </tp:docstring>
            </arg>
        </signal>

        <signal name="incomingCallWithMedia" tp:name-for-bindings="incomingCallWithMedia">
            <tp:added version="9.10.0"/>
            <tp:docstring>
              <p>Notify an incoming call.</p>
              <p>This signal is emitted when a new call is received. The list of media
              included in the invite is reported. The client can control the media status
              of the answer through the media attributes when when accepting the call.</p>
              <tp:rationale>The client must subscribe to this signal to handle incoming calls.</tp:rationale>
            </tp:docstring>
            <arg type="s" name="accountId">
              <tp:docstring>
                The account ID of the callee.
              </tp:docstring>
            </arg>
            <arg type="s" name="callId">
              <tp:docstring>
                Call ID of the incoming call.
              </tp:docstring>
            </arg>
            <arg type="s" name="from">
              <tp:docstring>
                The caller phone number.
              </tp:docstring>
            </arg>
            <annotation name="org.qtproject.QtDBus.QtTypeName.In3" value="VectorMapStringString"/>
            <arg type="aa{ss}" name="mediaList">
              <tp:docstring>
                The list of media offered in the incoming call.
              </tp:docstring>
            </arg>
        </signal>

        <signal name="mediaChangeRequested" tp:name-for-bindings="mediaChangeRequested">
            <tp:added version="11.0.0"/>
            <tp:docstring>
              <p>Report an incoming media change request.</p>
              <p>This signal is emitted when a media change request is received from
              the peer. The list of media included in the request is reported. The client
              can control the attributes of the media to used in the answer when accepting
              the request.</p>
              <tp:rationale>The client must subscribe to this signal to handle the media
              change requests.
              </tp:rationale>
            </tp:docstring>
            <arg type="s" name="accountId">
              <tp:docstring>
                The account ID of the callee.
              </tp:docstring>
            </arg>
            <arg type="s" name="callId">
              <tp:docstring>
                Call ID of the incoming call.
              </tp:docstring>
            </arg>
            <annotation name="org.qtproject.QtDBus.QtTypeName.In2" value="VectorMapStringString"/>
            <arg type="aa{ss}" name="mediaList">
              <tp:docstring>
                The list of media offered in the incoming call.
              </tp:docstring>
            </arg>
        </signal>

        <signal name="incomingMessage" tp:name-for-bindings="incomingMessage">
            <tp:docstring>
                Notify clients that new messages have been received. The key is
                the mime type and the value the mime payload.
            </tp:docstring>
            <arg type="s" name="accountId" />
            <arg type="s" name="callId" />
            <arg type="s" name="from" />
            <annotation name="org.qtproject.QtDBus.QtTypeName.In3" value="MapStringString"/>
            <arg type="a{ss}" name="messages" />
        </signal>

        <signal name="callStateChanged" tp:name-for-bindings="callStateChanged">
            <tp:added version="11.0.0"/>
            <tp:docstring>
              <p>Notify of a change in a call state.</p>
              <p>The client must subscribe to this signal.</p>
            </tp:docstring>
            <arg type="s" name="accountId">
            </arg>
            <arg type="s" name="callId">
              <tp:docstring>
                The call ID.
              </tp:docstring>
            </arg>
            <arg type="s" name="state" >
              <tp:docstring>
                The acceptable states are:
                <ul>
                  <li>INCOMING: Initial state of incoming calls</li>
                  <li>CONNECTING: Peer found, contacting him</li>
                  <li>RINGING: Initial state of received outgoing call</li>
                  <li>CURRENT: The normal active state of an answered call</li>
                  <li>HUNGUP: Notify that the call has been hungup by peer</li>
                  <li>BUSY: Notify that we terminated an incoming call after timeout</li>
                  <li>PEER_BUSY: Notify that peer replied BUSY to this call</li>
                  <li>FAILURE: Error when processing a call</li>
                  <li>HOLD</li>
                  <li>UNHOLD</li>
                </ul>
              </tp:docstring>
            </arg>
            <arg type="i" name="code">
              <tp:docstring>
                The optional account-type specific message code. 0 if not set.
              </tp:docstring>
              <tp:added version="2.0.0" />
            </arg>
        </signal>

        <signal name="conferenceChanged" tp:name-for-bindings="conferenceChanged">
            <tp:added version="11.0.0"/>
            <tp:docstring>
              Notify of a change in the conferences state
            </tp:docstring>
            <arg type="s" name="accountId" />
            <arg type="s" name="confId">
              <tp:docstring>
                The conference ID.
              </tp:docstring>
            </arg>
            <arg type="s" name="state">
              <tp:docstring>
                The acceptable states are:
                <ul>
                  <li>ACTIVE_ATTACHED: user is
                  participating to this conference</li>
                  <li>ACTIVE_DETACHED: This situation can
                  occur if a call is received while
                  user is participating to a
                  conference. In this case, one can leave
                  the conference by answering the
                  call. Other participants may continue
                  conferencing normally.</li>
                  <li>HOLD: Each call in this conference
                  is on state HOLD</li>
                </ul>
              </tp:docstring>
            </arg>
        </signal>

        <method name="getParticipantList" tp:name-for-bindings="getParticipantList">
            <tp:added version="11.0.0"/>
            <tp:docstring>
              Get the call IDs of every participant to a given conference. The client should keep and update the list of participants.
            </tp:docstring>
            <arg type="s" name="accountId" direction="in" />
            <arg type="s" name="confID" direction="in">
              <tp:docstring>
                The conference ID.
              </tp:docstring>
            </arg>
            <arg type="as" name="list" direction="out">
              <tp:docstring>
                The list of the call IDs.
              </tp:docstring>
            </arg>
        </method>

        <signal name="conferenceCreated" tp:name-for-bindings="conferenceCreated">
            <tp:added version="11.0.0"/>
            <tp:docstring>
              Emitted when a new conference is created. Client is responsible for storing the confID and call <tp:member-ref>getParticipantList</tp:member-ref> to update the display.
            </tp:docstring>
            <arg type="s" name="accountId" />
            <arg type="s" name="confID">
              <tp:docstring>
                A new conference ID.
              </tp:docstring>
            </arg>
        </signal>

        <signal name="conferenceRemoved" tp:name-for-bindings="conferenceRemoved">
            <tp:added version="11.0.0"/>
            <tp:docstring>
              Emitted when a new conference is remove. Client should have kept a list of current participant in order to display modification.
            </tp:docstring>
            <arg type="s" name="accountId" />
            <arg type="s" name="confId">
              <tp:docstring>
                The conference ID.
              </tp:docstring>
            </arg>
        </signal>

        <method name="holdConference" tp:name-for-bindings="holdConference">
            <tp:added version="11.0.0"/>
            <tp:docstring>
              Hold every call which is participating in this conference.
            </tp:docstring>
            <arg type="s" name="accountId" direction="in"/>
            <arg type="s" name="confID" direction="in">
              <tp:docstring>
                The conference ID.
              </tp:docstring>
            </arg>
            <arg type="b" name="holdSucceeded" direction="out"/>
        </method>

        <method name="unholdConference" tp:name-for-bindings="unholdConference">
            <tp:added version="11.0.0"/>
            <tp:docstring>
              Hold off every call participating in this conference.
            </tp:docstring>
            <arg type="s" name="accountId" direction="in" />
            <arg type="s" name="confID" direction="in">
              <tp:docstring>
                The conference ID.
              </tp:docstring>
            </arg>
            <arg type="b" name="unholdSucceeded" direction="out"/>
        </method>

        <method name="startRecordedFilePlayback" tp:name-for-bindings="startRecordedFilePlayback">
            <tp:added version="0.9.14"/>
            <arg type="s" name="filepath" direction="in"/>
            <arg type="b" name="result" direction="out"/>
        </method>

        <method name="stopRecordedFilePlayback" tp:name-for-bindings="stopRecordedFilePlayback">
            <tp:added version="0.9.14"/>
            <tp:docstring/>
        </method>

        <signal name="voiceMailNotify" tp:name-for-bindings="voiceMailNotify">
            <tp:docstring>
              Notify the clients of the voicemail number for a specific account, if applicable.
            </tp:docstring>
            <arg type="s" name="accountId">
              <tp:docstring>
                The account ID.
              </tp:docstring>
            </arg>
            <arg type="i" name="newCount">
              <tp:docstring>
                The number of new messages.
              </tp:docstring>
            </arg>
            <arg type="i" name="oldCount">
              <tp:docstring>
                The number of old messages.
              </tp:docstring>
            </arg>
            <arg type="i" name="urgentCount">
              <tp:docstring>
                The number of urgent messages.
              </tp:docstring>
            </arg>
        </signal>

        <signal name="transferSucceeded" tp:name-for-bindings="transferSucceeded">
            <tp:docstring>
              <p>Transfer has been successfully
              processed. Client should remove transferred
              call from call list as it is no longer
              accessible in daemon (jamid).</p>
            </tp:docstring>
        </signal>

        <signal name="transferFailed" tp:name-for-bindings="transferFailed">
            <tp:docstring>
              <p>Transfer operation failed. Corresponding
              call is no longer accessible in
              daemon (jami).</p>
            </tp:docstring>
        </signal>

        <signal name="recordingStateChanged" tp:name-for-bindings="recordingStateChange">
           <tp:added version="1.3.0"/>
           <arg type="s" name="callId" />
           <arg type="b" name="recordingState"/>
        </signal>

        <signal name="onRtcpReportReceived" tp:name-for-bindings="onRtcpReportReceived">
            <tp:added version="1.3.0"/>
            <tp:docstring>
                <p>Signal sent adter a RTCP report has been received and computed.</p>
            </tp:docstring>
            <arg type="s" name="callId" />
            <annotation name="org.qtproject.QtDBus.QtTypeName.Out1" value="MapStringInt"/>
            <arg type="a{si}" name="report" direction="out" tp:type="String_Integer_Map">
              <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
                <p>A map containing RTCP stats: </p>
                <ul>
                    <li>PACKET_LOSS</li>
                    <li>CUMULATIVE_LOSS</li>
                    <li>ROUND_TRIP_DELAY</li>
                    <li>LATENCY</li>
                </ul>
            </tp:docstring>
            </arg>
        </signal>

        <signal name="peerHold" tp:name-for-bindings="peerHold">
            <tp:added version="2.0.0"/>
            <arg type="s" name="callId" />
            <arg type="b" name="peerHolding" />
        </signal>

        <signal name="audioMuted" tp:name-for-bindings="audioMuted">
            <tp:added version="2.1.0"/>
            <arg type="s" name="callId" />
            <arg type="b" name="audioMuted" />
        </signal>

        <signal name="videoMuted" tp:name-for-bindings="videoMuted">
            <tp:added version="2.1.0"/>
            <arg type="s" name="callId" />
            <arg type="b" name="videoMuted" />
        </signal>

        <signal name="onConferenceInfosUpdated" tp:name-for-bindings="onConferenceInfosUpdated">
            <tp:added version="9.5.0"/>
            <arg type="s" name="confId" />
            <annotation name="org.qtproject.QtDBus.QtTypeName.Out1" value="VectorMapStringString"/>
            <arg type="aa{ss}" name="infos" />
        </signal>

        <signal name="remoteRecordingChanged" tp:name-for-bindings="remoteRecordingChanged">
            <tp:added version="1.0.0"/>
            <arg type="s" name="callId" />
            <arg type="s" name="peerNumber" />
            <arg type="b" name="remoteRecordingState" />
        </signal>

        <signal name="mediaNegotiationStatus" tp:name-for-bindings="mediaNegotiationStatus">
            <tp:added version="10.1.0"/>
            <tp:docstring>
              <p>Report mediation negotiation status.</p>
            </tp:docstring>
            <arg type="s" name="callId" />
            <arg type="s" name="event" >
              <tp:docstring>
                The acceptable states are:
                <ul>
                  <li>NEGOTIATION_SUCCESS: Media negotiation succeeded</li>
                  <li>NEGOTIATION_FAIL: Media negotiation failed</li>
                </ul>
              </tp:docstring>
            </arg>
            <annotation name="org.qtproject.QtDBus.QtTypeName.Out2" value="VectorMapStringString"/>
            <arg type="aa{ss}" name="mediaList">
              <tp:docstring>
                The updated attribute list of the negotiated media.
              </tp:docstring>
            </arg>
        </signal>

        <method name="currentMediaList" tp:name-for-bindings="currentMediaList">
            <tp:added version="13.3.0"/>
            <tp:docstring>
              <p>Retrieve current medias for call.</p>
            </tp:docstring>
            <arg type="s" name="accountId" direction="in">
              <tp:docstring>
                The local account Id.
              </tp:docstring>
            </arg>
            <arg type="s" name="callId" direction="in">
              <tp:docstring>
                Call's id (or conference's id)
              </tp:docstring>
            </arg>
            <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="VectorMapStringString"/>
            <arg type="aa{ss}" name="mediaList" direction="out">
              <tp:docstring>
                List of active medias in the call.
              </tp:docstring>
            </arg>
        </method>

    </interface>
</node>
