No Description
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.

xep-0298.xml 27KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741
  1. <?xml version='1.0' encoding='UTF-8'?>
  2. <!DOCTYPE xep SYSTEM 'xep.dtd' [
  3. <!ENTITY % ents SYSTEM 'xep.ent'>
  4. %ents;
  5. ]>
  6. <?xml-stylesheet type='text/xsl' href='xep.xsl'?>
  7. <xep>
  8. <header>
  9. <title>Delivering Conference Information to Jingle Participants (Coin)</title>
  10. <abstract>This specification defines an XMPP extension for tightly coupled
  11. conference calls. It allows users who participate in multiparty Jingle
  12. calls via a focus agent (mixer) to retrieve information and receive
  13. notifications about the state of the call and the other participants.
  14. This extension is also meant to provide a straightforward way of
  15. connecting SIP and XMPP clients to the same conference room.
  16. </abstract>
  17. &LEGALNOTICE;
  18. <number>0298</number>
  19. <status>Deferred</status>
  20. <type>Standards Track</type>
  21. <sig>Standards</sig>
  22. <approver>Council</approver>
  23. <dependencies>
  24. <spec>XEP-0167</spec>
  25. </dependencies>
  26. <supersedes />
  27. <supersededby />
  28. <shortname>coin</shortname>
  29. <discuss>jingle</discuss>
  30. <author>
  31. <firstname>Emil</firstname>
  32. <surname>Ivov</surname>
  33. <email>emcho@jitsi.org</email>
  34. <jid>emcho@jit.si</jid>
  35. </author>
  36. <author>
  37. <firstname>Enrico</firstname>
  38. <surname>Marocco</surname>
  39. <email>enrico.marocco@telecomitalia.it</email>
  40. <jid>enrico@tilab.com</jid>
  41. </author>
  42. <author>
  43. <firstname>Saúl Ibarra</firstname>
  44. <surname>Corretgé</surname>
  45. <email>saul@ag-projects.com</email>
  46. <jid>saul@ag-projects.com</jid>
  47. </author>
  48. <revision>
  49. <version>0.2</version>
  50. <date>2015-07-02</date>
  51. <initials>sic</initials>
  52. <remark><p>Correcting errors in grammar and examples; aligning closer to dependent specifications.</p></remark>
  53. </revision>
  54. <revision>
  55. <version>0.1</version>
  56. <date>2011-06-09</date>
  57. <initials>psa</initials>
  58. <remark><p>Initial published version.</p></remark>
  59. </revision>
  60. <revision>
  61. <version>0.0.1</version>
  62. <date>2011-06-09</date>
  63. <initials>ei/em</initials>
  64. <remark>
  65. <p>First draft.</p>
  66. </remark>
  67. </revision>
  68. </header>
  69. <section1 topic='Introduction' anchor='intro'>
  70. <p>&xep0166; defines a way for XMPP agents to establish and control
  71. one-to-one media sessions. It is possible for either participant in such a
  72. session to also establish additional conversations and then serve as a
  73. media mixer. This could be viewed as a classic conference call scenario
  74. and is also often referred to as a tightly coupled conference.</p>
  75. <p>Basic participation or hosting of tightly coupled conferences requires
  76. no specific protocol support. With the exception of the mixing agent, call
  77. members, however, all perceive the session as a regular one-to-one call.
  78. They have no way of obtaining additional information about how many and what
  79. other users are participating.</p>
  80. <p>The Coin extension (short for Conference Information) allows media
  81. mixers to deliver to participants additional information about the status
  82. of the call, and that of its members.</p>
  83. <p>A conference participant exchanges Coin IQs only with the agent they
  84. have established a session with. This means that it can also be used in
  85. cases where only a subset of the users on a call are using XMPP while others
  86. are connected via alternative mechanisms such as SIP conferencing as defined
  87. in &rfc4579;</p>
  88. </section1>
  89. <section1 topic='Terminology' anchor='terms'>
  90. <dl>
  91. <di>
  92. <dt>Mixer</dt>
  93. <dd>Throughout this document the term is used to depict an entity that is
  94. responsible for mixing and delivering to conference participants both
  95. signalling and media. Other specifications refer to mixers and focus
  96. agents as two distinct entities but we find this separation to be
  97. unnecessary in the current specification and view both as a single logical
  98. entity. This entity may be a person hosting the conference and doing the mixing
  99. or a dedicated entity to which participants connect in order to establish a conference.
  100. For the purposes of this specification, both scenarios are equivalent.</dd>
  101. </di>
  102. </dl>
  103. </section1>
  104. <section1 topic='Requirements' anchor='reqs'>
  105. <p>The extension defined herein is designed to meet the following
  106. requirements:</p>
  107. <ol>
  108. <li>Provide a means for mixer agents in tightly coupled
  109. conferences to advertise call and member state information to the call
  110. participants.</li>
  111. <li>Reuse the existing format and XML schema already
  112. defined in <cite>RFC 4575</cite>.</li>
  113. <li>Impose no requirements on agents joining the call other than those
  114. necessary to establish a regular one-to-one call.</li>
  115. <li>Allow straightforward interoperability with other conferencing
  116. mechanisms such as &rfc4579; or &xep0272;</li>
  117. </ol>
  118. </section1>
  119. <section1 topic='How It Works' anchor='howitworks'>
  120. <p>This section provides a friendly introduction to Coin.</p>
  121. <p>In essence Coin allows clients that establish Jingle calls to
  122. determine whether their peer is acting as a mixer or to announce themselves
  123. as such. This way non-mixer participants would know when they are
  124. participating in a conference call and would be able to notify the user
  125. accordingly.</p>
  126. <p>Once in a call, participants and mixers can use Coin to exchange
  127. &rfc4575; conference information indicating what participants
  128. are currently on the call and what their status is.</p>
  129. </section1>
  130. <section1 topic='Creating a conference call' anchor='call-create'>
  131. <p>When creating conference calls mixers SHOULD indicate the nature of the
  132. call as early as possible. This is necessary in order to allow other
  133. participating user agents to adapt their user interface in an appropriate
  134. way.</p>
  135. <code caption="A mixer sends session-initiate for a conference call">
  136. <![CDATA[
  137. <iq from='romeo@montague.lit/orchard'
  138. id='zid615d9'
  139. to='juliet@capulet.lit/balcony'
  140. type='set'>
  141. <jingle xmlns='urn:xmpp:jingle:1'>
  142. action='session-initiate'
  143. initiator='romeo@montague.lit/orchard'
  144. sid='a73sjjvkla37jfea'>
  145. <content creator='initiator' name='this-is-a-stub'>
  146. <description xmlns='urn:xmpp:jingle:apps:stub:0'/>
  147. <transport xmlns='urn:xmpp:jingle:transports:stub:0'/>
  148. </content>
  149. <conference-info xmlns='urn:xmpp:coin:1' isfocus='true'/>
  150. </jingle>
  151. </iq>
  152. ]]></code>
  153. <p>Similarly mixers being dialed by new participants SHOULD indicate the
  154. nature of the call by including the &lt;conference-info/&gt; element into
  155. the Jingle session-accept message.</p>
  156. <p>Finally, when transforming an existing one-to-one session into a
  157. conference or vice-versa a mixer SHOULD send a Jingle session-info message
  158. with the appropriate &lt;conference-info/&gt; element. </p>
  159. <p>Note that presence of the &lt;conference-info/&gt; element is only
  160. determines whether the party sending it is currently acting as a mixer or
  161. not. If multiple peers in a call are independently acting as mixers they
  162. should all indicate their status accordingly.</p>
  163. </section1>
  164. <section1 topic='Delivering conference information' anchor='coin-delivery'>
  165. <p>Once a conference call has been established and advertised as such, a
  166. mixer MAY at any point send information describing the state of the call and
  167. its current participants.</p>
  168. <code caption="Mixer sends information about the current state of the call">
  169. <![CDATA[
  170. <iq from='romeo@montague.lit/orchard'
  171. id='zid615d9'
  172. to='juliet@capulet.lit/balcony'
  173. type='set'>
  174. <jingle xmlns='urn:xmpp:jingle:1' sid='a73sjjvkla37jfea'/>
  175. <conference-info xmlns="urn:ietf:params:xml:ns:conference-info"
  176. entity="xmpp:romeo@monague.lit/orchard"
  177. state="full"
  178. version="1">
  179. <!-- CONFERENCE INFO -->
  180. <conference-description>
  181. <subject>Ending a relationship</subject>
  182. </conference-description>
  183. <!-- CONFERENCE STATE -->
  184. <conference-state>
  185. <user-count>3</user-count>
  186. </conference-state>
  187. <!-- USERS -->
  188. <users>
  189. <user entity="xmpp:romeo@montague.lit" state="full">
  190. <display-text>Romeo</display-text>
  191. <!-- ENDPOINTS -->
  192. <endpoint entity="xmpp:romeo@montague.lit/orchard">
  193. <display-text>Romeo's smartphone</display-text>
  194. <status>disconnected</status>
  195. <disconnection-info>
  196. <when>2011-01-31T20:00:00Z</when>
  197. <reason>poisoned</reason>
  198. </disconnection-info>
  199. <!-- MEDIA -->
  200. <media id="1">
  201. <display-text>main audio</display-text>
  202. <type>audio</type>
  203. <src-id>432424</src-id>
  204. </media>
  205. </endpoint>
  206. </user>
  207. <user entity="xmpp:juliet@capulet.lit" state="full">
  208. <display-text>Juliet</display-text>
  209. <!-- ENDPOINTS -->
  210. <endpoint entity="juliet@capulet.lit/balcony">
  211. <display-text>Juliet's netbook</display-text>
  212. <status>connected</status>
  213. <!-- MEDIA -->
  214. <media id="1">
  215. <type>audio</type>
  216. <src-id>2124</src-id>
  217. </media>
  218. </endpoint>
  219. </user>
  220. <!-- USER -->
  221. <user entity="sip:alice@example.com" state="full">
  222. <display-text>Alice</display-text>
  223. <!-- ENDPOINTS -->
  224. <endpoint entity="sip:4kfk4j392jsu@example.com;grid=433kj4j3u">
  225. <status>connected</status>
  226. <!-- MEDIA -->
  227. <media id="1">
  228. <type>audio</type>
  229. <src-id>534232</src-id>
  230. </media>
  231. </endpoint>
  232. </user>
  233. </users>
  234. </conference-info>
  235. </iq>
  236. ]]></code>
  237. <p>The IQ message containing the conference info document MAY also contain a jingle element with the
  238. session id attribute indicting the session to which the conference information refers to.</p>
  239. </section1>
  240. <section1 topic='Determining Support' anchor='support'>
  241. <p>If an entity supports Coin, it SHOULD advertise that fact by returning
  242. a feature of "urn:xmpp:coin:1" in response to a &xep0030;
  243. information request.</p>
  244. <example caption="Service Discovery Information Request"><![CDATA[
  245. <iq from='kingclaudius@shakespeare.lit/castle'
  246. id='ku6e51v3'
  247. to='laertes@shakespeare.lit/castle'
  248. type='get'>
  249. <query xmlns='http://jabber.org/protocol/disco#info'/>
  250. </iq>
  251. ]]></example>
  252. <example caption="Service Discovery Information Response"><![CDATA[
  253. <iq from='laertes@shakespeare.lit/castle'
  254. id='ku6e51v3'
  255. to='kingclaudius@shakespeare.lit/castle'
  256. type='result'>
  257. <query xmlns='http://jabber.org/protocol/disco#info'>
  258. <feature var='urn:xmpp:coin:1'/>
  259. </query>
  260. </iq>
  261. ]]></example>
  262. <p>In order for an application to determine whether an entity supports this
  263. protocol, where possible it SHOULD use the dynamic, presence-based profile
  264. of service discovery defined in &xep0115;. However, if an application has
  265. not received entity capabilities information from an entity, it SHOULD use
  266. explicit service discovery instead.</p>
  267. </section1>
  268. <section1 topic='Security Considerations' anchor='security'>
  269. <p>PENDING: <cite>RFC 4575</cite> mostly talks about authentication
  270. conference-info subscriptions but these are not part of this specification.
  271. The authors are hence currently unaware of any other Coin specific security
  272. considerations</p>
  273. </section1>
  274. <section1 topic='Open Issues' anchor='issues'>
  275. <p>This document provides a basic description of a simple way to support
  276. tightly coupled conference calls. It is in many respects still a stub and a
  277. number of open issues require the attention of the community:</p>
  278. <ol>
  279. <li>Need to define best practices for user agents to easily determine
  280. whether the request of user to establish a conference call should result
  281. in a Muji or a Coin conference.</li>
  282. </ol>
  283. </section1>
  284. <section1 topic='XML Schemas' anchor='schema'>
  285. <section2 topic='Advertising Conf Calls' anchor='schema-discover'>
  286. <code><![CDATA[
  287. <?xml version='1.0' encoding='UTF-8'?>
  288. <xs:schema
  289. xmlns:xs='http://www.w3.org/2001/XMLSchema'
  290. targetNamespace='urn:xmpp:coin:1'
  291. xmlns='urn:xmpp:coin:1'
  292. elementFormDefault='qualified'>
  293. <xs:annotation>
  294. <xs:documentation>
  295. The protocol documented by this schema is defined in
  296. XEP-0298: http://www.xmpp.org/extensions/xep-0298.html
  297. </xs:documentation>
  298. </xs:annotation>
  299. <xs:element name="conference-info" type="empty">
  300. <xs:complexType>
  301. <xs:attribute name='isfocus' type='xs:boolean' required='true'/>
  302. </xs:complexType>
  303. </xs:element>
  304. </xs:schema>
  305. ]]></code>
  306. </section2>
  307. <section2 topic='Conference Info' anchor='schema-coin'>
  308. <code><![CDATA[
  309. <?xml version="1.0" encoding="UTF-8" ?>
  310. <xs:schema
  311. targetNamespace="urn:ietf:params:xml:ns:conference-info"
  312. xmlns:tns="urn:ietf:params:xml:ns:conference-info"
  313. xmlns:xs="http://www.w3.org/2001/XMLSchema"
  314. xmlns="urn:ietf:params:xml:ns:conference-info"
  315. elementFormDefault="qualified"
  316. attributeFormDefault="unqualified">
  317. <xs:annotation>
  318. <xs:documentation>
  319. The protocol documented by this schema is defined in
  320. RFC 4575: http://tools.ietf.org/html/rfc4575 and reused by
  321. XEP-0298 http://www.xmpp.org/extensions/xep-0298.html
  322. </xs:documentation>
  323. </xs:annotation>
  324. <!--
  325. This imports the xml:language definition
  326. -->
  327. <xs:import namespace="http://www.w3.org/XML/1998/namespace"
  328. schemaLocation="http://www.w3.org/2001/03/xml.xsd"/>
  329. <!--
  330. CONFERENCE ELEMENT
  331. -->
  332. <xs:element name="conference-info" type="conference-type"/>
  333. <!--
  334. CONFERENCE TYPE
  335. -->
  336. <xs:complexType name="conference-type">
  337. <xs:sequence>
  338. <xs:element name="conference-description"
  339. type="conference-description-type" minOccurs="0"/>
  340. <xs:element name="host-info"
  341. type="host-type" minOccurs="0"/>
  342. <xs:element name="conference-state"
  343. type="conference-state-type" minOccurs="0"/>
  344. <xs:element name="users"
  345. type="users-type" minOccurs="0"/>
  346. <xs:element name="sidebars-by-ref"
  347. type="uris-type" minOccurs="0"/>
  348. <xs:element name="sidebars-by-val"
  349. type="sidebars-by-val-type" minOccurs="0"/>
  350. <xs:any namespace="##other" processContents="lax"
  351. minOccurs="0" maxOccurs="unbounded"/>
  352. </xs:sequence>
  353. <xs:attribute name="entity"
  354. type="xs:anyURI" use="required"/>
  355. <xs:attribute name="state"
  356. type="state-type" use="optional" default="full"/>
  357. <xs:attribute name="version"
  358. type="xs:unsignedInt" use="optional"/>
  359. <xs:anyAttribute namespace="##other" processContents="lax"/>
  360. </xs:complexType>
  361. <!--
  362. STATE TYPE
  363. -->
  364. <xs:simpleType name="state-type">
  365. <xs:restriction base="xs:string">
  366. <xs:enumeration value="full"/>
  367. <xs:enumeration value="partial"/>
  368. <xs:enumeration value="deleted"/>
  369. </xs:restriction>
  370. </xs:simpleType>
  371. <!--
  372. CONFERENCE DESCRIPTION TYPE
  373. -->
  374. <xs:complexType name="conference-description-type">
  375. <xs:sequence>
  376. <xs:element name="display-text"
  377. type="xs:string" minOccurs="0"/>
  378. <xs:element name="subject"
  379. type="xs:string" minOccurs="0"/>
  380. <xs:element name="free-text"
  381. type="xs:string" minOccurs="0"/>
  382. <xs:element name="keywords"
  383. type="keywords-type" minOccurs="0"/>
  384. <xs:element name="conf-uris"
  385. type="uris-type" minOccurs="0"/>
  386. <xs:element name="service-uris"
  387. type="uris-type" minOccurs="0"/>
  388. <xs:element name="maximum-user-count"
  389. type="xs:unsignedInt" minOccurs="0"/>
  390. <xs:element name="available-media"
  391. type="conference-media-type" minOccurs="0"/>
  392. <xs:any namespace="##other" processContents="lax"
  393. minOccurs="0" maxOccurs="unbounded"/>
  394. </xs:sequence>
  395. <xs:anyAttribute namespace="##other" processContents="lax"/>
  396. </xs:complexType>
  397. <!--
  398. HOST TYPE
  399. -->
  400. <xs:complexType name="host-type">
  401. <xs:sequence>
  402. <xs:element name="display-text" type="xs:string"
  403. minOccurs="0"/>
  404. <xs:element name="web-page" type="xs:anyURI"
  405. minOccurs="0"/>
  406. <xs:element name="uris" type="uris-type"
  407. minOccurs="0"/>
  408. <xs:any namespace="##other" processContents="lax"
  409. minOccurs="0" maxOccurs="unbounded"/>
  410. </xs:sequence>
  411. <xs:anyAttribute namespace="##other" processContents="lax"/>
  412. </xs:complexType>
  413. <!--
  414. CONFERENCE STATE TYPE
  415. -->
  416. <xs:complexType name="conference-state-type">
  417. <xs:sequence>
  418. <xs:element name="user-count" type="xs:unsignedInt"
  419. minOccurs="0"/>
  420. <xs:element name="active" type="xs:boolean"
  421. minOccurs="0"/>
  422. <xs:element name="locked" type="xs:boolean"
  423. minOccurs="0"/>
  424. <xs:any namespace="##other" processContents="lax"
  425. minOccurs="0" maxOccurs="unbounded"/>
  426. </xs:sequence>
  427. <xs:anyAttribute namespace="##other" processContents="lax"/>
  428. </xs:complexType>
  429. <!--
  430. CONFERENCE MEDIA TYPE
  431. -->
  432. <xs:complexType name="conference-media-type">
  433. <xs:sequence>
  434. <xs:element name="entry" type="conference-medium-type"
  435. maxOccurs="unbounded"/>
  436. </xs:sequence>
  437. <xs:anyAttribute namespace="##other" processContents="lax"/>
  438. </xs:complexType>
  439. <!--
  440. CONFERENCE MEDIUM TYPE
  441. -->
  442. <xs:complexType name="conference-medium-type">
  443. <xs:sequence>
  444. <xs:element name="display-text" type="xs:string"
  445. minOccurs="0"/>
  446. <xs:element name="type" type="xs:string"/>
  447. <xs:element name="status" type="media-status-type"
  448. minOccurs="0"/>
  449. <xs:any namespace="##other" processContents="lax"
  450. minOccurs="0" maxOccurs="unbounded"/>
  451. </xs:sequence>
  452. <xs:attribute name="label" type="xs:string"
  453. use="required"/>
  454. <xs:anyAttribute namespace="##other" processContents="lax"/>
  455. </xs:complexType>
  456. <!--
  457. URIs TYPE
  458. -->
  459. <xs:complexType name="uris-type">
  460. <xs:sequence>
  461. <xs:element name="entry" type="uri-type"
  462. maxOccurs="unbounded"/>
  463. </xs:sequence>
  464. <xs:attribute name="state" type="state-type"
  465. use="optional" default="full"/>
  466. <xs:anyAttribute namespace="##other" processContents="lax"/>
  467. </xs:complexType>
  468. <!--
  469. URI TYPE
  470. -->
  471. <xs:complexType name="uri-type">
  472. <xs:sequence>
  473. <xs:element name="uri" type="xs:anyURI"/>
  474. <xs:element name="display-text" type="xs:string"
  475. minOccurs="0"/>
  476. <xs:element name="purpose" type="xs:string"
  477. minOccurs="0"/>
  478. <xs:element name="modified" type="execution-type"
  479. minOccurs="0"/>
  480. <xs:any namespace="##other" processContents="lax"
  481. minOccurs="0" maxOccurs="unbounded"/>
  482. </xs:sequence>
  483. <xs:anyAttribute namespace="##other" processContents="lax"/>
  484. </xs:complexType>
  485. <!--
  486. KEYWORDS TYPE
  487. -->
  488. <xs:simpleType name="keywords-type">
  489. <xs:list itemType="xs:string"/>
  490. </xs:simpleType>
  491. <!--
  492. USERS TYPE
  493. -->
  494. <xs:complexType name="users-type">
  495. <xs:sequence>
  496. <xs:element name="user" type="user-type"
  497. minOccurs="0" maxOccurs="unbounded"/>
  498. <xs:any namespace="##other" processContents="lax"
  499. minOccurs="0" maxOccurs="unbounded"/>
  500. </xs:sequence>
  501. <xs:attribute name="state" type="state-type"
  502. use="optional" default="full"/>
  503. <xs:anyAttribute namespace="##other" processContents="lax"/>
  504. </xs:complexType>
  505. <!--
  506. USER TYPE
  507. -->
  508. <xs:complexType name="user-type">
  509. <xs:sequence>
  510. <xs:element name="display-text" type="xs:string"
  511. minOccurs="0"/>
  512. <xs:element name="associated-aors" type="uris-type"
  513. minOccurs="0"/>
  514. <xs:element name="roles" type="user-roles-type"
  515. minOccurs="0"/>
  516. <xs:element name="languages" type="user-languages-type"
  517. minOccurs="0"/>
  518. <xs:element name="cascaded-focus" type="xs:anyURI"
  519. minOccurs="0"/>
  520. <xs:element name="endpoint" type="endpoint-type"
  521. minOccurs="0" maxOccurs="unbounded"/>
  522. <xs:any namespace="##other" processContents="lax"
  523. minOccurs="0" maxOccurs="unbounded"/>
  524. </xs:sequence>
  525. <xs:attribute name="entity" type="xs:anyURI"/>
  526. <xs:attribute name="state" type="state-type"
  527. use="optional" default="full"/>
  528. <xs:anyAttribute namespace="##other" processContents="lax"/>
  529. </xs:complexType>
  530. <!--
  531. USER ROLES TYPE
  532. -->
  533. <xs:complexType name="user-roles-type">
  534. <xs:sequence>
  535. <xs:element name="entry" type="xs:string"
  536. maxOccurs="unbounded"/>
  537. </xs:sequence>
  538. <xs:anyAttribute namespace="##other" processContents="lax"/>
  539. </xs:complexType>
  540. <!--
  541. USER LANGUAGES TYPE
  542. -->
  543. <xs:simpleType name="user-languages-type">
  544. <xs:list itemType="xs:language"/>
  545. </xs:simpleType>
  546. <!--
  547. ENDPOINT TYPE
  548. -->
  549. <xs:complexType name="endpoint-type">
  550. <xs:sequence>
  551. <xs:element name="display-text" type="xs:string"
  552. minOccurs="0"/>
  553. <xs:element name="referred" type="execution-type"
  554. minOccurs="0"/>
  555. <xs:element name="status" type="endpoint-status-type"
  556. minOccurs="0"/>
  557. <xs:element name="joining-method" type="joining-type"
  558. minOccurs="0"/>
  559. <xs:element name="joining-info"
  560. type="execution-type"
  561. minOccurs="0"/>
  562. <xs:element name="disconnection-method"
  563. type="disconnection-type"
  564. minOccurs="0"/>
  565. <xs:element name="disconnection-info"
  566. type="execution-type"
  567. minOccurs="0"/>
  568. <xs:element name="media" type="media-type"
  569. minOccurs="0" maxOccurs="unbounded"/>
  570. <xs:element name="call-info" type="call-type"
  571. minOccurs="0"/>
  572. <xs:any namespace="##other" processContents="lax"
  573. minOccurs="0" maxOccurs="unbounded"/>
  574. </xs:sequence>
  575. <xs:attribute name="entity" type="xs:string"/>
  576. <xs:attribute name="state" type="state-type"
  577. use="optional" default="full"/>
  578. <xs:anyAttribute namespace="##other" processContents="lax"/>
  579. </xs:complexType>
  580. <!--
  581. ENDPOINT STATUS TYPE
  582. -->
  583. <xs:simpleType name="endpoint-status-type">
  584. <xs:restriction base="xs:string">
  585. <xs:enumeration value="pending"/>
  586. <xs:enumeration value="dialing-out"/>
  587. <xs:enumeration value="dialing-in"/>
  588. <xs:enumeration value="alerting"/>
  589. <xs:enumeration value="on-hold"/>
  590. <xs:enumeration value="connected"/>
  591. <xs:enumeration value="muted-via-focus"/>
  592. <xs:enumeration value="disconnecting"/>
  593. <xs:enumeration value="disconnected"/>
  594. </xs:restriction>
  595. </xs:simpleType>
  596. <!--
  597. JOINING TYPE
  598. -->
  599. <xs:simpleType name="joining-type">
  600. <xs:restriction base="xs:string">
  601. <xs:enumeration value="dialed-in"/>
  602. <xs:enumeration value="dialed-out"/>
  603. <xs:enumeration value="focus-owner"/>
  604. </xs:restriction>
  605. </xs:simpleType>
  606. <!--
  607. DISCONNECTION TYPE
  608. -->
  609. <xs:simpleType name="disconnection-type">
  610. <xs:restriction base="xs:string">
  611. <xs:enumeration value="departed"/>
  612. <xs:enumeration value="booted"/>
  613. <xs:enumeration value="failed"/>
  614. <xs:enumeration value="busy"/>
  615. </xs:restriction>
  616. </xs:simpleType>
  617. <!--
  618. EXECUTION TYPE
  619. -->
  620. <xs:complexType name="execution-type">
  621. <xs:sequence>
  622. <xs:element name="when" type="xs:dateTime"
  623. minOccurs="0"/>
  624. <xs:element name="reason" type="xs:string"
  625. minOccurs="0"/>
  626. <xs:element name="by" type="xs:anyURI"
  627. minOccurs="0"/>
  628. </xs:sequence>
  629. <xs:anyAttribute namespace="##other" processContents="lax"/>
  630. </xs:complexType>
  631. <!--
  632. CALL TYPE
  633. -->
  634. <xs:complexType name="call-type">
  635. <xs:choice>
  636. <xs:element name="sip" type="sip-dialog-id-type"/>
  637. <xs:any namespace="##other" processContents="lax"
  638. minOccurs="0" maxOccurs="unbounded"/>
  639. </xs:choice>
  640. <xs:anyAttribute namespace="##other" processContents="lax"/>
  641. </xs:complexType>
  642. <!--
  643. SIP DIALOG ID TYPE
  644. -->
  645. <xs:complexType name="sip-dialog-id-type">
  646. <xs:sequence>
  647. <xs:element name="display-text" type="xs:string"
  648. minOccurs="0"/>
  649. <xs:element name="call-id" type="xs:string"/>
  650. <xs:element name="from-tag" type="xs:string"/>
  651. <xs:element name="to-tag" type="xs:string"/>
  652. <xs:any namespace="##other" processContents="lax"
  653. minOccurs="0" maxOccurs="unbounded"/>
  654. </xs:sequence>
  655. <xs:anyAttribute namespace="##other" processContents="lax"/>
  656. </xs:complexType>
  657. <!--
  658. MEDIA TYPE
  659. -->
  660. <xs:complexType name="media-type">
  661. <xs:sequence>
  662. <xs:element name="display-text" type="xs:string"
  663. minOccurs="0"/>
  664. <xs:element name="type" type="xs:string"
  665. minOccurs="0"/>
  666. <xs:element name="label" type="xs:string"
  667. minOccurs="0"/>
  668. <xs:element name="src-id" type="xs:string"
  669. minOccurs="0"/>
  670. <xs:element name="status" type="media-status-type"
  671. minOccurs="0"/>
  672. <xs:any namespace="##other" processContents="lax"
  673. minOccurs="0" maxOccurs="unbounded"/>
  674. </xs:sequence>
  675. <xs:attribute name="id" type="xs:string"
  676. use="required"/>
  677. <xs:anyAttribute namespace="##other" processContents="lax"/>
  678. </xs:complexType>
  679. <!--
  680. MEDIA STATUS TYPE
  681. -->
  682. <xs:simpleType name="media-status-type">
  683. <xs:restriction base="xs:string">
  684. <xs:enumeration value="recvonly"/>
  685. <xs:enumeration value="sendonly"/>
  686. <xs:enumeration value="sendrecv"/>
  687. <xs:enumeration value="inactive"/>
  688. </xs:restriction>
  689. </xs:simpleType>
  690. <!--
  691. SIDEBARS BY VAL TYPE
  692. -->
  693. <xs:complexType name="sidebars-by-val-type">
  694. <xs:sequence>
  695. <xs:element name="entry" type="conference-type"
  696. minOccurs="0" maxOccurs="unbounded"/>
  697. </xs:sequence>
  698. <xs:attribute name="state" type="state-type"
  699. use="optional" default="full"/>
  700. <xs:anyAttribute namespace="##other" processContents="lax"/>
  701. </xs:complexType>
  702. </xs:schema>
  703. </xs:schema>
  704. ]]></code>
  705. </section2>
  706. </section1>
  707. <section1 topic='Acknowledgements' anchor='acks'>
  708. <p>Jitsi's participation in this specification is funded by the NLnet
  709. Foundation.</p>
  710. </section1>
  711. </xep>