summaryrefslogtreecommitdiff
path: root/spec/Call1_Stream_Interface_Media.xml
diff options
context:
space:
mode:
Diffstat (limited to 'spec/Call1_Stream_Interface_Media.xml')
-rw-r--r--spec/Call1_Stream_Interface_Media.xml774
1 files changed, 774 insertions, 0 deletions
diff --git a/spec/Call1_Stream_Interface_Media.xml b/spec/Call1_Stream_Interface_Media.xml
new file mode 100644
index 00000000..d8500d73
--- /dev/null
+++ b/spec/Call1_Stream_Interface_Media.xml
@@ -0,0 +1,774 @@
+<?xml version="1.0" ?>
+<node name="/Call1_Stream_Interface_Media"
+ xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
+ <tp:copyright>Copyright © 2009-2010 Collabora Ltd.</tp:copyright>
+ <tp:copyright>Copyright © 2009-2010 Nokia Corporation</tp:copyright>
+ <tp:license xmlns="http://www.w3.org/1999/xhtml">
+ <p>This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.</p>
+
+ <p>This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.</p>
+
+ <p>You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301, USA.</p>
+ </tp:license>
+
+ <interface name="im.telepathy1.Call1.Stream.Interface.Media">
+ <tp:added version="0.25.2">(as stable API)</tp:added>
+ <tp:requires interface="im.telepathy1.Call1.Stream"/>
+
+ <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+ <p>This interface deals with how to connect a stream to an
+ endpoint. It contains all that is required to describe the
+ local endpoint, to succesfully establish a connection. While a
+ call is established, one may try to connect to multiple remote
+ endpoints at the same time. This is called forking in the SIP
+ jargon. Informations related to the connections are on the
+ <tp:dbus-ref
+ namespace="imt1.Call1.Stream">Endpoint</tp:dbus-ref>
+ objects. Once the call is established, there MUST be a single
+ endpoint left.</p>
+
+ <h4>ICE restarts</h4>
+
+ <p>If the CM wants to do an ICE restart, then the
+ <tp:member-ref>ICERestartPending</tp:member-ref> property is set,
+ and the <tp:member-ref>ICERestartRequested</tp:member-ref> signal is
+ emitted. The streaming implementation should then call
+ <tp:member-ref>SetCredentials</tp:member-ref> again. This will trigger
+ the actual ICE restart, and cause
+ <tp:member-ref>LocalCandidates</tp:member-ref> to be cleared.</p>
+
+ <p>For more information on ICE restarts see
+ <a href="http://tools.ietf.org/html/rfc5245#section-9.1.1.1">RFC 5245
+ section 9.1.1.1</a></p>
+ </tp:docstring>
+
+ <tp:enum type="u" name="Stream_Flow_State">
+ <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+ The type of <tp:member-ref>SendingState</tp:member-ref>
+ and <tp:member-ref>ReceivingState</tp:member-ref>.
+ </tp:docstring>
+ <tp:enumvalue suffix="Stopped" value="0">
+ <tp:docstring>
+ No data is flowing (or expected to be flowing) at this time.
+ </tp:docstring>
+ </tp:enumvalue>
+ <tp:enumvalue suffix="Pending_Start" value="1">
+ <tp:docstring>
+ The streaming implementation has been told to start or receiving,
+ but has not yet indicated that it is doing so.
+ </tp:docstring>
+ </tp:enumvalue>
+ <tp:enumvalue suffix="Pending_Stop" value="2">
+ <tp:docstring>
+ The streaming implementation has been told to stop sending or
+ receiving data, but it has not yet indicated that it has done so.
+ </tp:docstring>
+ </tp:enumvalue>
+ <tp:enumvalue suffix="Started" value="3">
+ <tp:docstring>
+ The streaming implementation is successfully sending or receiving
+ data, and everything is going swimmingly.
+ </tp:docstring>
+ </tp:enumvalue>
+ </tp:enum>
+
+ <property name="SendingState" tp:name-for-bindings="Sending_State"
+ type="u" tp:type="Stream_Flow_State" access="read">
+ <tp:docstring>
+ Indicates whether the streaming implementation is/should be sending
+ media for this stream. The streaming implementation should be able to
+ rely on reading this value and listening to
+ <tp:member-ref>SendingStateChanged</tp:member-ref> to
+ determine whether it should be sending media or not. It should not
+ need to listen to the Hold interfaces on the Call/Content.
+ Feedback on success should be given via
+ <tp:member-ref>CompleteSendingStateChange</tp:member-ref>. Failures
+ should be reported via <tp:member-ref>ReportSendingFailure</tp:member-ref>.
+ </tp:docstring>
+ </property>
+
+ <signal name="SendingStateChanged"
+ tp:name-for-bindings="Sending_State_Changed">
+ <tp:docstring>
+ Change notification for <tp:member-ref>SendingState</tp:member-ref>.
+ Note that this information is duplicated onto the Stream interface, so
+ that UIs can ignore the Media interface, and streaming implementations
+ can ignore everything but the media interface.
+ </tp:docstring>
+ <arg name="State" type="u" tp:type="Stream_Flow_State">
+ <tp:docstring>
+ The new value of SendingState.
+ </tp:docstring>
+ </arg>
+ </signal>
+
+ <method name="CompleteSendingStateChange"
+ tp:name-for-bindings="Complete_Sending_State_Change">
+ <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+ <p>Called in response to
+ <tp:member-ref>SendingStateChanged</tp:member-ref>(Pending_*, *) to
+ indicate that the media state has successfully progressed from
+ Pending_{Start, Stop, Pause} to the corresponding non-pending
+ state.</p>
+ </tp:docstring>
+ <arg name="State" type="u" tp:type="Stream_Flow_State" direction="in">
+ <tp:docstring>
+ The new (non-pending) value of SendingState.
+ </tp:docstring>
+ </arg>
+ <tp:possible-errors>
+ <tp:error name="im.telepathy1.Error.InvalidArgument">
+ <tp:docstring>
+ The state change made no sense, and was ignored by the CM. The
+ most likely cause for this is a race-condition between the CM
+ emitting a new state change and the streaming implementation
+ responding to the previous state change.
+ </tp:docstring>
+ </tp:error>
+ </tp:possible-errors>
+ </method>
+
+ <method name="ReportSendingFailure"
+ tp:name-for-bindings="Report_Sending_Failure">
+ <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+ Can be called at any point to indicate a failure in the outgoing
+ portion of the stream.
+ </tp:docstring>
+ <arg name="Reason" type="u" tp:type="Call_State_Change_Reason"
+ direction="in"/>
+ <arg name="Error" type="s" tp:type="DBus_Error_Name" direction="in"/>
+ <arg name="Message" type="s" direction="in"/>
+ </method>
+
+ <property name="ReceivingState" tp:name-for-bindings="Receiving_State"
+ type="u" tp:type="Stream_Flow_State" access="read">
+ <tp:docstring>
+ The counterpart of <tp:member-ref>SendingState</tp:member-ref>.
+ Indicates whether the streaming implementation is/should be expecting
+ to receive media for this stream. The CM should only tell the
+ streaming implementation to stop receiving if it has been told to put
+ the stream on hold, or the stream has been removed from the call.
+ </tp:docstring>
+ </property>
+
+ <signal name="ReceivingStateChanged"
+ tp:name-for-bindings="Receiving_State_Changed">
+ <tp:docstring>
+ Change notification for <tp:member-ref>ReceivingState</tp:member-ref>.
+ </tp:docstring>
+ <arg name="State" type="u" tp:type="Stream_Flow_State">
+ <tp:docstring>
+ The new value of ReceivingState.
+ </tp:docstring>
+ </arg>
+ </signal>
+
+ <method name="CompleteReceivingStateChange"
+ tp:name-for-bindings="Complete_Receiving_State_Change">
+ <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+ <p>Called in response to
+ <tp:member-ref>ReceivingStateChanged</tp:member-ref>(Pending_*, *) to
+ indicate that the media state has successfully progressed from
+ Pending_{Start, Stop, Pause} to the corresponding non-pending
+ state.</p>
+ </tp:docstring>
+ <arg name="State" type="u" tp:type="Stream_Flow_State" direction="in">
+ <tp:docstring>
+ The new (non-pending) value of ReceivingState.
+ </tp:docstring>
+ </arg>
+ <tp:possible-errors>
+ <tp:error name="im.telepathy1.Error.InvalidArgument">
+ <tp:docstring>
+ The state change made no sense, and was ignored by the CM. The
+ most likely cause for this is a race-condition between the CM
+ emitting a new state change and the streaming implementation
+ responding to the previous state change.
+ </tp:docstring>
+ </tp:error>
+ </tp:possible-errors>
+ </method>
+
+ <method name="ReportReceivingFailure"
+ tp:name-for-bindings="Report_Receiving_Failure">
+ <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+ Can be called at any point to indicate a failure in the incoming
+ portion of the stream.
+ </tp:docstring>
+ <arg name="Reason" type="u" tp:type="Call_State_Change_Reason"
+ direction="in"/>
+ <arg name="Error" type="s" tp:type="DBus_Error_Name" direction="in"/>
+ <arg name="Message" type="s" direction="in"/>
+ </method>
+
+ <method name="SetCredentials" tp:name-for-bindings="Set_Credentials">
+ <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+ <p>Used to set the username fragment and password for streams that have
+ global credentials.</p>
+ </tp:docstring>
+ <arg name="Username" type="s" direction="in">
+ <tp:docstring>
+ The username to use when authenticating on the stream.
+ </tp:docstring>
+ </arg>
+ <arg name="Password" type="s" direction="in">
+ <tp:docstring>
+ The password to use when authenticating on the stream.
+ </tp:docstring>
+ </arg>
+ </method>
+
+ <tp:enum type="u" name="Call_Stream_Candidate_Type">
+ <tp:docstring>
+ The network topology that an IP candidate represents. This can
+ sometimes be used to infer what kind of performance characteristics
+ (latency, bandwith, etc) can be expected of connections made to this
+ candidate.
+ </tp:docstring>
+ <tp:enumvalue suffix="None" value="0">
+ <tp:docstring>
+ This is not an IP candidate. This is a reserved value, and should
+ not be seen on the bus.
+ </tp:docstring>
+ </tp:enumvalue>
+ <tp:enumvalue suffix="Host" value="1">
+ <tp:docstring>
+ This candidate represents a direct connection to the host, as its
+ address is taken directly the host's IP stack.
+ </tp:docstring>
+ </tp:enumvalue>
+ <tp:enumvalue suffix="Server_Reflexive" value="2">
+ <tp:docstring>
+ This candidate probably represents a connection to the host through
+ a NAT device, as its address was discovered by sending a binding
+ request to a STUN server or similar.
+ </tp:docstring>
+ </tp:enumvalue>
+ <tp:enumvalue suffix="Peer_Reflexive" value="3">
+ <tp:docstring>
+ This candidate probably represents a good route between the host and
+ its peer, as its address was discovered by sending a STUN binding
+ request to one of the candidates advertised by the peer.
+ </tp:docstring>
+ </tp:enumvalue>
+ <tp:enumvalue suffix="Relay" value="4">
+ <tp:docstring>
+ This candidate represents the address of a relay server (usually
+ somewhere on the public internet). This candidate is the most likely
+ to work, but all media will go via a relay server, so latency is
+ likely to be higher than other types of candidate.
+ </tp:docstring>
+ </tp:enumvalue>
+ <tp:enumvalue suffix="Multicast" value="5">
+ <tp:docstring>
+ This candidate represents a Multicast group. This value should only
+ appear if the Stream's <tp:member-ref>Transport</tp:member-ref> is
+ set to Multicast.
+ </tp:docstring>
+ </tp:enumvalue>
+ </tp:enum>
+
+ <tp:enum name="Media_Stream_Base_Proto" type="u">
+ <tp:enumvalue suffix="UDP" value="0">
+ <tp:docstring>UDP (User Datagram Protocol)</tp:docstring>
+ </tp:enumvalue>
+ <tp:enumvalue suffix="TCP" value="1">
+ <tp:docstring>TCP (Transmission Control Protocol)</tp:docstring>
+ </tp:enumvalue>
+ </tp:enum>
+
+ <tp:mapping name="Candidate_Info">
+ <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+ <p>Extra information about the candidate. Allowed and mandatory keys
+ depend on the transport protocol used. The following keys are commenly
+ used:</p>
+
+ <dl>
+ <dt><code>type</code> - u</dt>
+ <dd>The type of candidate
+ (<tp:type>Call_Stream_Candidate_Type</tp:type>)</dd>
+
+ <dt><code>foundation</code> - s</dt>
+ <dd>The foundation of this candidate</dd>
+
+ <dt><code>protocol</code> - u</dt>
+ <dd>Underlying protocol of the candidate
+ (<tp:type>Media_Stream_Base_Proto</tp:type>) </dd>
+
+ <dt><code>priority</code> - u</dt>
+ <dd>Priority of the candidate (should be a number between 0 and
+ 65535). Most ICE implementations will prefer the highest priority
+ candidate pair that manages to connect. For backwards
+ compatibility with non-ICE SIP clients, the lowest priority
+ candidate may be sent as a raw UDP fallback candidate.
+ It is recommended that a relay candidate is used as the lowest
+ priority candidate if possible. If both IPv4 and IPv6 raw udp
+ fallback candidates are available, they should be set to the
+ same priority and advertised to the CM at the same time. The CM
+ will decide which to advertise to the remote end.</dd>
+
+ <dt><code>base-ip</code> - s</dt>
+ <dd>The underlying Host address where media sent to this
+ (non-host-type) candidate will eventually arrive.</dd>
+
+ <dt><code>base-port</code> - u</dt>
+ <dd>The underlying Host port where media sent to this
+ (non-host-type) candidate will eventually arrive.</dd>
+
+ <dt><code>username</code> - s</dt>
+ <dd>Username of this candidate
+ (only if credentials are per candidate)</dd>
+
+ <dt><code>password</code> - s</dt>
+ <dd>Password of this candidate
+ (only if credentials are per candidate)</dd>
+
+ <dt><code>ttl</code> - u</dt>
+ <dd>The TTL mandated for RTP/RTCP packets sent to a multicast group
+ (only valid for Multicast Streams)</dd>
+ </dl>
+ </tp:docstring>
+ <tp:member name="Key" type="s">
+ <tp:docstring>One of the well-known keys documented here, or an
+ implementation-specific key.</tp:docstring>
+ </tp:member>
+ <tp:member name="Value" type="v">
+ <tp:docstring>The value corresponding to that key.</tp:docstring>
+ </tp:member>
+ </tp:mapping>
+
+ <tp:enum type="u" name="Stream_Component">
+ <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+ Media streams can use more than one UDP socket: one for RTP (data)
+ and one for RTCP (control). Most of the time, they are adjacent
+ to each other, but some protocols (xmpp) signal each port separately.
+ </tp:docstring>
+ <tp:enumvalue suffix="Unknown" value="0">
+ <tp:docstring>
+ The stream transport type is unknown or not applicable
+ (should not appear over dbus).
+ </tp:docstring>
+ </tp:enumvalue>
+ <tp:enumvalue suffix="Data" value="1">
+ <tp:docstring>
+ This is the high-traffic data socket, containing the audio/video
+ data for the stream.
+ </tp:docstring>
+ </tp:enumvalue>
+ <tp:enumvalue suffix="Control" value="2">
+ <tp:docstring>
+ This is the low-traffic control socket, usually containing feedback
+ about packet loss etc.
+ </tp:docstring>
+ </tp:enumvalue>
+ </tp:enum>
+
+ <tp:struct name="Candidate" array-name="Candidate_List">
+ <tp:docstring>A Stream Candidate.</tp:docstring>
+ <tp:member name="Component" type="u" tp:type="Stream_Component">
+ <tp:docstring>The component number.</tp:docstring>
+ </tp:member>
+ <tp:member name="IP" type="s">
+ <tp:docstring>The IP address to use.</tp:docstring>
+ </tp:member>
+ <tp:member name="Port" type="u">
+ <tp:docstring>The port number to use.</tp:docstring>
+ </tp:member>
+ <tp:member name="Info" type="a{sv}" tp:type="Candidate_Info">
+ <tp:docstring>Additional information about the candidate.</tp:docstring>
+ </tp:member>
+ </tp:struct>
+
+ <method name="AddCandidates" tp:name-for-bindings="Add_Candidates">
+ <tp:docstring>
+ Add candidates to the
+ <tp:member-ref>LocalCandidates</tp:member-ref> property and
+ signal them to the remote contact(s). Note that connection managers
+ MAY delay the sending of candidates until
+ <tp:member-ref>FinishInitialCandidates</tp:member-ref> is called.
+ </tp:docstring>
+ <arg name="Candidates" direction="in"
+ type="a(usua{sv})" tp:type="Candidate[]">
+ <tp:docstring>
+ The candidates to be added.
+ </tp:docstring>
+ </arg>
+ </method>
+
+ <method name="FinishInitialCandidates"
+ tp:name-for-bindings="Finish_Initial_Candidates">
+ <tp:docstring>
+ This indicates to the CM that the initial batch of candidates
+ has been added, and should now be processed/sent to the remote side.
+ <tp:rationale>
+ Protocols supporting Raw UDP SHOULD wait for FinishInitialCandidates,
+ and then set the lowest priority candidate as the Raw UDP candidate.
+ </tp:rationale>
+ </tp:docstring>
+
+ <tp:possible-errors>
+ <tp:error name="im.telepathy1.Error.NotAvailable">
+ <tp:docstring>
+ The minimal required candidates have not been set. For
+ example, for an RTP protocol, at least one candidate on the
+ component 1 (RTP) must have been set.
+ </tp:docstring>
+ </tp:error>
+ </tp:possible-errors>
+ </method>
+
+ <tp:enum type="u" name="Stream_Transport_Type">
+ <tp:changed version="0.21.2">WLM_8_5 was removed</tp:changed>
+ <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+ A transport that can be used for streaming.
+ </tp:docstring>
+ <tp:enumvalue suffix="Unknown" value="0">
+ <tp:docstring>
+ The stream transport type is unknown or not applicable
+ (for streams that do not have a configurable transport).
+ </tp:docstring>
+ </tp:enumvalue>
+ <tp:enumvalue suffix="Raw_UDP" value="1">
+ <tp:docstring>
+ Raw UDP, with or without STUN. All streaming clients are assumed to
+ support this transport, so there is no handler capability token for
+ it in the <tp:dbus-ref namespace="imt1.Channel.Type"
+ >Call1</tp:dbus-ref> interface.
+ [This corresponds to "none" or "stun" in the old Media.StreamHandler
+ interface.]
+ </tp:docstring>
+ </tp:enumvalue>
+ <tp:enumvalue suffix="ICE" value="2">
+ <tp:docstring>
+ Interactive Connectivity Establishment, as defined by RFC
+ 5245. Note that this value covers ICE-UDP only.
+ [This corresponds to "ice-udp" in the old
+ Media.StreamHandler interface.]
+ </tp:docstring>
+ </tp:enumvalue>
+ <tp:enumvalue suffix="GTalk_P2P" value="3">
+ <tp:docstring>
+ Google Talk peer-to-peer connectivity establishment, as implemented
+ by libjingle 0.3.
+ [This corresponds to "gtalk-p2p" in the old Media.StreamHandler
+ interface.]
+ </tp:docstring>
+ </tp:enumvalue>
+ <tp:enumvalue suffix="WLM_2009" value="4">
+ <tp:docstring>
+ The transport used by Windows Live Messenger 2009 or later, which
+ resembles ICE draft 19.
+ [This corresponds to "wlm-2009" in the old Media.StreamHandler
+ interface.]
+ </tp:docstring>
+ </tp:enumvalue>
+ <tp:enumvalue suffix="SHM" value="5">
+ <tp:added version="0.21.2"/>
+ <tp:docstring>
+ Shared memory transport, as implemented by the GStreamer
+ shmsrc and shmsink plugins.
+ </tp:docstring>
+ </tp:enumvalue>
+ <tp:enumvalue suffix="Multicast" value="6">
+ <tp:added version="0.21.5"/>
+ <tp:docstring>
+ Multicast transport.
+ </tp:docstring>
+ </tp:enumvalue>
+ </tp:enum>
+
+ <property name="Transport" tp:name-for-bindings="Transport"
+ type="u" tp:type="Stream_Transport_Type" access="read" tp:immutable="yes">
+ <tp:docstring>
+ The transport for this stream.
+ </tp:docstring>
+ </property>
+
+ <property name="LocalCandidates" tp:name-for-bindings="Local_Candidates"
+ type="a(usua{sv})" tp:type="Candidate[]" access="read">
+ <tp:docstring>
+ [FIXME]. Change notification is via the
+ <tp:member-ref>LocalCandidatesAdded</tp:member-ref> signal.
+ </tp:docstring>
+ </property>
+
+ <signal name="LocalCandidatesAdded"
+ tp:name-for-bindings="Local_Candidates_Added">
+ <tp:docstring>
+ Emitted when local candidates are added to the
+ <tp:member-ref>LocalCandidates</tp:member-ref> property.
+ </tp:docstring>
+ <arg name="Candidates" type="a(usua{sv})" tp:type="Candidate[]">
+ <tp:docstring>
+ Candidates that have been added.
+ </tp:docstring>
+ </arg>
+ </signal>
+
+ <tp:struct name="Stream_Credentials">
+ <tp:docstring>A username and password pair.</tp:docstring>
+
+ <tp:member name="Username" type="s">
+ <tp:docstring>The username.</tp:docstring>
+ </tp:member>
+
+ <tp:member name="Password" type="s">
+ <tp:docstring>The password.</tp:docstring>
+ </tp:member>
+ </tp:struct>
+
+ <property name="LocalCredentials" tp:name-for-bindings="Local_Credentials"
+ type="(ss)" tp:type="Stream_Credentials" access="read">
+ <tp:docstring>
+ The local credentials are sent to the remote site over the
+ signalling protocol. They are used in ICE to make sure that
+ the connectivity checks come from the right peer. Change
+ notification is via the
+ <tp:member-ref>LocalCredentialsChanged</tp:member-ref> signal.
+
+ This property will be a pair of empty strings if ICE has not yet been
+ started.
+ </tp:docstring>
+ </property>
+
+ <signal name="LocalCredentialsChanged"
+ tp:name-for-bindings="Local_Credentials_Changed">
+ <tp:changed version="0.21.2">renamed from LocalCredentailsSet</tp:changed>
+ <tp:docstring>
+ Emitted when the value of
+ <tp:member-ref>LocalCredentials</tp:member-ref> changes to a non-empty
+ value. This should only happen when the streaming implementation calls
+ <tp:member-ref>SetCredentials</tp:member-ref>, so this signal is
+ mostly useful for debugging.
+ </tp:docstring>
+ <arg name="Username" type="s" />
+ <arg name="Password" type="s" />
+ </signal>
+
+ <signal name="RelayInfoChanged"
+ tp:name-for-bindings="Relay_Info_Changed">
+ <tp:docstring>
+ Emitted when the value of
+ <tp:member-ref>RelayInfo</tp:member-ref> changes.
+ </tp:docstring>
+ <arg name="Relay_Info" type="aa{sv}" tp:type="String_Variant_Map[]" />
+ </signal>
+
+ <signal name="STUNServersChanged"
+ tp:name-for-bindings="STUN_Servers_Changed">
+ <tp:docstring>
+ Emitted when the value of
+ <tp:member-ref>STUNServers</tp:member-ref> changes.
+ </tp:docstring>
+ <arg name="Servers" type="a(su)" tp:type="Socket_Address_IP[]" />
+ </signal>
+
+ <property name="STUNServers" tp:name-for-bindings="STUN_Servers"
+ type="a(su)" tp:type="Socket_Address_IP[]" access="read">
+ <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+ <p>The IP addresses of possible STUN servers to use for NAT
+ traversal, as dotted-quad IPv4 address literals or RFC2373
+ IPv6 address literals. Change notification is via the
+ <tp:member-ref>STUNServersChanged</tp:member-ref>
+ signal. The IP addresses MUST NOT be given as DNS hostnames.</p>
+
+ <tp:rationale>
+ High-quality connection managers already need an asynchronous
+ DNS resolver, so they might as well resolve this name to an IP
+ to make life easier for streaming implementations.
+ </tp:rationale>
+ </tp:docstring>
+ </property>
+
+ <property name="RelayInfo" type="aa{sv}" access="read"
+ tp:type="String_Variant_Map[]" tp:name-for-bindings="Relay_Info">
+ <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+ <p>A list of mappings describing TURN or Google relay servers
+ available for the client to use in its candidate gathering, as
+ determined from the protocol. Well-known map keys are:</p>
+
+ <dl>
+ <dt><code>ip</code> - s</dt>
+ <dd>The IP address of the relay server as a dotted-quad IPv4
+ address literal or an RFC2373 IPv6 address literal. This MUST NOT
+ be a DNS hostname.
+
+ <tp:rationale>
+ High-quality connection managers already need an asynchronous
+ DNS resolver, so they might as well resolve this name to an IP
+ and make life easier for streaming implementations.
+ </tp:rationale>
+ </dd>
+
+ <dt><code>type</code> - s</dt>
+ <dd>
+ <p>Either <code>udp</code> for UDP (UDP MUST be assumed if this
+ key is omitted), <code>tcp</code> for TCP, or
+ <code>tls</code>.</p>
+
+ <p>The precise meaning of this key depends on the
+ <tp:member-ref>Transport</tp:member-ref> property: if
+ Transport is ICE, <code>tls</code> means
+ TLS over TCP as referenced by ICE draft 19, and if
+ Transport is GTalk_P2P, <code>tls</code> means
+ a fake SSL session over TCP as implemented by libjingle.</p>
+ </dd>
+
+ <dt><code>port</code> - q</dt>
+ <dd>The UDP or TCP port of the relay server as an ASCII unsigned
+ integer</dd>
+
+ <dt><code>unique-id</code> - s</dt>
+ <dd>A string identifying the relay server. If two RelayInfo entries
+ have the same unique-id, but different <code>type</code>s, there
+ is usually little point in connecting to both. Use
+ <code>priority</code> to determine which version to prefer in this
+ case. Can also be used by the streaming implementation to avoid
+ connecting to the same relay multiple times if relaying is
+ required for both audio and video.</dd>
+
+ <dt><code>priority</code> - u</dt>
+ <dd>A number determining which version of a server to prefer (if
+ multiple are present with the same <code>unique-id</code>,
+ the one with the highest priority should be used, or the streaming
+ implementation should use the one whose <code>type</code> has the
+ most desirable properties)</dd>
+
+ <dt><code>username</code> - s</dt>
+ <dd>The username to use</dd>
+
+ <dt><code>password</code> - s</dt>
+ <dd>The password to use</dd>
+
+ <dt><code>component</code> - u</dt>
+ <dd>The component number to use this relay server for, as an
+ ASCII unsigned integer; if not included, this relay server
+ may be used for any or all components.
+
+ <tp:rationale>
+ In ICE draft 6, as used by Google Talk, credentials are only
+ valid once, so each component needs relaying separately.
+ </tp:rationale>
+ </dd>
+ </dl>
+
+ <tp:rationale>
+ <p>An equivalent of the gtalk-p2p-relay-token property on
+ MediaSignalling channels is not included here. The connection
+ manager should be responsible for making the necessary HTTP
+ requests to turn the token into a username and password.</p>
+ </tp:rationale>
+
+ <p>The type of relay server that this represents depends on
+ the value of the <tp:member-ref>Transport</tp:member-ref>
+ property. If Transport is ICE, this is a TURN server;
+ if Transport is GTalk_P2P, this is a Google relay server;
+ otherwise, the meaning of RelayInfo is undefined.</p>
+
+ <p>If relaying is not possible for this stream, the list is
+ empty.</p>
+
+ <p>Change notification is given via the
+ <tp:member-ref>RelayInfoChanged</tp:member-ref> signal.</p>
+ </tp:docstring>
+ </property>
+
+ <signal name="ServerInfoRetrieved"
+ tp:name-for-bindings="Server_Info_Retrieved">
+ <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+ <p>Signals that the initial information about STUN and Relay servers
+ has been retrieved, i.e. the
+ <tp:member-ref>HasServerInfo</tp:member-ref> property is
+ now true.</p>
+ </tp:docstring>
+ </signal>
+
+ <property name="HasServerInfo" type="b"
+ tp:name-for-bindings="Has_Server_Info" access="read">
+ <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+ <p>True if all the initial information about STUN servers and Relay
+ servers has been retrieved. Change notification is via the
+ <tp:member-ref>ServerInfoRetrieved</tp:member-ref> signal.</p>
+
+ <tp:rationale>
+ Streaming implementations that can't cope with STUN and
+ relay servers being added later SHOULD wait for this
+ property to become true before proceeding.
+ </tp:rationale>
+ </tp:docstring>
+ </property>
+
+ <signal name="EndpointsChanged"
+ tp:name-for-bindings="Endpoints_Changed">
+ <tp:docstring>
+ Emitted when the <tp:member-ref>Endpoints</tp:member-ref> property
+ changes.
+ </tp:docstring>
+ <arg name="Endpoints_Added" type="ao">
+ <tp:docstring>
+ Endpoints that were added.
+ </tp:docstring>
+ </arg>
+ <arg name="Endpoints_Removed" type="ao">
+ <tp:docstring>
+ Endpoints that no longer exist.
+ </tp:docstring>
+ </arg>
+ </signal>
+
+ <property name="Endpoints" tp:name-for-bindings="Endpoints"
+ type="ao" access="read">
+ <tp:docstring>
+ <p>The list of <tp:dbus-ref namespace="imt1.Call1.Stream"
+ >Endpoint</tp:dbus-ref> objects that exist for this
+ stream.</p>
+
+ <p>Change notification is via the
+ <tp:member-ref>EndpointsChanged</tp:member-ref> signal.</p>
+ </tp:docstring>
+ </property>
+
+ <signal name="ICERestartRequested"
+ tp:name-for-bindings="ICE_Restart_Requested">
+ <tp:docstring>
+ Emitted when the remote side requests an ICE restart (e.g. third party
+ call control, when the remote endpoint changes). The streaming
+ implementation should call
+ <tp:member-ref>SetCredentials</tp:member-ref> again.
+ </tp:docstring>
+ </signal>
+
+ <property name="ICERestartPending"
+ tp:name-for-bindings="ICE_Restart_Pending" access="read" type="b">
+ <tp:docstring>
+ State recovery for <tp:member-ref>ICERestartRequested</tp:member-ref>.
+ Set when the signal is emitted, and unset when
+ <tp:member-ref>SetCredentials</tp:member-ref> is called.
+ Useful for debugging.
+ </tp:docstring>
+ </property>
+
+ <method name="Fail" tp:name-for-bindings="Fail">
+ <tp:docstring>
+ Signal an unrecoverable error for this stream, and remove it. If all
+ streams are removed from a content, then it will also be removed.
+ </tp:docstring>
+ <arg direction="in" name="Reason" type="(uuss)"
+ tp:type="Call_State_Reason">
+ <tp:docstring>
+ A structured reason for stream removal.
+ </tp:docstring>
+ </arg>
+ </method>
+ </interface>
+</node>
+<!-- vim:set sw=2 sts=2 et ft=xml: -->