mirror of
https://github.com/moparisthebest/xeps
synced 2024-11-21 16:55:07 -05:00
0.23
git-svn-id: file:///home/ksmith/gitmigration/svn/xmpp/trunk@2112 4b5297f7-1745-476d-ba37-a9c6900126ab
This commit is contained in:
parent
66fd54e33e
commit
e905816570
132
xep-0167.xml
132
xep-0167.xml
@ -10,7 +10,7 @@
|
||||
<abstract>This specification defines a Jingle application type for negotiating one or more sessions that use the Real-time Transport Protocol (RTP) to exchange media such as voice or video. The application type includes a straightforward mapping to Session Description Protocol (SDP) for interworking with SIP media endpoints.</abstract>
|
||||
&LEGALNOTICE;
|
||||
<number>0167</number>
|
||||
<status>Proposed</status>
|
||||
<status>Experimental</status>
|
||||
<type>Standards Track</type>
|
||||
<sig>Standards</sig>
|
||||
<approver>Council</approver>
|
||||
@ -25,6 +25,12 @@
|
||||
&stpeter;
|
||||
&seanegan;
|
||||
&robmcqueen;
|
||||
<revision>
|
||||
<version>0.23</version>
|
||||
<date>2008-07-31</date>
|
||||
<initials>ram/psa</initials>
|
||||
<remark><p>Removed profile attribute; modified secure session establishment to align with SRTP usage.</p></remark>
|
||||
</revision>
|
||||
<revision>
|
||||
<version>0.22</version>
|
||||
<date>2008-06-09</date>
|
||||
@ -226,7 +232,6 @@
|
||||
]]></example>
|
||||
<p>The &DESCRIPTION; element is intended to be a child of a &CONTENT; element as specified in <cite>XEP-0166</cite>.</p>
|
||||
<p>The &DESCRIPTION; element MUST possess a 'media' attribute that specifies the media type, such as "audio" or "video".</p>
|
||||
<p>The &DESCRIPTION; element SHOULD possess a 'profile' attribute that specifies the profile of RTP in use as would be encapsulated in SDP (e.g., "RTP/AVP" or "UDP/TLS/RTP/SAVP"). If not included, the default value of "RTP/AVP" MUST be assumed.</p>
|
||||
<p>The encodings SHOULD be provided in order of preference by placing the most-preferred &PAYLOADTYPE; element as the first child of the &DESCRIPTION; element (etc.).</p>
|
||||
<p>The allowable attributes of the &PAYLOADTYPE; element are as follows:</p>
|
||||
<table caption='Payload-Type Attributes'>
|
||||
@ -312,7 +317,7 @@ Initiator Responder
|
||||
initiator='romeo@montague.net/orchard'
|
||||
sid='a73sjjvkla37jfea'>
|
||||
<content creator='initiator' name='voice'>
|
||||
<description xmlns='urn:xmpp:tmp:jingle:apps:rtp' media='audio' profile='RTP/AVP'>
|
||||
<description xmlns='urn:xmpp:tmp:jingle:apps:rtp' media='audio'>
|
||||
<payload-type id='96' name='speex' clockrate='16000'/>
|
||||
<payload-type id='97' name='speex' clockrate='8000'/>
|
||||
<payload-type id='18' name='G729'/>
|
||||
@ -328,7 +333,7 @@ Initiator Responder
|
||||
<p>Upon receiving the session-initiate stanza, the responder determines whether it can proceed with the negotiation. The general Jingle error cases are specified in <cite>XEP-0166</cite> and illustrated in the <link url='#scenarios'>Scenarios</link> section of this document.</p>
|
||||
<p>If there is no error, the responder acknowledges the session initiation request.</p>
|
||||
<example caption="Responder acknowledges session-initiate"><![CDATA[
|
||||
<iq from='juliet@capulet.com/balcony'
|
||||
<iq from='juliet@capulet.com/balcony'
|
||||
id='jingle1'
|
||||
to='romeo@montague.net/orchard'
|
||||
type='result'/>
|
||||
@ -346,7 +351,7 @@ Initiator Responder
|
||||
responder='juliet@capulet.com/balcony'
|
||||
sid='a73sjjvkla37jfea'>
|
||||
<content creator='initiator' name='voice'>
|
||||
<description xmlns='urn:xmpp:tmp:jingle:apps:rtp' media='audio' profile='RTP/AVP'>
|
||||
<description xmlns='urn:xmpp:tmp:jingle:apps:rtp' media='audio'>
|
||||
<payload-type id='97' name='speex' clockrate='8000'/>
|
||||
<payload-type id='18' name='G729'/>
|
||||
</description>
|
||||
@ -369,7 +374,7 @@ Initiator Responder
|
||||
]]></example>
|
||||
<p>And the initiator acknowledges session acceptance:</p>
|
||||
<example caption="Initiator acknowledges session acceptance"><![CDATA[
|
||||
<iq from='romeo@montague.net/orchard'
|
||||
<iq from='romeo@montague.net/orchard'
|
||||
id='accept1'
|
||||
to='juliet@capulet.com/balcony'
|
||||
type='result'/>
|
||||
@ -388,7 +393,7 @@ Initiator Responder
|
||||
<code><![CDATA[
|
||||
m=<media> <port> <transport> <fmt list>
|
||||
]]></code>
|
||||
<p>In the context of Jingle audio sessions, the <media> is "audio" or "video" or some other media type, the <port> is the preferred port for such communications (which may be determined dynamically), the <transport> is whatever profile is negotiated via the 'profile' attribute of the &CONTENT; element in the Jingle negotiation (e.g., "RTP/AVP"), and the <fmt list> is the payload-type ID.</p>
|
||||
<p>In the context of Jingle audio sessions, the <media> is "audio" or "video" or some other media type, the <port> is the preferred port for such communications (which may be determined dynamically), and the <fmt list> is the payload-type ID.</p>
|
||||
<p>For example, consider the following static payload-type:</p>
|
||||
<example caption="Jingle format for static payload-type"><![CDATA[
|
||||
<payload-type id="13" name="CN"/>
|
||||
@ -440,6 +445,32 @@ delivery-method=inline; configuration=somebase16string;
|
||||
]]></example>
|
||||
</section1>
|
||||
|
||||
<section1 topic='Negotiation of SRTP' anchor='srtp'>
|
||||
<p>&rfc3711; defines the Secure Real-time Transport Protocol, and &rfc4568; defines the SDP "crypto" attribute for signalling and negotiating the use of SRTP in the context of offer-answer protocols such as SIP. To enable the use of SRTP and gatewaying to non-XMPP technologies that make use of the "crypto" SDP attribute, we define a corresponding <crypto/> element qualified by the 'urn:xmpp:tmp:jingle:apps:rtp' namespace.</p>
|
||||
<p>If the initiator wishes to use SRTP, the session-initiate MUST include at least one <crypto/> element and MAY multiple instances of the element. The <crypto/> element MUST be a child of the <description/> element.</p>
|
||||
<p>The XML attributes of the <crypto/> element are as follows:</p>
|
||||
<ul>
|
||||
<li>crypto-suite -- this maps to the SDP "crypto-suite" parameter and has the same semantics (i.e., it is an identifier that describes the encryption and authentication algorithms).</li>
|
||||
<li>key-params -- this maps to the SDP "key-params" parameter and has the same semantics (i.e., it provides one or more sets of keying material for the crypto-suite in question).</li>
|
||||
<li>session-params -- this maps to the SDP "session-params" parameter and has the same semantics (i.e., it provides transport-specific parameters for SRTP negotiation).</li>
|
||||
<li>tag -- this maps to the SDP "tag" parameter and has the same semantics (i.e., it is a decimal number used as an identifier for a particular crypto element).</li>
|
||||
</ul>
|
||||
<p>An example follows.</p>
|
||||
<example caption="The crypto element"><![CDATA[
|
||||
<crypto
|
||||
crypto-suite='AES_CM_128_HMAC_SHA1_80'
|
||||
key-params='inline:WVNfX19zZW1jdGwgKCkgewkyMjA7fQp9CnVubGVz|220|1:32'
|
||||
session-params='KDR=1;UNENCRYPTED_SRTCP'
|
||||
tag='1'/>
|
||||
]]></example>
|
||||
<p>The mapping to SDP is as follows.</p>
|
||||
<example caption="SDP mapping of the crypto element"><![CDATA[
|
||||
a=crypto:1 AES_CM_128_HMAC_SHA1_80
|
||||
inline:WVNfX19zZW1jdGwgKCkgewkyMjA7fQp9CnVubGVz|2^20|1:32
|
||||
]]></example>
|
||||
<p>When the responder receives a session-initiate action containing one or more instances of the <crypto/> element, it MUST either accept one of the <crypto/> elements or reject the offer by sending a session-terminate action with a reason of <invalid-crypto/>.</p>
|
||||
</section1>
|
||||
|
||||
<section1 topic='Informational Messages' anchor='info'>
|
||||
<section2 topic='Format' anchor='info-format'>
|
||||
<p>Informational messages may be sent by either party within the context of Jingle to communicate the status of a Jingle RTP session, device, or principal. The informational message MUST be an IQ-set containing a &JINGLE; element of type "session-info", where the informational message is a payload element qualified by the 'urn:xmpp:tmp:jingle:apps:rtp:info' namespace; the following payload elements are defined: <note>A <trying/> element (equivalent to the SIP 100 Trying response code) is not necessary, since each session-level action is acknowledged via XMPP IQ semantics.</note></p>
|
||||
@ -583,7 +614,7 @@ Romeo Juliet
|
||||
initiator='romeo@montague.lit/orchard'
|
||||
sid='a73sjjvkla37jfea'>
|
||||
<content creator='initiator' name='voice'>
|
||||
<description xmlns='urn:xmpp:tmp:jingle:apps:rtp' media='audio' profile='RTP/AVP'>
|
||||
<description xmlns='urn:xmpp:tmp:jingle:apps:rtp' media='audio'>
|
||||
<payload-type id='96' name='speex' clockrate='16000'/>
|
||||
<payload-type id='97' name='speex' clockrate='8000'/>
|
||||
<payload-type id='18' name='G729'/>
|
||||
@ -630,7 +661,7 @@ Romeo Juliet
|
||||
initiator='romeo@montague.lit/orchard'
|
||||
sid='a73sjjvkla37jfea'>
|
||||
<reason>
|
||||
<condition><busy/></condition>
|
||||
<busy/>
|
||||
<text>No time to chat right now!</text>
|
||||
</reason>
|
||||
</jingle>
|
||||
@ -644,7 +675,7 @@ Romeo Juliet
|
||||
type='result'/>
|
||||
]]></example>
|
||||
</section2>
|
||||
<section2 topic='Jingle Audio via RTP/AVP, Negotiated with ICE-UDP' anchor='scenarios-voicechat'>
|
||||
<section2 topic='Jingle Audio via RTP, Negotiated with ICE-UDP' anchor='scenarios-voicechat'>
|
||||
<p>In this scenario, Romeo initiates a voice chat with Juliet using a transport method of ICE-UDP. The parties also exchange informational messages.</p>
|
||||
<p>The session flow is as follows:</p>
|
||||
<code><![CDATA[
|
||||
@ -662,7 +693,7 @@ Romeo Juliet
|
||||
| (with acks) |
|
||||
|<--------------------------->|
|
||||
| STUN connectivity checks |
|
||||
|<--------------------------->|
|
||||
|<===========================>|
|
||||
| session-accept |
|
||||
|<----------------------------|
|
||||
| ack |
|
||||
@ -686,7 +717,7 @@ Romeo Juliet
|
||||
initiator='romeo@montague.lit/orchard'
|
||||
sid='a73sjjvkla37jfea'>
|
||||
<content creator='initiator' name='voice'>
|
||||
<description xmlns='urn:xmpp:tmp:jingle:apps:rtp' media='audio' profile='RTP/AVP'>
|
||||
<description xmlns='urn:xmpp:tmp:jingle:apps:rtp' media='audio'>
|
||||
<payload-type id='96' name='speex' clockrate='16000'/>
|
||||
<payload-type id='97' name='speex' clockrate='8000'/>
|
||||
<payload-type id='18' name='G729'/>
|
||||
@ -735,7 +766,7 @@ Romeo Juliet
|
||||
responder='juliet@capulet.lit/balcony'
|
||||
sid='a73sjjvkla37jfea'>
|
||||
<content creator='initiator' name='voice'>
|
||||
<description xmlns='urn:xmpp:tmp:jingle:apps:rtp' media='audio' profile='RTP/AVP'>
|
||||
<description xmlns='urn:xmpp:tmp:jingle:apps:rtp' media='audio'>
|
||||
<payload-type id='97' name='speex' clockrate='8000'/>
|
||||
<payload-type id='18' name='G729'/>
|
||||
</description>
|
||||
@ -780,7 +811,7 @@ Romeo Juliet
|
||||
initiator='romeo@montague.lit/orchard'
|
||||
sid='a73sjjvkla37jfea'>
|
||||
<reason>
|
||||
<condition><no-error/></condition>
|
||||
<no-error/>
|
||||
<text>Sorry, gotta go!</text>
|
||||
</reason>
|
||||
</jingle>
|
||||
@ -794,7 +825,7 @@ Romeo Juliet
|
||||
type='result'/>
|
||||
]]></example>
|
||||
</section2>
|
||||
<section2 topic='Jingle Audio and Video via RTP/AVP, Negotiated with ICE-UDP' anchor='scenarios-audiovideo'>
|
||||
<section2 topic='Jingle Audio and Video via RTP, Negotiated with ICE-UDP' anchor='scenarios-audiovideo'>
|
||||
<p>In this scenario, Romeo initiates a combined audio and video chat with Juliet using a transport method of ICE-UDP. Juliet at first refuses the video portion, then later offers to add video, which Romeo accepts. The parties also exchange various informational messages</p>
|
||||
<p>The session flow is as follows:</p>
|
||||
<code><![CDATA[
|
||||
@ -816,7 +847,7 @@ Romeo Juliet
|
||||
| (with acks) |
|
||||
|<--------------------------->|
|
||||
| STUN connectivity checks |
|
||||
|<--------------------------->|
|
||||
|<===========================>|
|
||||
| session-accept |
|
||||
|<----------------------------|
|
||||
| ack |
|
||||
@ -858,7 +889,7 @@ Romeo Juliet
|
||||
initiator='romeo@montague.lit/orchard'
|
||||
sid='a73sjjvkla37jfea'>
|
||||
<content creator='initiator' name='voice'>
|
||||
<description xmlns='urn:xmpp:tmp:jingle:apps:rtp' media='audio' profile='RTP/AVP'>
|
||||
<description xmlns='urn:xmpp:tmp:jingle:apps:rtp' media='audio'>
|
||||
<payload-type id='96' name='speex' clockrate='16000'/>
|
||||
<payload-type id='97' name='speex' clockrate='8000'/>
|
||||
<payload-type id='18' name='G729'/>
|
||||
@ -868,7 +899,7 @@ Romeo Juliet
|
||||
<transport xmlns='urn:xmpp:tmp:jingle:transports:ice-udp'/>
|
||||
</content>
|
||||
<content creator='initiator' name='webcam'>
|
||||
<description xmlns='urn:xmpp:tmp:jingle:apps:rtp' media='video' profile='RTP/AVP'>
|
||||
<description xmlns='urn:xmpp:tmp:jingle:apps:rtp' media='video'>
|
||||
<payload-type id='98' name='theora' clockrate='90000' height='720' width='1280'>
|
||||
<parameter name='delivery-method' value='inline'/>
|
||||
<parameter name='configuration' value='somebase16string'/>
|
||||
@ -941,7 +972,7 @@ Romeo Juliet
|
||||
responder='juliet@capulet.lit/balcony'
|
||||
sid='a73sjjvkla37jfea'>
|
||||
<content creator='initiator' name='voice'>
|
||||
<description xmlns='urn:xmpp:tmp:jingle:apps:rtp' media='audio' profile='RTP/AVP'>
|
||||
<description xmlns='urn:xmpp:tmp:jingle:apps:rtp' media='audio'>
|
||||
<payload-type id='97' name='speex' clockrate='8000'/>
|
||||
<payload-type id='18' name='G729'/>
|
||||
</description>
|
||||
@ -1026,7 +1057,7 @@ Romeo Juliet
|
||||
initiator='romeo@montague.lit/orchard'
|
||||
sid='a73sjjvkla37jfea'>
|
||||
<content creator='responder' name='webcam'>
|
||||
<description xmlns='urn:xmpp:tmp:jingle:apps:rtp' media='video' profile='RTP/AVP'>
|
||||
<description xmlns='urn:xmpp:tmp:jingle:apps:rtp' media='video'>
|
||||
<payload-type id='98' name='theora' height='720' width='1280'>
|
||||
<parameter name='delivery-method' value='inline'/>
|
||||
<parameter name='configuration' value='somebase16string'/>
|
||||
@ -1057,7 +1088,7 @@ Romeo Juliet
|
||||
initiator='romeo@montague.lit/orchard'
|
||||
sid='a73sjjvkla37jfea'>
|
||||
<content creator='responder' name='webcam'>
|
||||
<description xmlns='urn:xmpp:tmp:jingle:apps:rtp' media='video' profile='RTP/AVP'>
|
||||
<description xmlns='urn:xmpp:tmp:jingle:apps:rtp' media='video'>
|
||||
<payload-type id='98' name='theora' height='720' width='1280'>
|
||||
<parameter name='delivery-method' value='inline'/>
|
||||
<parameter name='configuration' value='somebase16string'/>
|
||||
@ -1090,7 +1121,7 @@ Romeo Juliet
|
||||
initiator='romeo@montague.lit/orchard'
|
||||
sid='a73sjjvkla37jfea'>
|
||||
<reason>
|
||||
<condition><busy/></condition>
|
||||
<busy/>
|
||||
<text>I'm outta here!</text>
|
||||
</reason>
|
||||
</jingle>
|
||||
@ -1103,8 +1134,8 @@ Romeo Juliet
|
||||
type='result'/>
|
||||
]]></example>
|
||||
</section2>
|
||||
<section2 topic='Secure Jingle Audio via UDP/TLS/RTP/SAVP, Negotiated with ICE-UDP' anchor='scenarios-secure'>
|
||||
<p>In this scenario, Romeo initiates a voice chat with Juliet using a secure transport as specified in &sdpdtls; (via a profile of "UDP/TLS/RTP/SAVP").</p>
|
||||
<section2 topic='Jingle Audio via SRTP, Negotiated with ICE-UDP' anchor='scenarios-srtp'>
|
||||
<p>In this scenario, Romeo initiates a secure voice chat with Juliet using a transport method of ICE-UDP. The parties also exchange informational messages.</p>
|
||||
<p>The session flow is as follows:</p>
|
||||
<code><![CDATA[
|
||||
Romeo Juliet
|
||||
@ -1121,7 +1152,7 @@ Romeo Juliet
|
||||
| (with acks) |
|
||||
|<--------------------------->|
|
||||
| STUN connectivity checks |
|
||||
|<--------------------------->|
|
||||
|<===========================>|
|
||||
| session-accept |
|
||||
|<----------------------------|
|
||||
| ack |
|
||||
@ -1145,21 +1176,26 @@ Romeo Juliet
|
||||
initiator='romeo@montague.lit/orchard'
|
||||
sid='a73sjjvkla37jfea'>
|
||||
<content creator='initiator' name='voice'>
|
||||
<description xmlns='urn:xmpp:tmp:jingle:apps:rtp' media='audio' profile='UDP/TLS/RTP/SAVP'/>
|
||||
<description xmlns='urn:xmpp:tmp:jingle:apps:rtp' media='audio'>
|
||||
<payload-type id='96' name='speex' clockrate='16000'/>
|
||||
<payload-type id='97' name='speex' clockrate='8000'/>
|
||||
<payload-type id='18' name='G729'/>
|
||||
<payload-type id='103' name='L16' clockrate='16000' channels='2'/>
|
||||
<payload-type id='98' name='x-ISAC' clockrate='8000'/>
|
||||
<crypto
|
||||
crypto-suite='AES_CM_128_HMAC_SHA1_80'
|
||||
key-params='inline:WVNfX19zZW1jdGwgKCkgewkyMjA7fQp9CnVubGVz|220|1:32'
|
||||
session-params='KDR=1;UNENCRYPTED_SRTCP'
|
||||
tag='1'/>
|
||||
</description>
|
||||
<transport xmlns='urn:xmpp:tmp:jingle:transports:ice-udp'/>
|
||||
</content>
|
||||
</jingle>
|
||||
</iq>
|
||||
]]></example>
|
||||
<example caption="Responder acknowledges session-initiate"><![CDATA[
|
||||
<example caption="Responder sends provisional acceptance"><![CDATA[
|
||||
<iq from='juliet@capulet.lit/balcony'
|
||||
id='jingle1'
|
||||
id='accept1'
|
||||
to='romeo@montague.lit/orchard'
|
||||
type='result'/>
|
||||
]]></example>
|
||||
@ -1194,9 +1230,14 @@ Romeo Juliet
|
||||
responder='juliet@capulet.lit/balcony'
|
||||
sid='a73sjjvkla37jfea'>
|
||||
<content creator='initiator' name='voice'>
|
||||
<description xmlns='urn:xmpp:tmp:jingle:apps:rtp' media='audio' profile='UDP/TLS/RTP/SAVP'>
|
||||
<description xmlns='urn:xmpp:tmp:jingle:apps:rtp' media='audio'>
|
||||
<payload-type id='97' name='speex' clockrate='8000'/>
|
||||
<payload-type id='18' name='G729'/>
|
||||
<crypto
|
||||
crypto-suite='AES_CM_128_HMAC_SHA1_80'
|
||||
key-params='inline:PS1uQCVeeCFCanVmcjkpPywjNWhcYD0mXXtxaVBR|220|1:32'
|
||||
session-params='KDR=1;UNENCRYPTED_SRTCP'
|
||||
tag='1'/>
|
||||
</description>
|
||||
<transport xmlns='urn:xmpp:tmp:jingle:transports:ice-udp'>
|
||||
<candidate component='1'
|
||||
@ -1239,7 +1280,7 @@ Romeo Juliet
|
||||
initiator='romeo@montague.lit/orchard'
|
||||
sid='a73sjjvkla37jfea'>
|
||||
<reason>
|
||||
<condition><no-error/></condition>
|
||||
<no-error/>
|
||||
<text>Sorry, gotta go!</text>
|
||||
</reason>
|
||||
</jingle>
|
||||
@ -1280,7 +1321,7 @@ Romeo Juliet
|
||||
</section1>
|
||||
|
||||
<section1 topic='Security Considerations' anchor='security'>
|
||||
<p>In order to secure the data stream, implementations SHOULD use encryption methods appropriate to the transport method and media being exchanged; for example, in the case of UDP, that would include Datagram Transport Layer Security (DTLS) as specified in &rfc4347;. The work-in-progress <cite>draft-fishl-mmusic-sdp-dtls</cite> defines such methods for the Session Description Protocol; the relevant RTP profile (e.g., "UDP/TLS/RTP/SAVP" for transporting the RTP stream over DTLS with UDP) shall be specified as the value of the &CONTENT; element's 'profile' attribute.</p>
|
||||
<p>In order to secure the data stream, implementations SHOULD use encryption methods appropriate to the transport method and media being exchanged. Such encryption methods are out of scope for this specification.</p>
|
||||
</section1>
|
||||
|
||||
<section1 topic='IANA Considerations' anchor='iana'>
|
||||
@ -1345,17 +1386,25 @@ Romeo Juliet
|
||||
|
||||
<xs:element name='description'>
|
||||
<xs:complexType>
|
||||
<xs:sequence minOccurs='0' maxOccurs='unbounded'/>
|
||||
<xs:element ref='payload-type'/>
|
||||
<xs:sequence>
|
||||
<xs:element name='payload-type'
|
||||
type='payloadElementType'
|
||||
minOccurs='0'
|
||||
maxOccurs='unbounded'/>
|
||||
<xs:element name='crypto'
|
||||
type='cryptoElementType'
|
||||
minOccurs='0'
|
||||
maxOccurs='unbounded'/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name='profile' use='optional' type='xs:string' default='RTP/AVP'/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
|
||||
<xs:element name='payload-type'>
|
||||
<xs:complexType>
|
||||
<xs:sequence minOccurs='0' maxOccurs='unbounded'>
|
||||
<xs:element ref='parameter'/>
|
||||
<xs:complexType name='payloadElementType'>
|
||||
<xs:sequence>
|
||||
<xs:element name='parameter'
|
||||
type='parameterElementType'
|
||||
minOccurs='0'
|
||||
maxOccurs='unbounded'/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name='channels' type='xs:byte' use='optional' default='1'/>
|
||||
<xs:attribute name='clockrate' type='xs:short' use='optional'/>
|
||||
@ -1364,10 +1413,8 @@ Romeo Juliet
|
||||
<xs:attribute name='name' type='xs:string' use='optional'/>
|
||||
<xs:attribute name='ptime' type='xs:short' use='optional'/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
|
||||
<xs:element name='parameter'>
|
||||
<xs:complexType>
|
||||
<xs:complexType name='parameterElementType'>
|
||||
<xs:simpleContent>
|
||||
<xs:extension base='empty'>
|
||||
<xs:attribute name='name' type='xs:string' use='required'/>
|
||||
@ -1375,7 +1422,6 @@ Romeo Juliet
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
|
||||
<xs:simpleType name='empty'>
|
||||
<xs:restriction base='xs:string'>
|
||||
@ -1431,6 +1477,6 @@ Romeo Juliet
|
||||
</section2>
|
||||
</section1>
|
||||
<section1 topic='Acknowledgements' anchor='ack'>
|
||||
<p>Thanks to Milton Chen, Diana Cionoiu, Olivier Crête, Tim Julien, Steffen Larsen, Robert McQueen, Jeff Muller, Mike Ruprecht, and Paul Witty for their feedback.</p>
|
||||
<p>Thanks to Milton Chen, Diana Cionoiu, Olivier Crête, Tim Julien, Steffen Larsen, Jeff Muller, Mike Ruprecht, and Paul Witty for their feedback.</p>
|
||||
</section1>
|
||||
</xep>
|
||||
|
Loading…
Reference in New Issue
Block a user