mirror of
https://github.com/moparisthebest/xeps
synced 2024-11-24 10:12:19 -05:00
clarified JID-naming scheme
git-svn-id: file:///home/ksmith/gitmigration/svn/xmpp/trunk@1407 4b5297f7-1745-476d-ba37-a9c6900126ab
This commit is contained in:
parent
aaed812202
commit
17dc6b4d77
95
xep-0065.xml
95
xep-0065.xml
@ -200,8 +200,8 @@
|
|||||||
<p>Before attempting to initiate a bytestream, the Initiator may want to know if the Target supports the bytestream protocol. It may do so using &xep0030; as follows:</p>
|
<p>Before attempting to initiate a bytestream, the Initiator may want to know if the Target supports the bytestream protocol. It may do so using &xep0030; as follows:</p>
|
||||||
<example caption='Initiator Sends Service Discovery Request to Target'><![CDATA[
|
<example caption='Initiator Sends Service Discovery Request to Target'><![CDATA[
|
||||||
<iq type='get'
|
<iq type='get'
|
||||||
from='initiator@host1/foo'
|
from='initiator@example.com/foo'
|
||||||
to='target@host2/bar'
|
to='target@example.org/bar'
|
||||||
id='hello'>
|
id='hello'>
|
||||||
<query xmlns='http://jabber.org/protocol/disco#info'/>
|
<query xmlns='http://jabber.org/protocol/disco#info'/>
|
||||||
</iq>
|
</iq>
|
||||||
@ -209,8 +209,8 @@
|
|||||||
<p>If the Target supports bytestreams, it MUST answer to that effect in the service discovery result.</p>
|
<p>If the Target supports bytestreams, it MUST answer to that effect in the service discovery result.</p>
|
||||||
<example caption='Target Replies to Service Discovery Request'><![CDATA[
|
<example caption='Target Replies to Service Discovery Request'><![CDATA[
|
||||||
<iq type='result'
|
<iq type='result'
|
||||||
from='target@host2/bar'
|
from='target@example.org/bar'
|
||||||
to='initiator@host1/foo'
|
to='initiator@example.com/foo'
|
||||||
id='hello'>
|
id='hello'>
|
||||||
<query xmlns='http://jabber.org/protocol/disco#info'>
|
<query xmlns='http://jabber.org/protocol/disco#info'>
|
||||||
<identity
|
<identity
|
||||||
@ -228,8 +228,8 @@
|
|||||||
<p>Before attempting to initiate a bytestream, the Initiator needs to find a proxy. It may do so using Service Discovery as follows:</p>
|
<p>Before attempting to initiate a bytestream, the Initiator needs to find a proxy. It may do so using Service Discovery as follows:</p>
|
||||||
<example caption='Initiator Sends Service Discovery Request to Server'><![CDATA[
|
<example caption='Initiator Sends Service Discovery Request to Server'><![CDATA[
|
||||||
<iq type='get'
|
<iq type='get'
|
||||||
from='initiator@host1/foo'
|
from='initiator@example.com/foo'
|
||||||
to='host1'
|
to='example.com'
|
||||||
id='server_items'>
|
id='server_items'>
|
||||||
<query xmlns='http://jabber.org/protocol/disco#items'/>
|
<query xmlns='http://jabber.org/protocol/disco#items'/>
|
||||||
</iq>
|
</iq>
|
||||||
@ -237,23 +237,24 @@
|
|||||||
<p>The server will return all of the known JIDs in its disco list.</p>
|
<p>The server will return all of the known JIDs in its disco list.</p>
|
||||||
<example caption='Server Replies to Service Discovery Request'><![CDATA[
|
<example caption='Server Replies to Service Discovery Request'><![CDATA[
|
||||||
<iq type='result'
|
<iq type='result'
|
||||||
from='host1'
|
from='example.com'
|
||||||
to='initiator@host1/foo'
|
to='initiator@example.com/foo'
|
||||||
id='server_items'>
|
id='server_items'>
|
||||||
<query xmlns='http://jabber.org/protocol/disco#items'>
|
<query xmlns='http://jabber.org/protocol/disco#items'>
|
||||||
...
|
...
|
||||||
<item jid='proxy.host3' name='Bytestreams Proxy'/>
|
<item jid='streamhostproxy.example.net' name='Bytestreams Proxy'/>
|
||||||
...
|
...
|
||||||
</query>
|
</query>
|
||||||
</iq>
|
</iq>
|
||||||
]]></example>
|
]]></example>
|
||||||
|
<p>In this case, the bytestreams proxy is hosted on a third party server "example.net", where the proxy itself has an address of "streamhostproxy.example.net".</p>
|
||||||
</section2>
|
</section2>
|
||||||
<section2 topic='Initiator Queries Proxy to Find Out if it is a Proxy' anchor='proto-proxyinfo'>
|
<section2 topic='Initiator Queries Proxy to Find Out if it is a Proxy' anchor='proto-proxyinfo'>
|
||||||
<p>For each item in the disco#items result, the Initiator must query to determine if it is a bytestreams proxy. It may do so using Service Discovery as follows:</p>
|
<p>For each item in the disco#items result, the Initiator must query to determine if it is a bytestreams proxy. It may do so using Service Discovery as follows:</p>
|
||||||
<example caption='Initiator Sends Service Discovery Request to Proxy'><![CDATA[
|
<example caption='Initiator Sends Service Discovery Request to Proxy'><![CDATA[
|
||||||
<iq type='get'
|
<iq type='get'
|
||||||
from='initiator@host1/foo'
|
from='initiator@example.com/foo'
|
||||||
to='proxy.host3'
|
to='streamhostproxy.example.net'
|
||||||
id='proxy_info'>
|
id='proxy_info'>
|
||||||
<query xmlns='http://jabber.org/protocol/disco#info'/>
|
<query xmlns='http://jabber.org/protocol/disco#info'/>
|
||||||
</iq>
|
</iq>
|
||||||
@ -261,8 +262,8 @@
|
|||||||
<p>The proxy will return its information. The Initiator SHOULD inspect each identity to see if it contains an identity of category "proxy" and type "bytestreams".</p>
|
<p>The proxy will return its information. The Initiator SHOULD inspect each identity to see if it contains an identity of category "proxy" and type "bytestreams".</p>
|
||||||
<example caption='Server Replies to Service Discovery Request'><![CDATA[
|
<example caption='Server Replies to Service Discovery Request'><![CDATA[
|
||||||
<iq type='result'
|
<iq type='result'
|
||||||
from='proxy.host3'
|
from='streamhostproxy.example.net'
|
||||||
to='initiator@host1/foo'
|
to='initiator@example.com/foo'
|
||||||
id='proxy_info'>
|
id='proxy_info'>
|
||||||
<query xmlns='http://jabber.org/protocol/disco#info'>
|
<query xmlns='http://jabber.org/protocol/disco#info'>
|
||||||
...
|
...
|
||||||
@ -280,8 +281,8 @@
|
|||||||
<p>If the StreamHost is a Proxy, the Initiator must first request the full network address used for bytestreaming (obviously this is not required if the StreamHost is the Initiator). This is done by sending an IQ-get to the proxy in the bytestreams namespace, as follows:</p>
|
<p>If the StreamHost is a Proxy, the Initiator must first request the full network address used for bytestreaming (obviously this is not required if the StreamHost is the Initiator). This is done by sending an IQ-get to the proxy in the bytestreams namespace, as follows:</p>
|
||||||
<example caption='Initiator Requests Network Address from Proxy'><![CDATA[
|
<example caption='Initiator Requests Network Address from Proxy'><![CDATA[
|
||||||
<iq type='get'
|
<iq type='get'
|
||||||
from='initiator@host1/foo'
|
from='initiator@example.com/foo'
|
||||||
to='proxy.host3'
|
to='streamhostproxy.example.net'
|
||||||
id='discover'>
|
id='discover'>
|
||||||
<query xmlns='http://jabber.org/protocol/bytestreams'/>
|
<query xmlns='http://jabber.org/protocol/bytestreams'/>
|
||||||
</iq>
|
</iq>
|
||||||
@ -303,12 +304,12 @@
|
|||||||
</ul>
|
</ul>
|
||||||
<example caption='Proxy Informs Initiator of Network Address'><![CDATA[
|
<example caption='Proxy Informs Initiator of Network Address'><![CDATA[
|
||||||
<iq type='result'
|
<iq type='result'
|
||||||
from='proxy.host3'
|
from='streamhostproxy.example.net'
|
||||||
to='initiator@host1/foo'
|
to='initiator@example.com/foo'
|
||||||
id='discover'>
|
id='discover'>
|
||||||
<query xmlns='http://jabber.org/protocol/bytestreams'>
|
<query xmlns='http://jabber.org/protocol/bytestreams'>
|
||||||
<streamhost
|
<streamhost
|
||||||
jid='proxy.host3'
|
jid='streamhostproxy.example.net'
|
||||||
host='24.24.24.1'
|
host='24.24.24.1'
|
||||||
zeroconf='_jabber.bytestreams'/>
|
zeroconf='_jabber.bytestreams'/>
|
||||||
</query>
|
</query>
|
||||||
@ -317,8 +318,8 @@
|
|||||||
<p>If the Initiator does not have permissions to initiate bytestreams on the Proxy for whatever reason (e.g., a proxy implementation may enable administrators to ban JIDs or domains from using the Proxy), the Proxy MUST return a &forbidden; error to the Initiator (for information about error syntax, refer to &xep0086;):</p>
|
<p>If the Initiator does not have permissions to initiate bytestreams on the Proxy for whatever reason (e.g., a proxy implementation may enable administrators to ban JIDs or domains from using the Proxy), the Proxy MUST return a &forbidden; error to the Initiator (for information about error syntax, refer to &xep0086;):</p>
|
||||||
<example caption='Proxy Returns Error to Initiator'><![CDATA[
|
<example caption='Proxy Returns Error to Initiator'><![CDATA[
|
||||||
<iq type='error'
|
<iq type='error'
|
||||||
from='initiator@host1/foo'
|
from='initiator@example.com/foo'
|
||||||
to='proxy.host3'
|
to='streamhostproxy.example.net'
|
||||||
id='discover'>
|
id='discover'>
|
||||||
<query xmlns='http://jabber.org/protocol/bytestreams'/>
|
<query xmlns='http://jabber.org/protocol/bytestreams'/>
|
||||||
<error code='403' type='auth'>
|
<error code='403' type='auth'>
|
||||||
@ -329,8 +330,8 @@
|
|||||||
<p>If the Proxy is unable to act as a StreamHost, the Proxy SHOULD return a ¬allowed; error to the Initiator:</p>
|
<p>If the Proxy is unable to act as a StreamHost, the Proxy SHOULD return a ¬allowed; error to the Initiator:</p>
|
||||||
<example caption='Proxy Returns Error to Initiator'><![CDATA[
|
<example caption='Proxy Returns Error to Initiator'><![CDATA[
|
||||||
<iq type='error'
|
<iq type='error'
|
||||||
from='initiator@host1/foo'
|
from='initiator@example.com/foo'
|
||||||
to='proxy.host3'
|
to='streamhostproxy.example.net'
|
||||||
id='discover'>
|
id='discover'>
|
||||||
<query xmlns='http://jabber.org/protocol/bytestreams'/>
|
<query xmlns='http://jabber.org/protocol/bytestreams'/>
|
||||||
<error code='405' type='cancel'>
|
<error code='405' type='cancel'>
|
||||||
@ -349,18 +350,18 @@
|
|||||||
<p>The protocol format is shown below.</p>
|
<p>The protocol format is shown below.</p>
|
||||||
<example caption='Initiation of Interaction'><![CDATA[
|
<example caption='Initiation of Interaction'><![CDATA[
|
||||||
<iq type='set'
|
<iq type='set'
|
||||||
from='initiator@host1/foo'
|
from='initiator@example.com/foo'
|
||||||
to='target@host2/bar'
|
to='target@example.org/bar'
|
||||||
id='initiate'>
|
id='initiate'>
|
||||||
<query xmlns='http://jabber.org/protocol/bytestreams'
|
<query xmlns='http://jabber.org/protocol/bytestreams'
|
||||||
sid='mySID'
|
sid='mySID'
|
||||||
mode='tcp'>
|
mode='tcp'>
|
||||||
<streamhost
|
<streamhost
|
||||||
jid='initiator@host1/foo'
|
jid='initiator@example.com/foo'
|
||||||
host='192.168.4.1'
|
host='192.168.4.1'
|
||||||
port='5086'/>
|
port='5086'/>
|
||||||
<streamhost
|
<streamhost
|
||||||
jid='proxy.host3'
|
jid='streamhostproxy.example.net'
|
||||||
host='24.24.24.1'
|
host='24.24.24.1'
|
||||||
zeroconf='_jabber.bytestreams'/>
|
zeroconf='_jabber.bytestreams'/>
|
||||||
</query>
|
</query>
|
||||||
@ -369,8 +370,8 @@
|
|||||||
<p>If the Target is unwilling to accept the bytestream, it MUST return a ¬acceptable; error to the Initiator.</p>
|
<p>If the Target is unwilling to accept the bytestream, it MUST return a ¬acceptable; error to the Initiator.</p>
|
||||||
<example caption='Target Refuses Bytestream'><![CDATA[
|
<example caption='Target Refuses Bytestream'><![CDATA[
|
||||||
<iq type='error'
|
<iq type='error'
|
||||||
from='target@host2/bar'
|
from='target@example.org/bar'
|
||||||
to='initiator@host1/foo'
|
to='initiator@example.com/foo'
|
||||||
id='initiate'>
|
id='initiate'>
|
||||||
<error code='406' type='auth'>
|
<error code='406' type='auth'>
|
||||||
<not-acceptable xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>
|
<not-acceptable xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>
|
||||||
@ -383,8 +384,8 @@
|
|||||||
<p>If the Target tries but is unable to connect to any of the StreamHosts and it does not wish to attempt a connection from its side, it MUST return a ¬found; error to the Initiator.</p>
|
<p>If the Target tries but is unable to connect to any of the StreamHosts and it does not wish to attempt a connection from its side, it MUST return a ¬found; error to the Initiator.</p>
|
||||||
<example caption='Target Is Unable to Connect to Any StreamHost and Wishes to End Transaction'><![CDATA[
|
<example caption='Target Is Unable to Connect to Any StreamHost and Wishes to End Transaction'><![CDATA[
|
||||||
<iq type='error'
|
<iq type='error'
|
||||||
from='target@host2/bar'
|
from='target@example.org/bar'
|
||||||
to='initiator@host1/foo'
|
to='initiator@example.com/foo'
|
||||||
id='initiate'>
|
id='initiate'>
|
||||||
<error code='404' type='cancel'>
|
<error code='404' type='cancel'>
|
||||||
<item-not-found xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>
|
<item-not-found xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>
|
||||||
@ -414,11 +415,11 @@ STATUS = X'00'
|
|||||||
<p>After the Target has authenticated with the StreamHost, it MUST send an IQ-result to the Initiator indicating which StreamHost was used.</p>
|
<p>After the Target has authenticated with the StreamHost, it MUST send an IQ-result to the Initiator indicating which StreamHost was used.</p>
|
||||||
<example caption='Target Notifies Initiator of Connection'><![CDATA[
|
<example caption='Target Notifies Initiator of Connection'><![CDATA[
|
||||||
<iq type='result'
|
<iq type='result'
|
||||||
from='target@host2/bar'
|
from='target@example.org/bar'
|
||||||
to='initiator@host1/foo'
|
to='initiator@example.com/foo'
|
||||||
id='initiate'>
|
id='initiate'>
|
||||||
<query xmlns='http://jabber.org/protocol/bytestreams'>
|
<query xmlns='http://jabber.org/protocol/bytestreams'>
|
||||||
<streamhost-used jid='proxy.host3'/>
|
<streamhost-used jid='streamhostproxy.example.net'/>
|
||||||
</query>
|
</query>
|
||||||
</iq>
|
</iq>
|
||||||
]]></example>
|
]]></example>
|
||||||
@ -441,11 +442,11 @@ STATUS = X'00'
|
|||||||
<p>In order for the bytestream to be used, it MUST first be activated by the StreamHost. If the StreamHost is the Initiator, this is straightforward and does not require any in-band protocol. However, if the StreamHost is a Proxy, the Initiator MUST send an in-band request to the StreamHost. This is done by sending an IQ-set to the Proxy, including an <activate/> element whose XML character data specifies the full JID of the Target.</p>
|
<p>In order for the bytestream to be used, it MUST first be activated by the StreamHost. If the StreamHost is the Initiator, this is straightforward and does not require any in-band protocol. However, if the StreamHost is a Proxy, the Initiator MUST send an in-band request to the StreamHost. This is done by sending an IQ-set to the Proxy, including an <activate/> element whose XML character data specifies the full JID of the Target.</p>
|
||||||
<example caption='Initiator Requests Activation of Bytestream'><![CDATA[
|
<example caption='Initiator Requests Activation of Bytestream'><![CDATA[
|
||||||
<iq type='set'
|
<iq type='set'
|
||||||
from='initiator@host1/foo'
|
from='initiator@example.com/foo'
|
||||||
to='proxy.host3'
|
to='streamhostproxy.example.net'
|
||||||
id='activate'>
|
id='activate'>
|
||||||
<query xmlns='http://jabber.org/protocol/bytestreams' sid='mySID'>
|
<query xmlns='http://jabber.org/protocol/bytestreams' sid='mySID'>
|
||||||
<activate>target@host2/bar</activate>
|
<activate>target@example.org/bar</activate>
|
||||||
</query>
|
</query>
|
||||||
</iq>
|
</iq>
|
||||||
]]></example>
|
]]></example>
|
||||||
@ -453,8 +454,8 @@ STATUS = X'00'
|
|||||||
<p>If the Proxy can fulfill the request, it MUST then respond to the Initiator with an IQ-result.</p>
|
<p>If the Proxy can fulfill the request, it MUST then respond to the Initiator with an IQ-result.</p>
|
||||||
<example caption='Proxy Informs Initiator of Activation'><![CDATA[
|
<example caption='Proxy Informs Initiator of Activation'><![CDATA[
|
||||||
<iq type='result'
|
<iq type='result'
|
||||||
from='proxy.host3'
|
from='streamhostproxy.example.net'
|
||||||
to='initiator@host1/foo'
|
to='initiator@example.com/foo'
|
||||||
id='activate'/>
|
id='activate'/>
|
||||||
]]></example>
|
]]></example>
|
||||||
<p>If the Proxy cannot fulfill the request, it MUST return an IQ-error to the Initiator; the following conditions are defined:</p>
|
<p>If the Proxy cannot fulfill the request, it MUST return an IQ-error to the Initiator; the following conditions are defined:</p>
|
||||||
@ -592,8 +593,8 @@ STATUS = X'00'
|
|||||||
<p>If an implementation supports UDP associations, it MUST advertise that separately by returning a feature of 'http://jabber.org/protocol/bytestreams#udp' in response to <cite>Service Discovery</cite> information requests.</p>
|
<p>If an implementation supports UDP associations, it MUST advertise that separately by returning a feature of 'http://jabber.org/protocol/bytestreams#udp' in response to <cite>Service Discovery</cite> information requests.</p>
|
||||||
<example caption='Initiator Sends Service Discovery Request to Target'><![CDATA[
|
<example caption='Initiator Sends Service Discovery Request to Target'><![CDATA[
|
||||||
<iq type='get'
|
<iq type='get'
|
||||||
from='initiator@host1/foo'
|
from='initiator@example.com/foo'
|
||||||
to='target@host2/bar'
|
to='target@example.org/bar'
|
||||||
id='hello2'>
|
id='hello2'>
|
||||||
<query xmlns='http://jabber.org/protocol/disco#info'/>
|
<query xmlns='http://jabber.org/protocol/disco#info'/>
|
||||||
</iq>
|
</iq>
|
||||||
@ -601,8 +602,8 @@ STATUS = X'00'
|
|||||||
<p>If the Target supports UDP associations, it MUST answer to that effect in the service discovery result.</p>
|
<p>If the Target supports UDP associations, it MUST answer to that effect in the service discovery result.</p>
|
||||||
<example caption='Target Replies to Service Discovery Request'><![CDATA[
|
<example caption='Target Replies to Service Discovery Request'><![CDATA[
|
||||||
<iq type='result'
|
<iq type='result'
|
||||||
from='target@host2/bar'
|
from='target@example.org/bar'
|
||||||
to='initiator@host1/foo'
|
to='initiator@example.com/foo'
|
||||||
id='hello2'>
|
id='hello2'>
|
||||||
<query xmlns='http://jabber.org/protocol/disco#info'>
|
<query xmlns='http://jabber.org/protocol/disco#info'>
|
||||||
<identity
|
<identity
|
||||||
@ -621,14 +622,14 @@ STATUS = X'00'
|
|||||||
<p>UDP associations are requested by setting the 'mode' attribute to a value of "udp" rather than "tcp".</p>
|
<p>UDP associations are requested by setting the 'mode' attribute to a value of "udp" rather than "tcp".</p>
|
||||||
<example caption='Initiation of Interaction (UDP)'><![CDATA[
|
<example caption='Initiation of Interaction (UDP)'><![CDATA[
|
||||||
<iq type='set'
|
<iq type='set'
|
||||||
from='initiator@host1/foo'
|
from='initiator@example.com/foo'
|
||||||
to='target@host2/bar'
|
to='target@example.org/bar'
|
||||||
id='initiate'>
|
id='initiate'>
|
||||||
<query xmlns='http://jabber.org/protocol/bytestreams'
|
<query xmlns='http://jabber.org/protocol/bytestreams'
|
||||||
sid='mySID'
|
sid='mySID'
|
||||||
mode='udp'>
|
mode='udp'>
|
||||||
<streamhost
|
<streamhost
|
||||||
jid='initiator@host1/foo'
|
jid='initiator@example.com/foo'
|
||||||
host='192.168.4.1'
|
host='192.168.4.1'
|
||||||
port='5086'/>
|
port='5086'/>
|
||||||
</query>
|
</query>
|
||||||
@ -666,8 +667,8 @@ DATA = Target or Initiator JID
|
|||||||
<p>Upon successful receipt by the StreamHost, the StreamHost MUST reply with a message notification indicating success:</p>
|
<p>Upon successful receipt by the StreamHost, the StreamHost MUST reply with a message notification indicating success:</p>
|
||||||
<example caption='StreamHost Notifies Target or Initiator of UDP Success'><![CDATA[
|
<example caption='StreamHost Notifies Target or Initiator of UDP Success'><![CDATA[
|
||||||
<message
|
<message
|
||||||
from='proxy.host3'
|
from='streamhostproxy.example.net'
|
||||||
to='target@host2/bar'
|
to='target@example.org/bar'
|
||||||
id='initiate'>
|
id='initiate'>
|
||||||
<udpsuccess xmlns='http://jabber.org/protocol/bytestreams' dstaddr='Value of Hash'/>
|
<udpsuccess xmlns='http://jabber.org/protocol/bytestreams' dstaddr='Value of Hash'/>
|
||||||
</message>
|
</message>
|
||||||
|
Loading…
Reference in New Issue
Block a user