mirror of https://github.com/moparisthebest/xeps
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
741 lines
27 KiB
741 lines
27 KiB
<?xml version='1.0' encoding='UTF-8'?> |
|
<!DOCTYPE xep SYSTEM 'xep.dtd' [ |
|
<!ENTITY % ents SYSTEM 'xep.ent'> |
|
%ents; |
|
]> |
|
<?xml-stylesheet type='text/xsl' href='xep.xsl'?> |
|
<xep> |
|
<header> |
|
<title>Delivering Conference Information to Jingle Participants (Coin)</title> |
|
<abstract>This specification defines an XMPP extension for tightly coupled |
|
conference calls. It allows users who participate in multiparty Jingle |
|
calls via a focus agent (mixer) to retrieve information and receive |
|
notifications about the state of the call and the other participants. |
|
This extension is also meant to provide a straightforward way of |
|
connecting SIP and XMPP clients to the same conference room. |
|
</abstract> |
|
&LEGALNOTICE; |
|
<number>0298</number> |
|
<status>Deferred</status> |
|
<type>Standards Track</type> |
|
<sig>Standards</sig> |
|
<approver>Council</approver> |
|
<dependencies> |
|
<spec>XEP-0167</spec> |
|
</dependencies> |
|
<supersedes /> |
|
<supersededby /> |
|
<shortname>coin</shortname> |
|
<discuss>jingle</discuss> |
|
<author> |
|
<firstname>Emil</firstname> |
|
<surname>Ivov</surname> |
|
<email>emcho@jitsi.org</email> |
|
<jid>emcho@jit.si</jid> |
|
</author> |
|
<author> |
|
<firstname>Enrico</firstname> |
|
<surname>Marocco</surname> |
|
<email>enrico.marocco@telecomitalia.it</email> |
|
<jid>enrico@tilab.com</jid> |
|
</author> |
|
<author> |
|
<firstname>Saúl Ibarra</firstname> |
|
<surname>Corretgé</surname> |
|
<email>saul@ag-projects.com</email> |
|
<jid>saul@ag-projects.com</jid> |
|
</author> |
|
<revision> |
|
<version>0.2</version> |
|
<date>2015-07-02</date> |
|
<initials>sic</initials> |
|
<remark><p>Correcting errors in grammar and examples; aligning closer to dependent specifications.</p></remark> |
|
</revision> |
|
<revision> |
|
<version>0.1</version> |
|
<date>2011-06-09</date> |
|
<initials>psa</initials> |
|
<remark><p>Initial published version.</p></remark> |
|
</revision> |
|
<revision> |
|
<version>0.0.1</version> |
|
<date>2011-06-09</date> |
|
<initials>ei/em</initials> |
|
<remark> |
|
<p>First draft.</p> |
|
</remark> |
|
</revision> |
|
</header> |
|
<section1 topic='Introduction' anchor='intro'> |
|
<p>&xep0166; defines a way for XMPP agents to establish and control |
|
one-to-one media sessions. It is possible for either participant in such a |
|
session to also establish additional conversations and then serve as a |
|
media mixer. This could be viewed as a classic conference call scenario |
|
and is also often referred to as a tightly coupled conference.</p> |
|
|
|
<p>Basic participation or hosting of tightly coupled conferences requires |
|
no specific protocol support. With the exception of the mixing agent, call |
|
members, however, all perceive the session as a regular one-to-one call. |
|
They have no way of obtaining additional information about how many and what |
|
other users are participating.</p> |
|
|
|
<p>The Coin extension (short for Conference Information) allows media |
|
mixers to deliver to participants additional information about the status |
|
of the call, and that of its members.</p> |
|
|
|
<p>A conference participant exchanges Coin IQs only with the agent they |
|
have established a session with. This means that it can also be used in |
|
cases where only a subset of the users on a call are using XMPP while others |
|
are connected via alternative mechanisms such as SIP conferencing as defined |
|
in &rfc4579;</p> |
|
</section1> |
|
<section1 topic='Terminology' anchor='terms'> |
|
<dl> |
|
<di> |
|
<dt>Mixer</dt> |
|
<dd>Throughout this document the term is used to depict an entity that is |
|
responsible for mixing and delivering to conference participants both |
|
signalling and media. Other specifications refer to mixers and focus |
|
agents as two distinct entities but we find this separation to be |
|
unnecessary in the current specification and view both as a single logical |
|
entity. This entity may be a person hosting the conference and doing the mixing |
|
or a dedicated entity to which participants connect in order to establish a conference. |
|
For the purposes of this specification, both scenarios are equivalent.</dd> |
|
</di> |
|
</dl> |
|
</section1> |
|
<section1 topic='Requirements' anchor='reqs'> |
|
<p>The extension defined herein is designed to meet the following |
|
requirements:</p> |
|
<ol> |
|
<li>Provide a means for mixer agents in tightly coupled |
|
conferences to advertise call and member state information to the call |
|
participants.</li> |
|
<li>Reuse the existing format and XML schema already |
|
defined in <cite>RFC 4575</cite>.</li> |
|
<li>Impose no requirements on agents joining the call other than those |
|
necessary to establish a regular one-to-one call.</li> |
|
<li>Allow straightforward interoperability with other conferencing |
|
mechanisms such as &rfc4579; or &xep0272;</li> |
|
</ol> |
|
</section1> |
|
<section1 topic='How It Works' anchor='howitworks'> |
|
<p>This section provides a friendly introduction to Coin.</p> |
|
<p>In essence Coin allows clients that establish Jingle calls to |
|
determine whether their peer is acting as a mixer or to announce themselves |
|
as such. This way non-mixer participants would know when they are |
|
participating in a conference call and would be able to notify the user |
|
accordingly.</p> |
|
|
|
|
|
<p>Once in a call, participants and mixers can use Coin to exchange |
|
&rfc4575; conference information indicating what participants |
|
are currently on the call and what their status is.</p> |
|
</section1> |
|
<section1 topic='Creating a conference call' anchor='call-create'> |
|
<p>When creating conference calls mixers SHOULD indicate the nature of the |
|
call as early as possible. This is necessary in order to allow other |
|
participating user agents to adapt their user interface in an appropriate |
|
way.</p> |
|
|
|
<code caption="A mixer sends session-initiate for a conference call"> |
|
<![CDATA[ |
|
<iq from='romeo@montague.lit/orchard' |
|
id='zid615d9' |
|
to='juliet@capulet.lit/balcony' |
|
type='set'> |
|
<jingle xmlns='urn:xmpp:jingle:1'> |
|
action='session-initiate' |
|
initiator='romeo@montague.lit/orchard' |
|
sid='a73sjjvkla37jfea'> |
|
<content creator='initiator' name='this-is-a-stub'> |
|
<description xmlns='urn:xmpp:jingle:apps:stub:0'/> |
|
<transport xmlns='urn:xmpp:jingle:transports:stub:0'/> |
|
</content> |
|
<conference-info xmlns='urn:xmpp:coin:1' isfocus='true'/> |
|
</jingle> |
|
</iq> |
|
]]></code> |
|
<p>Similarly mixers being dialed by new participants SHOULD indicate the |
|
nature of the call by including the <conference-info/> element into |
|
the Jingle session-accept message.</p> |
|
<p>Finally, when transforming an existing one-to-one session into a |
|
conference or vice-versa a mixer SHOULD send a Jingle session-info message |
|
with the appropriate <conference-info/> element. </p> |
|
<p>Note that presence of the <conference-info/> element is only |
|
determines whether the party sending it is currently acting as a mixer or |
|
not. If multiple peers in a call are independently acting as mixers they |
|
should all indicate their status accordingly.</p> |
|
</section1> |
|
<section1 topic='Delivering conference information' anchor='coin-delivery'> |
|
<p>Once a conference call has been established and advertised as such, a |
|
mixer MAY at any point send information describing the state of the call and |
|
its current participants.</p> |
|
|
|
<code caption="Mixer sends information about the current state of the call"> |
|
<![CDATA[ |
|
<iq from='romeo@montague.lit/orchard' |
|
id='zid615d9' |
|
to='juliet@capulet.lit/balcony' |
|
type='set'> |
|
<jingle xmlns='urn:xmpp:jingle:1' sid='a73sjjvkla37jfea'/> |
|
<conference-info xmlns="urn:ietf:params:xml:ns:conference-info" |
|
entity="xmpp:romeo@monague.lit/orchard" |
|
state="full" |
|
version="1"> |
|
|
|
<!-- CONFERENCE INFO --> |
|
<conference-description> |
|
<subject>Ending a relationship</subject> |
|
</conference-description> |
|
|
|
<!-- CONFERENCE STATE --> |
|
<conference-state> |
|
<user-count>3</user-count> |
|
</conference-state> |
|
|
|
<!-- USERS --> |
|
<users> |
|
<user entity="xmpp:romeo@montague.lit" state="full"> |
|
<display-text>Romeo</display-text> |
|
|
|
<!-- ENDPOINTS --> |
|
<endpoint entity="xmpp:romeo@montague.lit/orchard"> |
|
<display-text>Romeo's smartphone</display-text> |
|
<status>disconnected</status> |
|
<disconnection-info> |
|
<when>2011-01-31T20:00:00Z</when> |
|
<reason>poisoned</reason> |
|
</disconnection-info> |
|
|
|
<!-- MEDIA --> |
|
<media id="1"> |
|
<display-text>main audio</display-text> |
|
<type>audio</type> |
|
<src-id>432424</src-id> |
|
</media> |
|
</endpoint> |
|
</user> |
|
|
|
<user entity="xmpp:juliet@capulet.lit" state="full"> |
|
<display-text>Juliet</display-text> |
|
|
|
<!-- ENDPOINTS --> |
|
<endpoint entity="juliet@capulet.lit/balcony"> |
|
<display-text>Juliet's netbook</display-text> |
|
<status>connected</status> |
|
|
|
<!-- MEDIA --> |
|
<media id="1"> |
|
<type>audio</type> |
|
<src-id>2124</src-id> |
|
</media> |
|
</endpoint> |
|
</user> |
|
|
|
<!-- USER --> |
|
<user entity="sip:alice@example.com" state="full"> |
|
<display-text>Alice</display-text> |
|
|
|
<!-- ENDPOINTS --> |
|
<endpoint entity="sip:4kfk4j392jsu@example.com;grid=433kj4j3u"> |
|
<status>connected</status> |
|
|
|
<!-- MEDIA --> |
|
<media id="1"> |
|
<type>audio</type> |
|
<src-id>534232</src-id> |
|
</media> |
|
</endpoint> |
|
</user> |
|
</users> |
|
</conference-info> |
|
</iq> |
|
|
|
]]></code> |
|
|
|
<p>The IQ message containing the conference info document MAY also contain a jingle element with the |
|
session id attribute indicting the session to which the conference information refers to.</p> |
|
|
|
</section1> |
|
|
|
|
|
<section1 topic='Determining Support' anchor='support'> |
|
<p>If an entity supports Coin, it SHOULD advertise that fact by returning |
|
a feature of "urn:xmpp:coin:1" in response to a &xep0030; |
|
information request.</p> |
|
<example caption="Service Discovery Information Request"><![CDATA[ |
|
<iq from='kingclaudius@shakespeare.lit/castle' |
|
id='ku6e51v3' |
|
to='laertes@shakespeare.lit/castle' |
|
type='get'> |
|
<query xmlns='http://jabber.org/protocol/disco#info'/> |
|
</iq> |
|
]]></example> |
|
<example caption="Service Discovery Information Response"><![CDATA[ |
|
<iq from='laertes@shakespeare.lit/castle' |
|
id='ku6e51v3' |
|
to='kingclaudius@shakespeare.lit/castle' |
|
type='result'> |
|
<query xmlns='http://jabber.org/protocol/disco#info'> |
|
<feature var='urn:xmpp:coin:1'/> |
|
</query> |
|
</iq> |
|
]]></example> |
|
<p>In order for an application to determine whether an entity supports this |
|
protocol, where possible it SHOULD use the dynamic, presence-based profile |
|
of service discovery defined in &xep0115;. However, if an application has |
|
not received entity capabilities information from an entity, it SHOULD use |
|
explicit service discovery instead.</p> |
|
</section1> |
|
<section1 topic='Security Considerations' anchor='security'> |
|
<p>PENDING: <cite>RFC 4575</cite> mostly talks about authentication |
|
conference-info subscriptions but these are not part of this specification. |
|
The authors are hence currently unaware of any other Coin specific security |
|
considerations</p> |
|
</section1> |
|
<section1 topic='Open Issues' anchor='issues'> |
|
<p>This document provides a basic description of a simple way to support |
|
tightly coupled conference calls. It is in many respects still a stub and a |
|
number of open issues require the attention of the community:</p> |
|
<ol> |
|
<li>Need to define best practices for user agents to easily determine |
|
whether the request of user to establish a conference call should result |
|
in a Muji or a Coin conference.</li> |
|
</ol> |
|
</section1> |
|
<section1 topic='XML Schemas' anchor='schema'> |
|
<section2 topic='Advertising Conf Calls' anchor='schema-discover'> |
|
<code><![CDATA[ |
|
<?xml version='1.0' encoding='UTF-8'?> |
|
|
|
<xs:schema |
|
xmlns:xs='http://www.w3.org/2001/XMLSchema' |
|
targetNamespace='urn:xmpp:coin:1' |
|
xmlns='urn:xmpp:coin:1' |
|
elementFormDefault='qualified'> |
|
|
|
<xs:annotation> |
|
<xs:documentation> |
|
The protocol documented by this schema is defined in |
|
XEP-0298: http://www.xmpp.org/extensions/xep-0298.html |
|
</xs:documentation> |
|
</xs:annotation> |
|
|
|
<xs:element name="conference-info" type="empty"> |
|
<xs:complexType> |
|
<xs:attribute name='isfocus' type='xs:boolean' required='true'/> |
|
</xs:complexType> |
|
</xs:element> |
|
|
|
</xs:schema> |
|
]]></code> |
|
</section2> |
|
<section2 topic='Conference Info' anchor='schema-coin'> |
|
<code><![CDATA[ |
|
<?xml version="1.0" encoding="UTF-8" ?> |
|
<xs:schema |
|
targetNamespace="urn:ietf:params:xml:ns:conference-info" |
|
xmlns:tns="urn:ietf:params:xml:ns:conference-info" |
|
xmlns:xs="http://www.w3.org/2001/XMLSchema" |
|
xmlns="urn:ietf:params:xml:ns:conference-info" |
|
elementFormDefault="qualified" |
|
attributeFormDefault="unqualified"> |
|
|
|
<xs:annotation> |
|
<xs:documentation> |
|
The protocol documented by this schema is defined in |
|
RFC 4575: http://tools.ietf.org/html/rfc4575 and reused by |
|
XEP-0298 http://www.xmpp.org/extensions/xep-0298.html |
|
</xs:documentation> |
|
</xs:annotation> |
|
|
|
<!-- |
|
This imports the xml:language definition |
|
--> |
|
<xs:import namespace="http://www.w3.org/XML/1998/namespace" |
|
schemaLocation="http://www.w3.org/2001/03/xml.xsd"/> |
|
<!-- |
|
CONFERENCE ELEMENT |
|
--> |
|
<xs:element name="conference-info" type="conference-type"/> |
|
<!-- |
|
CONFERENCE TYPE |
|
--> |
|
<xs:complexType name="conference-type"> |
|
<xs:sequence> |
|
<xs:element name="conference-description" |
|
type="conference-description-type" minOccurs="0"/> |
|
<xs:element name="host-info" |
|
type="host-type" minOccurs="0"/> |
|
<xs:element name="conference-state" |
|
type="conference-state-type" minOccurs="0"/> |
|
<xs:element name="users" |
|
type="users-type" minOccurs="0"/> |
|
<xs:element name="sidebars-by-ref" |
|
type="uris-type" minOccurs="0"/> |
|
<xs:element name="sidebars-by-val" |
|
type="sidebars-by-val-type" minOccurs="0"/> |
|
<xs:any namespace="##other" processContents="lax" |
|
minOccurs="0" maxOccurs="unbounded"/> |
|
</xs:sequence> |
|
<xs:attribute name="entity" |
|
type="xs:anyURI" use="required"/> |
|
<xs:attribute name="state" |
|
type="state-type" use="optional" default="full"/> |
|
<xs:attribute name="version" |
|
type="xs:unsignedInt" use="optional"/> |
|
<xs:anyAttribute namespace="##other" processContents="lax"/> |
|
</xs:complexType> |
|
<!-- |
|
STATE TYPE |
|
--> |
|
<xs:simpleType name="state-type"> |
|
<xs:restriction base="xs:string"> |
|
<xs:enumeration value="full"/> |
|
<xs:enumeration value="partial"/> |
|
<xs:enumeration value="deleted"/> |
|
</xs:restriction> |
|
</xs:simpleType> |
|
<!-- |
|
CONFERENCE DESCRIPTION TYPE |
|
--> |
|
<xs:complexType name="conference-description-type"> |
|
<xs:sequence> |
|
<xs:element name="display-text" |
|
type="xs:string" minOccurs="0"/> |
|
<xs:element name="subject" |
|
type="xs:string" minOccurs="0"/> |
|
<xs:element name="free-text" |
|
type="xs:string" minOccurs="0"/> |
|
<xs:element name="keywords" |
|
type="keywords-type" minOccurs="0"/> |
|
<xs:element name="conf-uris" |
|
type="uris-type" minOccurs="0"/> |
|
<xs:element name="service-uris" |
|
type="uris-type" minOccurs="0"/> |
|
<xs:element name="maximum-user-count" |
|
type="xs:unsignedInt" minOccurs="0"/> |
|
<xs:element name="available-media" |
|
type="conference-media-type" minOccurs="0"/> |
|
<xs:any namespace="##other" processContents="lax" |
|
minOccurs="0" maxOccurs="unbounded"/> |
|
</xs:sequence> |
|
<xs:anyAttribute namespace="##other" processContents="lax"/> |
|
</xs:complexType> |
|
<!-- |
|
HOST TYPE |
|
--> |
|
<xs:complexType name="host-type"> |
|
<xs:sequence> |
|
<xs:element name="display-text" type="xs:string" |
|
minOccurs="0"/> |
|
<xs:element name="web-page" type="xs:anyURI" |
|
minOccurs="0"/> |
|
<xs:element name="uris" type="uris-type" |
|
minOccurs="0"/> |
|
<xs:any namespace="##other" processContents="lax" |
|
minOccurs="0" maxOccurs="unbounded"/> |
|
</xs:sequence> |
|
<xs:anyAttribute namespace="##other" processContents="lax"/> |
|
</xs:complexType> |
|
<!-- |
|
CONFERENCE STATE TYPE |
|
--> |
|
<xs:complexType name="conference-state-type"> |
|
<xs:sequence> |
|
<xs:element name="user-count" type="xs:unsignedInt" |
|
minOccurs="0"/> |
|
<xs:element name="active" type="xs:boolean" |
|
minOccurs="0"/> |
|
<xs:element name="locked" type="xs:boolean" |
|
minOccurs="0"/> |
|
<xs:any namespace="##other" processContents="lax" |
|
minOccurs="0" maxOccurs="unbounded"/> |
|
</xs:sequence> |
|
<xs:anyAttribute namespace="##other" processContents="lax"/> |
|
</xs:complexType> |
|
<!-- |
|
CONFERENCE MEDIA TYPE |
|
--> |
|
<xs:complexType name="conference-media-type"> |
|
<xs:sequence> |
|
<xs:element name="entry" type="conference-medium-type" |
|
maxOccurs="unbounded"/> |
|
</xs:sequence> |
|
<xs:anyAttribute namespace="##other" processContents="lax"/> |
|
</xs:complexType> |
|
<!-- |
|
CONFERENCE MEDIUM TYPE |
|
--> |
|
<xs:complexType name="conference-medium-type"> |
|
<xs:sequence> |
|
<xs:element name="display-text" type="xs:string" |
|
minOccurs="0"/> |
|
<xs:element name="type" type="xs:string"/> |
|
<xs:element name="status" type="media-status-type" |
|
minOccurs="0"/> |
|
<xs:any namespace="##other" processContents="lax" |
|
minOccurs="0" maxOccurs="unbounded"/> |
|
</xs:sequence> |
|
<xs:attribute name="label" type="xs:string" |
|
use="required"/> |
|
<xs:anyAttribute namespace="##other" processContents="lax"/> |
|
</xs:complexType> |
|
<!-- |
|
URIs TYPE |
|
--> |
|
<xs:complexType name="uris-type"> |
|
<xs:sequence> |
|
<xs:element name="entry" type="uri-type" |
|
maxOccurs="unbounded"/> |
|
</xs:sequence> |
|
<xs:attribute name="state" type="state-type" |
|
use="optional" default="full"/> |
|
<xs:anyAttribute namespace="##other" processContents="lax"/> |
|
</xs:complexType> |
|
<!-- |
|
URI TYPE |
|
--> |
|
<xs:complexType name="uri-type"> |
|
<xs:sequence> |
|
<xs:element name="uri" type="xs:anyURI"/> |
|
<xs:element name="display-text" type="xs:string" |
|
minOccurs="0"/> |
|
<xs:element name="purpose" type="xs:string" |
|
minOccurs="0"/> |
|
<xs:element name="modified" type="execution-type" |
|
minOccurs="0"/> |
|
<xs:any namespace="##other" processContents="lax" |
|
minOccurs="0" maxOccurs="unbounded"/> |
|
</xs:sequence> |
|
<xs:anyAttribute namespace="##other" processContents="lax"/> |
|
</xs:complexType> |
|
<!-- |
|
KEYWORDS TYPE |
|
--> |
|
<xs:simpleType name="keywords-type"> |
|
<xs:list itemType="xs:string"/> |
|
</xs:simpleType> |
|
<!-- |
|
USERS TYPE |
|
--> |
|
<xs:complexType name="users-type"> |
|
<xs:sequence> |
|
<xs:element name="user" type="user-type" |
|
minOccurs="0" maxOccurs="unbounded"/> |
|
<xs:any namespace="##other" processContents="lax" |
|
minOccurs="0" maxOccurs="unbounded"/> |
|
</xs:sequence> |
|
<xs:attribute name="state" type="state-type" |
|
use="optional" default="full"/> |
|
<xs:anyAttribute namespace="##other" processContents="lax"/> |
|
</xs:complexType> |
|
<!-- |
|
USER TYPE |
|
--> |
|
<xs:complexType name="user-type"> |
|
<xs:sequence> |
|
<xs:element name="display-text" type="xs:string" |
|
minOccurs="0"/> |
|
<xs:element name="associated-aors" type="uris-type" |
|
minOccurs="0"/> |
|
<xs:element name="roles" type="user-roles-type" |
|
minOccurs="0"/> |
|
<xs:element name="languages" type="user-languages-type" |
|
minOccurs="0"/> |
|
<xs:element name="cascaded-focus" type="xs:anyURI" |
|
minOccurs="0"/> |
|
<xs:element name="endpoint" type="endpoint-type" |
|
minOccurs="0" maxOccurs="unbounded"/> |
|
<xs:any namespace="##other" processContents="lax" |
|
minOccurs="0" maxOccurs="unbounded"/> |
|
</xs:sequence> |
|
<xs:attribute name="entity" type="xs:anyURI"/> |
|
<xs:attribute name="state" type="state-type" |
|
use="optional" default="full"/> |
|
<xs:anyAttribute namespace="##other" processContents="lax"/> |
|
</xs:complexType> |
|
<!-- |
|
USER ROLES TYPE |
|
--> |
|
<xs:complexType name="user-roles-type"> |
|
<xs:sequence> |
|
<xs:element name="entry" type="xs:string" |
|
maxOccurs="unbounded"/> |
|
</xs:sequence> |
|
<xs:anyAttribute namespace="##other" processContents="lax"/> |
|
</xs:complexType> |
|
<!-- |
|
USER LANGUAGES TYPE |
|
--> |
|
<xs:simpleType name="user-languages-type"> |
|
<xs:list itemType="xs:language"/> |
|
</xs:simpleType> |
|
<!-- |
|
ENDPOINT TYPE |
|
--> |
|
<xs:complexType name="endpoint-type"> |
|
<xs:sequence> |
|
<xs:element name="display-text" type="xs:string" |
|
minOccurs="0"/> |
|
<xs:element name="referred" type="execution-type" |
|
minOccurs="0"/> |
|
<xs:element name="status" type="endpoint-status-type" |
|
minOccurs="0"/> |
|
<xs:element name="joining-method" type="joining-type" |
|
minOccurs="0"/> |
|
<xs:element name="joining-info" |
|
type="execution-type" |
|
minOccurs="0"/> |
|
<xs:element name="disconnection-method" |
|
type="disconnection-type" |
|
minOccurs="0"/> |
|
<xs:element name="disconnection-info" |
|
type="execution-type" |
|
minOccurs="0"/> |
|
<xs:element name="media" type="media-type" |
|
minOccurs="0" maxOccurs="unbounded"/> |
|
<xs:element name="call-info" type="call-type" |
|
minOccurs="0"/> |
|
<xs:any namespace="##other" processContents="lax" |
|
minOccurs="0" maxOccurs="unbounded"/> |
|
</xs:sequence> |
|
<xs:attribute name="entity" type="xs:string"/> |
|
<xs:attribute name="state" type="state-type" |
|
use="optional" default="full"/> |
|
<xs:anyAttribute namespace="##other" processContents="lax"/> |
|
</xs:complexType> |
|
<!-- |
|
ENDPOINT STATUS TYPE |
|
--> |
|
<xs:simpleType name="endpoint-status-type"> |
|
<xs:restriction base="xs:string"> |
|
<xs:enumeration value="pending"/> |
|
<xs:enumeration value="dialing-out"/> |
|
<xs:enumeration value="dialing-in"/> |
|
<xs:enumeration value="alerting"/> |
|
<xs:enumeration value="on-hold"/> |
|
<xs:enumeration value="connected"/> |
|
<xs:enumeration value="muted-via-focus"/> |
|
<xs:enumeration value="disconnecting"/> |
|
<xs:enumeration value="disconnected"/> |
|
</xs:restriction> |
|
</xs:simpleType> |
|
<!-- |
|
JOINING TYPE |
|
--> |
|
<xs:simpleType name="joining-type"> |
|
<xs:restriction base="xs:string"> |
|
<xs:enumeration value="dialed-in"/> |
|
<xs:enumeration value="dialed-out"/> |
|
<xs:enumeration value="focus-owner"/> |
|
</xs:restriction> |
|
</xs:simpleType> |
|
<!-- |
|
DISCONNECTION TYPE |
|
--> |
|
<xs:simpleType name="disconnection-type"> |
|
<xs:restriction base="xs:string"> |
|
<xs:enumeration value="departed"/> |
|
<xs:enumeration value="booted"/> |
|
<xs:enumeration value="failed"/> |
|
<xs:enumeration value="busy"/> |
|
</xs:restriction> |
|
</xs:simpleType> |
|
<!-- |
|
EXECUTION TYPE |
|
--> |
|
<xs:complexType name="execution-type"> |
|
<xs:sequence> |
|
<xs:element name="when" type="xs:dateTime" |
|
minOccurs="0"/> |
|
<xs:element name="reason" type="xs:string" |
|
minOccurs="0"/> |
|
<xs:element name="by" type="xs:anyURI" |
|
minOccurs="0"/> |
|
</xs:sequence> |
|
<xs:anyAttribute namespace="##other" processContents="lax"/> |
|
</xs:complexType> |
|
<!-- |
|
CALL TYPE |
|
--> |
|
<xs:complexType name="call-type"> |
|
<xs:choice> |
|
<xs:element name="sip" type="sip-dialog-id-type"/> |
|
<xs:any namespace="##other" processContents="lax" |
|
minOccurs="0" maxOccurs="unbounded"/> |
|
</xs:choice> |
|
<xs:anyAttribute namespace="##other" processContents="lax"/> |
|
</xs:complexType> |
|
<!-- |
|
SIP DIALOG ID TYPE |
|
--> |
|
<xs:complexType name="sip-dialog-id-type"> |
|
<xs:sequence> |
|
<xs:element name="display-text" type="xs:string" |
|
minOccurs="0"/> |
|
<xs:element name="call-id" type="xs:string"/> |
|
<xs:element name="from-tag" type="xs:string"/> |
|
<xs:element name="to-tag" type="xs:string"/> |
|
<xs:any namespace="##other" processContents="lax" |
|
minOccurs="0" maxOccurs="unbounded"/> |
|
</xs:sequence> |
|
<xs:anyAttribute namespace="##other" processContents="lax"/> |
|
</xs:complexType> |
|
<!-- |
|
MEDIA TYPE |
|
--> |
|
<xs:complexType name="media-type"> |
|
<xs:sequence> |
|
<xs:element name="display-text" type="xs:string" |
|
minOccurs="0"/> |
|
<xs:element name="type" type="xs:string" |
|
minOccurs="0"/> |
|
<xs:element name="label" type="xs:string" |
|
minOccurs="0"/> |
|
<xs:element name="src-id" type="xs:string" |
|
minOccurs="0"/> |
|
<xs:element name="status" type="media-status-type" |
|
minOccurs="0"/> |
|
<xs:any namespace="##other" processContents="lax" |
|
minOccurs="0" maxOccurs="unbounded"/> |
|
</xs:sequence> |
|
<xs:attribute name="id" type="xs:string" |
|
use="required"/> |
|
<xs:anyAttribute namespace="##other" processContents="lax"/> |
|
</xs:complexType> |
|
<!-- |
|
MEDIA STATUS TYPE |
|
--> |
|
<xs:simpleType name="media-status-type"> |
|
<xs:restriction base="xs:string"> |
|
<xs:enumeration value="recvonly"/> |
|
<xs:enumeration value="sendonly"/> |
|
<xs:enumeration value="sendrecv"/> |
|
<xs:enumeration value="inactive"/> |
|
</xs:restriction> |
|
</xs:simpleType> |
|
<!-- |
|
SIDEBARS BY VAL TYPE |
|
--> |
|
<xs:complexType name="sidebars-by-val-type"> |
|
<xs:sequence> |
|
<xs:element name="entry" type="conference-type" |
|
minOccurs="0" maxOccurs="unbounded"/> |
|
</xs:sequence> |
|
<xs:attribute name="state" type="state-type" |
|
use="optional" default="full"/> |
|
<xs:anyAttribute namespace="##other" processContents="lax"/> |
|
</xs:complexType> |
|
</xs:schema> |
|
|
|
</xs:schema> |
|
]]></code> |
|
</section2> |
|
</section1> |
|
<section1 topic='Acknowledgements' anchor='acks'> |
|
<p>Jitsi's participation in this specification is funded by the NLnet |
|
Foundation.</p> |
|
</section1> |
|
</xep>
|
|
|