-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathxep-0137.xml
326 lines (320 loc) · 15.5 KB
/
xep-0137.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
<?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>Publishing Stream Initiation Requests</title>
<abstract>This specification defines an XMPP protocol extension that enables an XMPP entity to advertise the fact that it is willing accept a particular Stream Initiation request. The protocol is used mainly to inform other entities that a particular file is available for transfer via the File Transfer protocol defined in XEP-0096.</abstract>
&LEGALNOTICE;
<number>0137</number>
<status>Deprecated</status>
<type>Standards Track</type>
<sig>Standards</sig>
<dependencies>
<spec>XMPP Core</spec>
<spec>XEP-0030</spec>
<spec>XEP-0095</spec>
</dependencies>
<supersedes/>
<supersededby/>
<shortname>sipub</shortname>
<schemaloc>
<url>http://www.xmpp.org/schemas/sipub.xsd</url>
</schemaloc>
&linuxwolf;
&temas;
<revision>
<version>1.1</version>
<date>2018-02-28</date>
<initials>XEP Editor (ssw)</initials>
<remark><p>Deprecated per a vote of the XMPP Council.</p></remark>
</revision>
<revision>
<version>1.0</version>
<date>2005-08-26</date>
<initials>psa</initials>
<remark>Per a vote of the Jabber Council, advanced status to Draft.</remark>
</revision>
<revision>
<version>0.3</version>
<date>2005-07-21</date>
<initials>psa</initials>
<remark>Corrected several errors in the text and examples.</remark>
</revision>
<revision>
<version>0.2</version>
<date>2004-11-03</date>
<initials>psa</initials>
<remark>Editorial review: clarified text throughout and corrected several errors in the examples.</remark>
</revision>
<revision>
<version>0.1</version>
<date>2004-06-16</date>
<initials>lw/tjm</initials>
<remark>Initial version.</remark>
</revision>
</header>
<section1 topic='Introduction' anchor='intro'>
<p>&xep0095; defines a protocol to initiate a data stream between two Jabber/XMPP entities (e.g., for the purpose of &xep0096;). However, the sender is still responsible for informing potential receivers about the existence of a given stream. This document provides an automated way for a sender to announce the availability of a stream without initiating the data transfer. The purpose is to provide a "pull" protocol that enables a receiver to then request initiation of the stream from the sender.</p>
</section1>
<section1 topic='Requirements' anchor='requirements'>
<p>This proposal addresses the following requirements:</p>
<ul>
<li>Allow a potential receiver (rather than the sender) to initiate a data stream.</li>
<li>Integrate Stream Initiation (SI) with &xep0060;.</li>
<li>Integrate Stream Initiation with &xep0004;.</li>
</ul>
</section1>
<section1 topic='Use Cases' anchor='usecase'>
<section2 topic='Publishing an SI Request' anchor='usecase.publish'>
<p>A stream owner uses the <sipub/> element to announce that it can perform a specific SI request. This element can be sent to a publish-subscribe (XEP-0060) node, or sent directly to potential recipients within a &MESSAGE; stanza.</p>
<p>The format of the <sipub/> element is as follows:</p>
<example caption='Sample <sipub/>'><![CDATA[
<sipub xmlns='http://jabber.org/protocol/sipub'
from='sender-jid'
id='publish-0123'
profile='si-profile'
mime-type='mime/type'>
<profile xmlns='si-profile'></profile>
</sipub>
]]></example>
<p>This format is nearly identical to that for the stream initiation <si/> element (see <cite>XEP-0095</cite>). The major difference is the lack of the feature negotiation for the stream methods, and the addition of a 'from' attribute.</p>
<p>The 'from' attribute SHOULD be present, and MUST be present if the stanza containing the <sipub/> is not from the stream owner (e.g., if the stream is advertised at a publish-subscribe node). If present, this attribute MUST be the valid JID for the stream owner.</p>
<p>The 'id' attribute is an opaque identifier. This attribute MUST be present, and MUST be a valid non-empty string. It uniquely identifies the published request at the potential sender.</p>
<p>As with stream initiation, the 'profile' attribute MUST be present, and MUST be the namespace URI governing the profile information. It identifies the format for the SI profile.</p>
<p>As with stream initiation, the 'mime-type' attribute SHOULD be present, and MUST be an IANA-registered content type. <note>The IANA registry of content types is located at <<link url='http://www.iana.org/assignments/media-types/'>http://www.iana.org/assignments/media-types/</link>>.</note> It provides the receiver with additional information about what the data stream will be.</p>
<p>The <sipub/> element MUST contain an element qualified by the namespace specified by the 'profile' attribute (e.g., <file xmlns='http://jabber.org/protocol/si/profile/file-transfer'/> for file transfer). This is the additional information about the data stream.</p>
<p>The <sipub/> information is typically provided via pubsub:</p>
<example caption='Sender advertises stream via publish-subscribe'><![CDATA[
<iq from='bard@shakespeare.lit/globe'
to='pubsub.shakespeare.lit'
id='ps1'>
<pubsub xmlns='http://jabber.org/protocol/pubsub'>
<publish node='characters'>
<sipub xmlns='http://jabber.org/protocol/sipub'
from='bard@shakespeare.lit'
id='publish-0123'
mime-type='application/pdf'
profile='http://jabber.org/protocol/si/profile/file-transfer'>
<file xmlns='http://jabber.org/protocol/si/profile/file-transfer'
name='NDA.pdf'
size='138819'
date='2004-01-28T10:07Z'>
<desc>All Shakespearean characters must sign and return this NDA ASAP</desc>
</file>
</sipub>
</publish>
</pubsub>
</iq>
]]></example>
<example caption='Pubsub service pushes announcement to all subscribers'><![CDATA[
<message from='pubsub.shakespeare.lit' to='juliet@capulet.com/balcony'>
<event xmlns='http://jabber.org/protocol/pubsub#event'>
<items node='characters'>
<item id='current'>
<sipub xmlns='http://jabber.org/protocol/sipub'
from='bard@shakespeare.lit'
id='publish-0123'
mime-type='application/pdf'
profile='http://jabber.org/protocol/si/profile/file-transfer'>
<file xmlns='http://jabber.org/protocol/si/profile/file-transfer'
name='NDA.pdf'
size='138819'
date='2004-01-28T10:07Z'>
<desc>All Shakespearean characters must sign and return this NDA ASAP</desc>
</file>
</sipub>
</item>
</items>
</event>
</message>
]]></example>
<p>The <sipub/> element MAY also be included directly within a &MESSAGE; stanza sent to another entity (or multiple entities, e.g., in &xep0045; or via &xep0033;). This can be especially useful for informing an offline entity about an available stream.</p>
<example caption='Advertising a stream in a message stanza'><![CDATA[
<message from='romeo@montague.net/pda' to='juliet@capulet.com'>
<sipub xmlns='http://jabber.org/protocol/sipub'
id='publish-0123'
mime-type='application/pdf'
profile='http://jabber.org/protocol/si/profile/file-transfer'>
<file xmlns='http://jabber.org/protocol/si/profile/file-transfer'
name='NDA.pdf'
size='138819'
date='2004-01-28T10:07Z'>
<desc>All Shakespearean characters must sign and return this NDA ASAP</desc>
</file>
</sipub>
</message>
]]></example>
</section2>
<section2 topic='Integration with Data Forms' anchor='usecase.xdata'>
<p>One of the goals of sipub is to integrate <cite>Stream Initiation</cite> with <cite>Data Forms</cite> to provide a "file upload" capability. This is accomplished via the datatypes specified in &xep0122;. Each datatype is specific to the profile desired.</p>
<p>For example the datatype "sipub:file-transfer" is used to identify the file upload field(s) corresponding to <cite>XEP-0096</cite>:</p>
<example caption='"Upload File" Data Forms Field'><![CDATA[
<field var='file' type='text-single' label='File to Upload'>
<validate xmlns='http://jabber.org/protocol/xdata-validate'
datatype='sipub:file-transfer'/>
</field>
]]></example>
<p>When submitting such a form, a field's value(s) MUST be the <sipub/> identifier(s). Also, the submitter MUST provide an <sipub/> element within the data form for each file to be uploaded:</p>
<example caption='Submitting an "Upload File" form'><![CDATA[
<x xmlns='jabber:x:data' type='submit'>
<field var='file'>
<value>publish-0123</value>
</field>
<sipub xmlns='http://jabber.org/protocol/sipub'
id='publish-0123'
mime-type='text/html'
profile='http://jabber.org/protocol/si/profile/file-transfer'>
<file xmlns='http://jabber.org/protocol/si/profile/file-transfer'
name='missive.html'
size='1024'
date='2005-07-21T11:21Z'/>
</sipub>
</x>
]]></example>
<p>The form processor will use this to retrieve the file(s) to be uploaded.</p>
</section2>
<section2 topic='Triggering the Stream Initiation Request' anchor='usecase.trigger'>
<p>A potential receiver starts the stream initiation session by sending an IQ-get to the sender, using the <start xmlns='http://jabber.org/protocol/sipub'/> element. This element contains the 'id' attribute to specify which published stream to retrieve:</p>
<example caption='Receiver requests start of stream'><![CDATA[
<iq type='get'
id='sipub-request-0'
from='juliet@capulet.com/balcony'
to='romeo@montague.net/pda'>
<start xmlns='http://jabber.org/protocol/sipub'
id='publish-0123'/>
</iq>
]]></example>
<p>If the sender accepts the request, it responds with an IQ-result containing a <starting/> element. This element indicates the stream initiation identifier to be used:</p>
<example caption='Sender accepts request to start stream'><![CDATA[
<iq type='result'
id='sipub-request-0'
from='romeo@montague.net/pda'
to='juliet@capulet.com/balcony'>
<starting xmlns='http://jabber.org/protocol/sipub'
sid='session-87651234'/>
</iq>
]]></example>
<p>Then the sender begins the stream initiation negotiation:</p>
<example caption='Sender starts negotiation'><![CDATA[
<iq type='set'
id='sipub-set-1'
from='romeo@montague.net/pda'
to='juliet@capulet.com/balcony'>
<si xmlns='http://jabber.org/protocol/si'
id='session-87651234'
mime-type='text/html'
profile='http://jabber.org/protocol/si/profile/file-transfer'>
<file xmlns='http://jabber.org/protocol/si/profile/file-transfer'
name='missive.html'
size='1024'
date='2005-07-21T11:21Z'>
<desc>A love letter</desc>
</file>
</si>
</iq>
]]></example>
<p>If the requested identifier is not valid, the sender SHOULD respond with a ¬acceptable; error:</p>
<example caption='Sender denies because of invalid id'><![CDATA[
<iq type='error'
id='sipub-set-1'
from='romeo@montague.net/pda'
to='juliet@capulet.com/balcony'>
<start xmlns='http://jabber.org/protocol/sipub'>publish-0123</start>
<error code='405' type='modify'>
<not-acceptable xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>
</error>
</iq>
]]></example>
<p>If the receiver does not have permission to request the data stream, the sender SHOULD respond with a &forbidden; error:</p>
<example caption='Sender denies because receiver is forbidden'><![CDATA[
<iq type='error'
id='sipub-set-1'
from='romeo@montague.net/pda'
to='juliet@capulet.com/balcony'>
<start xmlns='http://jabber.org/protocol/sipub'>publish-0123</start>
<error code='403' type='auth'>
<forbidden xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>
</error>
</iq>
]]></example>
</section2>
</section1>
<section1 topic='Implementation Notes' anchor='impl-notes'>
<section2 topic='Publish ID versus SI ID'>
<p>When publishing a stream via the <sipub/> element, the identifier SHOULD NOT be used as-is for the <si/> element, since a single publication will likely result in multiple <si/> requests, possibly from the same receiver.</p>
</section2>
</section1>
<section1 topic='Security Considerations' anchor='security'>
<p>This document introduces no security concerns beyond those specified in <cite>XEP-0060</cite> and the relevant Stream Initiation profile in use.</p>
</section1>
<section1 topic='IANA Considerations' anchor='iana'>
<p>This document requires no interaction with &IANA;.</p>
</section1>
<section1 topic='XMPP Registrar Considerations' anchor='registrar'>
<section2 topic='Protocol Namespaces' anchor='registrar.namespaces'>
<p>The ®ISTRAR; includes 'http://jabber.org/protocol/sipub' in its registry of protocol namespaces.</p>
</section2>
<section2 topic='Data Form Validation Datatypes' anchor='registrar.xdata-validate'>
<p>The XMPP Registrar includes 'sipub:' in its registry of Data Forms Validation Datatype Prefixes.</p>
<p>Normally, each SI profile that wishes to be considered for use with Data Forms MUST register its own datatype qualified by the "sipub:" prefix. However, this document provides an initial seed, based on the currently accepted SI profiles. The following datatypes shall be registered for use with Data Forms Validation:</p>
<code caption='Data Forms Validation Datatypes Registry Submission'><![CDATA[
<datatype>
<name>sipub:file-transfer</name>
<desc>Datatype for publishing an SI using the File Transfer Profile</desc>
<doc>XEP-0096</doc>
</datatype>
]]></code>
</section2>
</section1>
<section1 topic='XML Schema' anchor='schema'>
<code><![CDATA[
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='http://jabber.org/protocol/sipub'
xmlns='http://jabber.org/protocol/sipub'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
XEP-0137: http://www.xmpp.org/extensions/xep-0137.html
</xs:documentation>
</xs:annotation>
<xs:element name='sipub'>
<xs:annotation>
<xs:documentation>This is the root content element for advertising a stream.</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:any namespace='##other' minOccurs='1' maxOccurs='1'/>
</xs:sequence>
<xs:attribute name='id' type='xs:string' use='required'/>
<xs:attribute name='from' type='xs:string' use='optional'/>
<xs:attribute name='mime-type' type='xs:string' use='optional'/>
<xs:attribute name='profile' type='xs:string' use='optional'/>
</xs:complexType>
</xs:element>
<xs:element name='start'>
<xs:annotation>
<xs:documentation>This is the element for requesting retrieval of a stream.</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:attribute name='id' type='xs:string' use='required'/>
</xs:complexType>
</xs:element>
<xs:element name='starting'>
<xs:annotation>
<xs:documentation>This is the element for specifying the stream to be retrieved.</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:attribute name='sid' type='xs:string' use='required'/>
</xs:complexType>
</xs:element>
</xs:schema>
]]></code>
</section1>
</xep>