mirror of
https://github.com/moparisthebest/xeps
synced 2024-11-30 05:02:27 -05:00
133 lines
4.7 KiB
XML
133 lines
4.7 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>Server IP Check</title>
|
||
|
<abstract>This specification defines a simple XMPP extension that enables a client to discover its external IP address.</abstract>
|
||
|
&LEGALNOTICE;
|
||
|
<number>xxxx</number>
|
||
|
<status>ProtoXEP</status>
|
||
|
<type>Standards Track</type>
|
||
|
<sig>Standards</sig>
|
||
|
<approver>Council</approver>
|
||
|
<dependencies>
|
||
|
<spec>XMPP Core</spec>
|
||
|
</dependencies>
|
||
|
<supersedes/>
|
||
|
<supersededby/>
|
||
|
<shortname>sic</shortname>
|
||
|
&stpeter;
|
||
|
<revision>
|
||
|
<version>0.0.2</version>
|
||
|
<date>2009-03-10</date>
|
||
|
<initials>psa</initials>
|
||
|
<remark><p>Removed client inclusion of its IP address; added IPv6 example.</p></remark>
|
||
|
</revision>
|
||
|
<revision>
|
||
|
<version>0.0.1</version>
|
||
|
<date>2009-03-10</date>
|
||
|
<initials>psa</initials>
|
||
|
<remark><p>First draft.</p></remark>
|
||
|
</revision>
|
||
|
</header>
|
||
|
|
||
|
<section1 topic='Introduction' anchor='intro'>
|
||
|
<p>There are times when a client might want or need to discover what its external Internet Protocol (IP) address is, e.g. when gathering transport candidates for &xep0065; or &xep0176;. One way to do so is for the client to ask the XMPP server to which it has connected. This simple specification defines such a method.</p>
|
||
|
</section1>
|
||
|
|
||
|
<section1 topic='Protocol' anchor='proto'>
|
||
|
<p>First the client sends an IQ-get request to its server.</p>
|
||
|
<example caption="Client requests its IP address from the server"><![CDATA[
|
||
|
<iq from='romeo@montague.lit/orchard'
|
||
|
id='ik2s7159'
|
||
|
type='get'>
|
||
|
<ip xmlns='urn:xmpp:sic:0'/>
|
||
|
</iq>
|
||
|
]]></example>
|
||
|
<p>The server then returns an IQ-result containing an <ip/> element whose XML character data specifies the client's IP address according to the server.</p>
|
||
|
<example caption="Server returns IP address"><![CDATA[
|
||
|
<iq id='ik2s7159'
|
||
|
to='romeo@montague.lit/orchard'
|
||
|
type='result'>
|
||
|
<ip xmlns='urn:xmpp:sic:0'>192.168.4.1</ip>
|
||
|
</iq>
|
||
|
]]></example>
|
||
|
<p>The IP address could be IPv4 or IPv6.</p>
|
||
|
<example caption="Server returns IPv6 address"><![CDATA[
|
||
|
<iq id='ik2s7159'
|
||
|
to='romeo@montague.lit/orchard'
|
||
|
type='result'>
|
||
|
<ip xmlns='urn:xmpp:sic:0'>2001:db8::9:1</ip>
|
||
|
</iq>
|
||
|
]]></example>
|
||
|
</section1>
|
||
|
|
||
|
<section1 topic='Determining Support' anchor='support'>
|
||
|
<p>If an entity supports this protocol, it MUST report that by including a service discovery feature of "urn:xmpp:sic:0" in response to disco#info requests &NSNOTE;.</p>
|
||
|
<example caption="Service discovery information request"><![CDATA[
|
||
|
<iq from='romeo@montague.lit/orchard'
|
||
|
id='ux71f395'
|
||
|
to='montague.lit'
|
||
|
type='get'>
|
||
|
<query xmlns='http://jabber.org/protocol/disco#info'/>
|
||
|
</iq>
|
||
|
]]></example>
|
||
|
<example caption="Service discovery information response"><![CDATA[
|
||
|
<iq from='montague.lit'
|
||
|
id='ux71f395'
|
||
|
to='romeo@montague.lit/orchard'
|
||
|
type='result'>
|
||
|
<query xmlns='http://jabber.org/protocol/disco#info'>
|
||
|
<feature var='urn:xmpp:sic:0'/>
|
||
|
</query>
|
||
|
</iq>
|
||
|
]]></example>
|
||
|
</section1>
|
||
|
|
||
|
<section1 topic='Security Considerations' anchor='security'>
|
||
|
<p>&rfc3920; specifies that client IP addresses shall not be made public. If a client requests its own IP address, that policy is not violated. However, a server MUST NOT return the IP address of another client (e.g., if a connected client sends a SIC request to the bare JID of another user); instead, it MUST return a &forbidden; error.</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-ns'>
|
||
|
<p>This specification defines the following XML namespace:</p>
|
||
|
<ul>
|
||
|
<li>urn:xmpp:sic:0</li>
|
||
|
</ul>
|
||
|
<p>Upon advancement of this specification from a status of Experimental to a status of Draft, the ®ISTRAR; shall add the foregoing namespace to the registry located at &NAMESPACES;, as described in Section 4 of &xep0053;.</p>
|
||
|
</section2>
|
||
|
<section2 topic='Protocol Versioning' anchor='registrar-versioning'>
|
||
|
&NSVER;
|
||
|
</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='urn:xmpp:sic:0'
|
||
|
xmlns='urn:xmpp:sic:0'
|
||
|
elementFormDefault='qualified'>
|
||
|
|
||
|
<xs:element name='ip' type='xs:string'/>
|
||
|
|
||
|
</xs:schema>
|
||
|
]]></code>
|
||
|
</section1>
|
||
|
|
||
|
<section1 topic='Acknowledgements' anchor='acks'>
|
||
|
<p>Thanks to Thiago Camargo and Diana Cionoiu for their prodding to define this extension.</p>
|
||
|
</section1>
|
||
|
|
||
|
</xep>
|