1
0
mirror of https://github.com/moparisthebest/xeps synced 2024-11-25 10:42:19 -05:00
xeps/xep-0239.xml

169 lines
42 KiB
XML
Raw Normal View History

<?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>Binary XMPP</title>
<abstract>This specification defines Binary XMPP, an obviously superior representation of the Extensible Messaging and Presence Protocol (XMPP).</abstract>
&LEGALNOTICE;
<number>0239</number>
<status>Active</status>
<type>Humorous</type>
<sig>Standards</sig>
<approver>Council</approver>
<dependencies>
<spec>XMPP Core</spec>
</dependencies>
<supersedes/>
<supersededby/>
<shortname>N/A</shortname>
<author>
<firstname>Pedro</firstname>
<surname>Melo</surname>
<email>011011010110010101101100011011110100000001110011011010010110110101110000011011000110100101100011011010010110010001100001011001000110010100101110011011110111001001100111</email>
<jid>011011010110010101101100011011110100000001110011011010010110110101110000011011000110100101100011011010010110010001100001011001000110010100101110011011110111001001100111</jid>
</author>
<author>
<firstname>Peter</firstname>
<surname>Saint-Andre</surname>
<email>011100110111010001110000011001010111010001100101011100100100000001101010011000010110001001100010011001010111001000101110011011110111001001100111</email>
<jid>011100110111010001110000011001010111010001100101011100100100000001101010011000010110001001100010011001010111001000101110011011110111001001100111</jid>
</author>
<author>
<firstname>Fabio</firstname>
<surname>Forno</surname>
<email>011001100110000101100010011010010110111100101110011001100110111101110010011011100110111101000000011001110110110101100001011010010110110000101110011000110110111101101101</email>
<jid>011001100110011001000000011010100110000101100010011000100110010101110010001011100110001001101100011101010110010101101110011001000110111100101110011000110110111101101101</jid>
</author>
<revision>
<version>1.0</version>
<date>2008-04-01</date>
<initials>pm/psa/ff</initials>
<remark><p>April Fools!</p></remark>
</revision>
</header>
<section1 topic='Introduction' anchor='intro'>
<p>Everyone knows that binary data encodings are much more efficient than the Extensible Markup Language (XML). Given that XMPP is an application profile of XML, it is a wonder that XMPP works at all! Clearly, XMPP would benefit from a binary representation. Therefore, this specification defines Binary XMPP.</p>
</section1>
<section1 topic='Protocol' anchor='protocol'>
<p>&xmppcore; defines the traditional representation of XMPP. For instance, an empty presence stanza (such as might be provided on login) is as follows:</p>
<example caption='Traditional XMPP stanza'><![CDATA[
<presence/>
]]></example>
<p>That string can be represented in binary as follows:</p>
<example caption='Binary representation'><![CDATA[
0011110001110000011100100110010101110011011001010110111001100011011001010010111100111110
]]></example>
<p>The bit sequence is therefore represented in Binary XMPP as follows (line breaks are provided only for the purpose of readability):</p>
<example caption='Binary XMPP representation'><![CDATA[
<zero/><zero/><one/><one/><one/><one/><zero/><zero/>
<zero/><one/><one/><one/><zero/><zero/><zero/><zero/>
<zero/><one/><one/><one/><zero/><zero/><one/><zero/>
<zero/><one/><one/><zero/><zero/><one/><zero/><one/>
<zero/><one/><one/><one/><zero/><zero/><one/><one/>
<zero/><one/><one/><zero/><zero/><one/><zero/><one/>
<zero/><one/><one/><zero/><one/><one/><one/><zero/>
<zero/><one/><one/><zero/><zero/><zero/><one/><one/>
<zero/><one/><one/><zero/><zero/><one/><zero/><one/>
<zero/><zero/><one/><zero/><one/><one/><one/><one/>
<zero/><zero/><one/><one/><one/><one/><one/><zero/>
]]></example>
<p>This is an obvious improvement over the traditional representation.</p>
<p>It might be objected that the Binary XMPP representation requires a large number of XML elements. However, because all data is represented using only &lt;zero/&gt; and &lt;one/&gt;, the protocol can be significantly compressed using the standard ZLIB compression algorithm as defined in &rfc1950;, which SHOULD be enabled by default on the bxmpp port. Evidence from preliminary testing indicates that compression of Binary XMPP results in a representation less than 2% of the original size!</p>
<p>As a further simplification, Binary XMPP gets rid of the complicated stream negotiation process defined in RFC 3920. Instead, if a server supports Binary XMPP it advertises a special DNS SRV record _bxmpp._tcp in accordance with &rfc2782;. Furthermore, only one record is needed, thus saving precious port space. The RECOMMENDED port for Binary XMPP communication is 10110, but any port MAY be used.</p>
<p>To start a Binary XMPP stream, the sender simply connects via TCP at the advertised port and starts sending &lt;zero/&gt; and &lt;one/&gt; elements. The lack of a stream header simplifies XML parsing, introducing further performance improvemnets.</p>
</section1>
<section1 topic='Examples' anchor='examples'>
<p>The following examples showcase the tremendous efficiency of Binary XMPP using a complete session between a client and a server.</p>
<example caption='Client sends initial stream header (XMPP)'><![CDATA[
<stream:stream
from='juliet@example.com'
to='example.com'
version='1.0'
xml:lang='en'
xmlns='jabber:client'
xmlns:stream='http://etherx.jabber.org/streams'>
]]></example>
<example caption='Binary XMPP representation'><![CDATA[
<zero/><zero/><one/><one/><one/><one/><zero/><zero/><zero/><one/><one/><one/><zero/><zero/><one/><one/><zero/><one/><one/><one/><zero/><one/><zero/><zero/><zero/><one/><one/><one/><zero/><zero/><one/><zero/><zero/><one/><one/><zero/><zero/><one/><zero/><one/><zero/><one/><one/><zero/><zero/><zero/><zero/><one/><zero/><one/><one/><zero/><one/><one/><zero/><one/><zero/><zero/><one/><one/><one/><zero/><one/><zero/><zero/><one/><one/><one/><zero/><zero/><one/><one/><zero/><one/><one/><one/><zero/><one/><zero/><zero/><zero/><one/><one/><one/><zero/><zero/><one/><zero/><zero/><one/><one/><zero/><zero/><one/><zero/><one/><zero/><one/><one/><zero/><zero/><zero/><zero/><one/><zero/><one/><one/><zero/><one/><one/><zero/><one/><zero/><zero/><zero/><zero/><one/><one/><zero/><one/><zero/><zero/><zero/><zero/><one/><zero/><one/><zero/><zero/><zero/><one/><zero/><zero/><zero/><zero/><zero/><zero/><zero/><one/><zero/><zero/><zero/><zero/><zero/><zero/><zero/><one/><zero/><zero/><zero/><zero/><zero/><zero/><zero/><one/><zero/><zero/><zero/><zero/><zero/><zero/><zero/><one/><zero/><zero/><zero/><zero/><zero/><zero/><one/><one/><zero/><zero/><one/><one/><zero/><zero/><one/><one/><one/><zero/><zero/><one/><zero/><zero/><one/><one/><zero/><one/><one/><one/><one/><zero/><one/><one/><zero/><one/><one/><zero/><one/><zero/><zero/><one/><one/><one/><one/><zero/><one/><zero/><zero/><one/><zero/><zero/><one/><one/><one/><zero/><one/><one/><zero/><one/><zero/><one/><zero/><zero/><one/><one/><one/><zero/><one/><zero/><one/><zero/><one/><one/><zero/><one/><one/><zero/><zero/><zero/><one/><one/><zero/><one/><zero/><zero/><one/><zero/><one/><one/><zero/><zero/><one/><zero/><one/><zero/><one/><one/><one/><zero/><one/><zero/><zero/><zero/><one/><zero/><zero/><zero/><zero/><zero/><zero/><zero/><one/><one/><zero/><zero/><one/><zero/><one/><zero/><one/><one/><one/><one/><zero/><zero/><zero/><zero/><one/><one/><zero/><zero/><zero/><zero/><one/><zero/><one/><one/><zero/><one/><one/><zero/><one/><zero/><one/><one/><one/><zero/><zero/><zero/><zero/><zero/><one/><one/><zero/><one/><one/><zero/><zero/><zero/><one/><one/><zero/><zero/><one/><zero/><one/><zero/><zero/><one/><zero/><one/><one/><one/><zero/><zero/><one/><one/><zero/><zero/><zero/><one/><one/><zero/><one/><one/><zero/><one/><one/><one/><one/><zero/><one/><one/><zero/><one/><one/><zero/><one/><zero/><zero/><one/><zero/><zero/><one/><one/><one/><zero/><zero/><zero/><zero/><one/><one/><zero/><one/><zero/><zero/><zero/><zero/><one/><zero/><one/><zero/><zero/><zero/><one/><zero/><zero/><zero/><zero/><zero/><zero/><zero/><one/><zero/><zero/><zero/><zero/><zero/><zero/><zero/><one/><zero/><zero/><zero/><zero/><zero/><zero/><zero/><one/><zero/><zero/><zero/><zero/><zero/><zero/><zero/><one/><zero/><zero/><zero/><zero/><zero/><zero/><one/><one/><one/><zero/><one/><zero/><zero/><zero/><one/><one/><zero/><one/><one/><one/><one/><zero/><zero/><one/><one/><one/><one/><zero/><one/><zero/><zero/><one/><zero/><zero/><one/><one/><one/><zero/><one/><one/><zero/><zero/><one/><zero/><one/><zero/><one/><one/><one/><one/><zero/><zero/><zero/><zero/><one/><one/><zero/><zero/><zero/><zero/><one/><zero/><one/><one/><zero/><one/><one/><zero/><one/><zero/><one/><one/><one/><zero/><zero/><zero/><zero/><zero/><one/><one/><zero/><one/><one/><zero/><zero/><zero/><one/><one/><zero/><zero/><one/><zero/><one/><zero/><zero/><one/><zero/><one/><one/><one/><zero/><zero/><one/><one/><zero/><zero/><zero/><one/><one/><zero/><one/><one/><zero/><one/><one/><one/><one/><zero/><one/><one/><zero/><one/><one/><zero/><one/><zero/><zero/><one/><zero/><zero/><one/><one/><one/><zero/><zero/><zero/><zero/><one/><one/><zero/><one/><zero/><zero/><zero/><zero/><one/><zero/><one/><zero/><zero/><zero/><one/><zero/><zero/><zero/><zero/><zero/><zero/><zero/><one/><zero/><zero/><zero/><zero/><zero/><zero/><zero/><one/><zero/><zero/><zero/><zero/><zero/><zero/><zero/><one/><zero/><zero/><zero/><zero/><zero/><zero/><zero/><one/><zero/><zero/><zero/><zero/><zero/><zero/><one/><one/><one/><zero/><one/><one/><zero/><zero/><one/><one/><zero/><zero/><one/><zero/><on
]]></example>
<example caption='Server sends response stream header (XMPP)'><![CDATA[
<stream:stream
from='example.com'
id='t7AMCin9zjMNwQKDnplntZPIDEI='
to='juliet@example.com'
version='1.0'
xml:lang='en'
xmlns='jabber:client'
xmlns:stream='http://etherx.jabber.org/streams'>
]]></example>
<example caption='Binary XMPP representation'><![CDATA[
<zero/><zero/><one/><one/><one/><one/><zero/><zero/><zero/><one/><one/><one/><zero/><zero/><one/><one/><zero/><one/><one/><one/><zero/><one/><zero/><zero/><zero/><one/><one/><one/><zero/><zero/><one/><zero/><zero/><one/><one/><zero/><zero/><one/><zero/><one/><zero/><one/><one/><zero/><zero/><zero/><zero/><one/><zero/><one/><one/><zero/><one/><one/><zero/><one/><zero/><zero/><one/><one/><one/><zero/><one/><zero/><zero/><one/><one/><one/><zero/><zero/><one/><one/><zero/><one/><one/><one/><zero/><one/><zero/><zero/><zero/><one/><one/><one/><zero/><zero/><one/><zero/><zero/><one/><one/><zero/><zero/><one/><zero/><one/><zero/><one/><one/><zero/><zero/><zero/><zero/><one/><zero/><one/><one/><zero/><one/><one/><zero/><one/><zero/><zero/><zero/><zero/><one/><one/><zero/><one/><zero/><zero/><zero/><zero/><one/><zero/><one/><zero/><zero/><zero/><one/><zero/><zero/><zero/><zero/><zero/><zero/><zero/><one/><zero/><zero/><zero/><zero/><zero/><zero/><zero/><one/><zero/><zero/><zero/><zero/><zero/><zero/><zero/><one/><zero/><zero/><zero/><zero/><zero/><zero/><zero/><one/><zero/><zero/><zero/><zero/><zero/><zero/><one/><one/><zero/><zero/><one/><one/><zero/><zero/><one/><one/><one/><zero/><zero/><one/><zero/><zero/><one/><one/><zero/><one/><one/><one/><one/><zero/><one/><one/><zero/><one/><one/><zero/><one/><zero/><zero/><one/><one/><one/><one/><zero/><one/><zero/><zero/><one/><zero/><zero/><one/><one/><one/><zero/><one/><one/><zero/><zero/><one/><zero/><one/><zero/><one/><one/><one/><one/><zero/><zero/><zero/><zero/><one/><one/><zero/><zero/><zero/><zero/><one/><zero/><one/><one/><zero/><one/><one/><zero/><one/><zero/><one/><one/><one/><zero/><zero/><zero/><zero/><zero/><one/><one/><zero/><one/><one/><zero/><zero/><zero/><one/><one/><zero/><zero/><one/><zero/><one/><zero/><zero/><one/><zero/><one/><one/><one/><zero/><zero/><one/><one/><zero/><zero/><zero/><one/><one/><zero/><one/><one/><zero/><one/><one/><one/><one/><zero/><one/><one/><zero/><one/><one/><zero/><one/><zero/><zero/><one/><zero/><zero/><one/><one/><one/><zero/><zero/><zero/><zero/><one/><one/><zero/><one/><zero/><zero/><zero/><zero/><one/><zero/><one/><zero/><zero/><zero/><one/><zero/><zero/><zero/><zero/><zero/><zero/><zero/><one/><zero/><zero/><zero/><zero/><zero/><zero/><zero/><one/><zero/><zero/><zero/><zero/><zero/><zero/><zero/><one/><zero/><zero/><zero/><zero/><zero/><zero/><zero/><one/><zero/><zero/><zero/><zero/><zero/><zero/><one/><one/><zero/><one/><zero/><zero/><one/><zero/><one/><one/><zero/><zero/><one/><zero/><zero/><zero/><zero/><one/><one/><one/><one/><zero/><one/><zero/><zero/><one/><zero/><zero/><one/><one/><one/><zero/><one/><one/><one/><zero/><one/><zero/><zero/><zero/><zero/><one/><one/><zero/><one/><one/><one/><zero/><one/><zero/><zero/><zero/><zero/><zero/><one/><zero/><one/><zero/><zero/><one/><one/><zero/><one/><zero/><one/><zero/><zero/><zero/><zero/><one/><one/><zero/><one/><one/><zero/><one/><zero/><zero/><one/><zero/><one/><one/><zero/><one/><one/><one/><zero/><zero/><zero/><one/><one/><one/><zero/><zero/><one/><zero/><one/><one/><one/><one/><zero/><one/><zero/><zero/><one/><one/><zero/><one/><zero/><one/><zero/><zero/><one/><zero/><zero/><one/><one/><zero/><one/><zero/><one/><zero/><zero/><one/><one/><one/><zero/><zero/><one/><one/><one/><zero/><one/><one/><one/><zero/><one/><zero/><one/><zero/><zero/><zero/><one/><zero/><one/><zero/><zero/><one/><zero/><one/><one/><zero/><one/><zero/><zero/><zero/><one/><zero/><zero/><zero/><one/><one/><zero/><one/><one/><one/><zero/><zero/><one/><one/><one/><zero/><zero/><zero/><zero/><zero/><one/><one/><zero/><one/><one/><zero/><zero/><zero/><one/><one/><zero/><one/><one/><one/><zero/><zero/><one/><one/><one/><zero/><one/><zero/><zero/><zero/><one/><zero/><one/><one/><zero/><one/><zero/><zero/><one/><zero/><one/><zero/><zero/><zero/><zero/><zero/><one/><zero/><zero/><one/><zero/><zero/><one/><zero/><one/><zero/><zero/><zero/><one/><zero/><zero/><zero/><one/><zero/><zero/><zero/><one/><zero/><one/><zero/><one/><zero/><zero/><one/><zero/><zero/><one/><zero/><zero/><one/><one/><one/><one/><zero/><one/><zero
]]></example>
<example caption='Server sends stream features (XMPP)'><![CDATA[
<stream:features>
<starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'>
<required/>
</starttls>
</stream:features>
]]></example>
<example caption='Binary XMPP representation'><![CDATA[
<zero/><zero/><one/><one/><one/><one/><zero/><zero/><zero/><one/><one/><one/><zero/><zero/><one/><one/><zero/><one/><one/><one/><zero/><one/><zero/><zero/><zero/><one/><one/><one/><zero/><zero/><one/><zero/><zero/><one/><one/><zero/><zero/><one/><zero/><one/><zero/><one/><one/><zero/><zero/><zero/><zero/><one/><zero/><one/><one/><zero/><one/><one/><zero/><one/><zero/><zero/><one/><one/><one/><zero/><one/><zero/><zero/><one/><one/><zero/><zero/><one/><one/><zero/><zero/><one/><one/><zero/><zero/><one/><zero/><one/><zero/><one/><one/><zero/><zero/><zero/><zero/><one/><zero/><one/><one/><one/><zero/><one/><zero/><zero/><zero/><one/><one/><one/><zero/><one/><zero/><one/><zero/><one/><one/><one/><zero/><zero/><one/><zero/><zero/><one/><one/><zero/><zero/><one/><zero/><one/><zero/><one/><one/><one/><zero/><zero/><one/><one/><zero/><zero/><one/><one/><one/><one/><one/><zero/><zero/><zero/><zero/><zero/><one/><one/><zero/><one/><zero/><zero/><zero/><zero/><one/><zero/><one/><zero/><zero/><zero/><one/><zero/><zero/><zero/><zero/><zero/><zero/><zero/><one/><zero/><zero/><zero/><zero/><zero/><zero/><zero/><one/><zero/><zero/><zero/><zero/><zero/><zero/><zero/><one/><zero/><zero/><zero/><zero/><zero/><zero/><zero/><one/><zero/><zero/><zero/><zero/><zero/><zero/><zero/><one/><one/><one/><one/><zero/><zero/><zero/><one/><one/><one/><zero/><zero/><one/><one/><zero/><one/><one/><one/><zero/><one/><zero/><zero/><zero/><one/><one/><zero/><zero/><zero/><zero/><one/><zero/><one/><one/><one/><zero/><zero/><one/><zero/><zero/><one/><one/><one/><zero/><one/><zero/><zero/><zero/><one/><one/><one/><zero/><one/><zero/><zero/><zero/><one/><one/><zero/><one/><one/><zero/><zero/><zero/><one/><one/><one/><zero/><zero/><one/><one/><zero/><zero/><one/><zero/><zero/><zero/><zero/><zero/><zero/><one/><one/><one/><one/><zero/><zero/><zero/><zero/><one/><one/><zero/><one/><one/><zero/><one/><zero/><one/><one/><zero/><one/><one/><zero/><zero/><zero/><one/><one/><zero/><one/><one/><one/><zero/><zero/><one/><one/><one/><zero/><zero/><one/><one/><zero/><zero/><one/><one/><one/><one/><zero/><one/><zero/><zero/><one/><zero/><zero/><one/><one/><one/><zero/><one/><one/><one/><zero/><one/><zero/><one/><zero/><one/><one/><one/><zero/><zero/><one/><zero/><zero/><one/><one/><zero/><one/><one/><one/><zero/><zero/><zero/><one/><one/><one/><zero/><one/><zero/><zero/><one/><one/><zero/><one/><zero/><zero/><one/><zero/><one/><one/><zero/><zero/><one/><zero/><one/><zero/><one/><one/><one/><zero/><one/><zero/><zero/><zero/><one/><one/><zero/><zero/><one/><one/><zero/><zero/><zero/><one/><one/><one/><zero/><one/><zero/><zero/><one/><one/><one/><zero/><zero/><zero/><zero/><zero/><one/><one/><zero/><zero/><zero/><zero/><one/><zero/><one/><one/><one/><zero/><zero/><one/><zero/><zero/><one/><one/><zero/><zero/><zero/><zero/><one/><zero/><one/><one/><zero/><one/><one/><zero/><one/><zero/><one/><one/><one/><zero/><zero/><one/><one/><zero/><zero/><one/><one/><one/><zero/><one/><zero/><zero/><one/><one/><one/><one/><zero/><zero/><zero/><zero/><one/><one/><zero/><one/><one/><zero/><one/><zero/><one/><one/><zero/><one/><one/><zero/><zero/><zero/><zero/><one/><one/><one/><zero/><one/><zero/><zero/><one/><one/><zero/><one/><one/><one/><zero/><zero/><one/><one/><one/><zero/><zero/><one/><one/><zero/><zero/><one/><one/><one/><zero/><one/><zero/><zero/><one/><one/><one/><one/><zero/><zero/><zero/><zero/><one/><one/><zero/><one/><one/><zero/><one/><zero/><one/><one/><one/><zero/><zero/><zero/><zero/><zero/><one/><one/><one/><zero/><zero/><zero/><zero/><zero/><zero/><one/><zero/><one/><one/><zero/><one/><zero/><one/><one/><one/><zero/><one/><zero/><zero/><zero/><one/><one/><zero/><one/><one/><zero/><zero/><zero/><one/><one/><one/><zero/><zero/><one/><one/><zero/><zero/><one/><zero/><zero/><one/><one/><one/><zero/><zero/><one/><one/><one/><one/><one/><zero/><zero/><zero/><zero/><zero/><one/><one/><zero/><one/><zero/><zero/><zero/><zero/><one/><zero/><one/><zero/><zero/><zero/><one/><zero/><zero/><zero/><zero/><zero/><zero/><zero/><one/><zero/><zero/><zero/><zero/><zero/><zero/><zero/><one/><z
]]></example>
<example caption='Client sends STARTTLS command to server'><![CDATA[
<starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>
]]></example>
<example caption='Binary XMPP representation'><![CDATA[
<zero/><zero/><one/><one/><one/><one/><zero/><zero/><zero/><one/><one/><one/><zero/><zero/><one/><one/><zero/><one/><one/><one/><zero/><one/><zero/><zero/><zero/><one/><one/><zero/><zero/><zero/><zero/><one/><zero/><one/><one/><one/><zero/><zero/><one/><zero/><zero/><one/><one/><one/><zero/><one/><zero/><zero/><zero/><one/><one/><one/><zero/><one/><zero/><zero/><zero/><one/><one/><zero/><one/><one/><zero/><zero/><zero/><one/><one/><one/><zero/><zero/><one/><one/><zero/><zero/><one/><zero/><zero/><zero/><zero/><zero/><zero/><one/><one/><one/><one/><zero/><zero/><zero/><zero/><one/><one/><zero/><one/><one/><zero/><one/><zero/><one/><one/><zero/><one/><one/><zero/><zero/><zero/><one/><one/><zero/><one/><one/><one/><zero/><zero/><one/><one/><one/><zero/><zero/><one/><one/><zero/><zero/><one/><one/><one/><one/><zero/><one/><zero/><zero/><one/><zero/><zero/><one/><one/><one/><zero/><one/><one/><one/><zero/><one/><zero/><one/><zero/><one/><one/><one/><zero/><zero/><one/><zero/><zero/><one/><one/><zero/><one/><one/><one/><zero/><zero/><zero/><one/><one/><one/><zero/><one/><zero/><zero/><one/><one/><zero/><one/><zero/><zero/><one/><zero/><one/><one/><zero/><zero/><one/><zero/><one/><zero/><one/><one/><one/><zero/><one/><zero/><zero/><zero/><one/><one/><zero/><zero/><one/><one/><zero/><zero/><zero/><one/><one/><one/><zero/><one/><zero/><zero/><one/><one/><one/><zero/><zero/><zero/><zero/><zero/><one/><one/><zero/><zero/><zero/><zero/><one/><zero/><one/><one/><one/><zero/><zero/><one/><zero/><zero/><one/><one/><zero/><zero/><zero/><zero/><one/><zero/><one/><one/><zero/><one/><one/><zero/><one/><zero/><one/><one/><one/><zero/><zero/><one/><one/><zero/><zero/><one/><one/><one/><zero/><one/><zero/><zero/><one/><one/><one/><one/><zero/><zero/><zero/><zero/><one/><one/><zero/><one/><one/><zero/><one/><zero/><one/><one/><zero/><one/><one/><zero/><zero/><zero/><zero/><one/><one/><one/><zero/><one/><zero/><zero/><one/><one/><zero/><one/><one/><one/><zero/><zero/><one/><one/><one/><zero/><zero/><one/><one/><zero/><zero/><one/><one/><one/><zero/><one/><zero/><zero/><one/><one/><one/><one/><zero/><zero/><zero/><zero/><one/><one/><zero/><one/><one/><zero/><one/><zero/><one/><one/><one/><zero/><zero/><zero/><zero/><zero/><one/><one/><one/><zero/><zero/><zero/><zero/><zero/><zero/><one/><zero/><one/><one/><zero/><one/><zero/><one/><one/><one/><zero/><one/><zero/><zero/><zero/><one/><one/><zero/><one/><one/><zero/><zero/><zero/><one/><one/><one/><zero/><zero/><one/><one/><zero/><zero/><one/><zero/><zero/><one/><one/><one/><zero/><zero/><one/><zero/><one/><one/><one/><one/><zero/><zero/><one/><one/><one/><one/><one/><zero/>
]]></example>
<example caption='Server informs client that it is allowed to proceed'><![CDATA[
<proceed xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>
]]></example>
<example caption='Binary XMPP representation'><![CDATA[
<zero/><zero/><one/><one/><one/><one/><zero/><zero/><zero/><one/><one/><one/><zero/><zero/><zero/><zero/><zero/><one/><one/><one/><zero/><zero/><one/><zero/><zero/><one/><one/><zero/><one/><one/><one/><one/><zero/><one/><one/><zero/><zero/><zero/><one/><one/><zero/><one/><one/><zero/><zero/><one/><zero/><one/><zero/><one/><one/><zero/><zero/><one/><zero/><one/><zero/><one/><one/><zero/><zero/><one/><zero/><zero/><zero/><zero/><one/><zero/><zero/><zero/><zero/><zero/><zero/><one/><one/><one/><one/><zero/><zero/><zero/><zero/><one/><one/><zero/><one/><one/><zero/><one/><zero/><one/><one/><zero/><one/><one/><zero/><zero/><zero/><one/><one/><zero/><one/><one/><one/><zero/><zero/><one/><one/><one/><zero/><zero/><one/><one/><zero/><zero/><one/><one/><one/><one/><zero/><one/><zero/><zero/><one/><zero/><zero/><one/><one/><one/><zero/><one/><one/><one/><zero/><one/><zero/><one/><zero/><one/><one/><one/><zero/><zero/><one/><zero/><zero/><one/><one/><zero/><one/><one/><one/><zero/><zero/><zero/><one/><one/><one/><zero/><one/><zero/><zero/><one/><one/><zero/><one/><zero/><zero/><one/><zero/><one/><one/><zero/><zero/><one/><zero/><one/><zero/><one/><one/><one/><zero/><one/><zero/><zero/><zero/><one/><one/><zero/><zero/><one/><one/><zero/><zero/><zero/><one/><one/><one/><zero/><one/><zero/><zero/><one/><one/><one/><zero/><zero/><zero/><zero/><zero/><one/><one/><zero/><zero/><zero/><zero/><one/><zero/><one/><one/><one/><zero/><zero/><one/><zero/><zero/><one/><one/><zero/><zero/><zero/><zero/><one/><zero/><one/><one/><zero/><one/><one/><zero/><one/><zero/><one/><one/><one/><zero/><zero/><one/><one/><zero/><zero/><one/><one/><one/><zero/><one/><zero/><zero/><one/><one/><one/><one/><zero/><zero/><zero/><zero/><one/><one/><zero/><one/><one/><zero/><one/><zero/><one/><one/><zero/><one/><one/><zero/><zero/><zero/><zero/><one/><one/><one/><zero/><one/><zero/><zero/><one/><one/><zero/><one/><one/><one/><zero/><zero/><one/><one/><one/><zero/><zero/><one/><one/><zero/><zero/><one/><one/><one/><zero/><one/><zero/><zero/><one/><one/><one/><one/><zero/><zero/><zero/><zero/><one/><one/><zero/><one/><one/><zero/><one/><zero/><one/><one/><one/><zero/><zero/><zero/><zero/><zero/><one/><one/><one/><zero/><zero/><zero/><zero/><zero/><zero/><one/><zero/><one/><one/><zero/><one/><zero/><one/><one/><one/><zero/><one/><zero/><zero/><zero/><one/><one/><zero/><one/><one/><zero/><zero/><zero/><one/><one/><one/><zero/><zero/><one/><one/><zero/><zero/><one/><zero/><zero/><one/><one/><one/><zero/><zero/><one/><zero/><one/><one/><one/><one/><zero/><zero/><one/><one/><one/><one/><one/><zero/>
]]></example>
<p>And so on. Much more efficient, eh?</p>
</section1>
<section1 topic='Internationalization Considerations' anchor='i18n'>
<p>The &lt;zero/&gt; and &lt;one/&gt; elements use English-language words as the element names. Clearly it would have been preferable to define an i18n-friendly binding, such that German-language applications could encode Binary XMPP using the &lt;null/&gt; and &lt;eins/&gt; elements, Greek-language applications could use the &lt;&#956;&#951;&#948;&#8051;&#957;/&gt; and &lt;&#7953;&#957;&#945;/&gt; elements, etc. Flexibility regarding internationalization of the element names may be added in Binary XMPP 2.0.</p>
</section1>
<section1 topic='Security Considerations' anchor='security'>
<p>Because it is simply an alternative representation of XMPP, Binary XMPP inherits all of the security characteristics of XMPP (the good, the bad, and the ugly).</p>
<p>Use of port 10110 is obviously secure, since 10110 in base 2 is 22 in base 10, the same default port as Secure Shell (see &rfc4251;).</p>
</section1>
<section1 topic='IANA Considerations' anchor='iana'>
<p>The &REGISTRAR; shall work with &IANA; to register "bxmpp" as a keyword for port 10111.</p>
</section1>
<section1 topic='XMPP Registrar Considerations' anchor='registrar'>
<p>The XMPP Registrar shall include 'urn:xmpp:bxmpp' in its registry of protocol namespaces (see &NAMESPACES;).</p>
</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:bxmpp'
xmlns='urn:xmpp:bxmpp'
elementFormDefault='qualified'>
<xs:element name='one' type='empty'/>
<xs:element name='zero' type='empty'/>
<xs:simpleType name='empty'>
<xs:restriction base='xs:string'>
<xs:enumeration value=''/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
]]></code>
</section1>
<section1 topic='Acknowledgements' anchor='ack'>
<p>Thanks to Kevin Smith for his feedback.</p>
</section1>
</xep>