mirror of
https://github.com/moparisthebest/xeps
synced 2024-11-21 16:55:07 -05:00
4b3918acac
Ported original changes from https://github.com/emcho/coin
742 lines
27 KiB
XML
742 lines
27 KiB
XML
<?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>Experimental</status>
|
|
<type>Standards Track</type>
|
|
<sig>Standards</sig>
|
|
<approver>Council</approver>
|
|
<dependencies>
|
|
<spec>XEP-0167</spec>
|
|
</dependencies>
|
|
<supersedes />
|
|
<supersededby />
|
|
<shortname>coin</shortname>
|
|
<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>
|
|
<discuss>jingle</discuss>
|
|
<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>
|