以下示例展示一个服务器和对端服务器协商XML流,交换XML节,和关闭已协商的流的数据流. 初始化服务器("Server1")是im.example.com; 接收服务器("Server2")是example.net 并且要求使用TLS; im.example.com递交一个证书并通过SASL EXTERNAL机制验证. 假定在发送初始化流头之前,Server1已经解析了一个SRV记录_xmpp-server._tcp.example.net并且已经打开了一个TCP连接到已解析的IP地址的声明的端口上. 注意Server1怎样声明内容命名空间"jabber:server"作为缺省的命名空间并为流相关的元素使用前缀,反之Server2使用免前缀标准.
TLS
第一步: Server1初始化流到Server2:
S1: <stream:stream
from='im.example.com'
to='example.net'
version='1.0'
xmlns='jabber:server'
xmlns:stream='http://etherx.jabber.org/streams'>
第二步: Server2发送一个应答流头到Server1来应答:
第三步: Server2发送流特性给Server1(在这个点上只有STARTTLS扩展,它是强制协商的):
第四步: Server1发送STARTTLS指令给Server2:
第五步: Server2通知Server1它被允许继续:
第五步(替代): Server2通知Server1 STARTTLS协商失败了,关闭流,并中止TCP连接(于是,流协商过程以不成功结束并且双方不再进行下一步):
第六步: Server1和Server2尝试通过TCP完成TLS协商(详见TLS).
第七步: 如果TLS协商成功了,Server1在受TLS保护的TCP连接上初始化一个新流到Server2:
第七步(替代): 如果TLS协商不成功,Server2关闭TCP连接(所以,流协商过程以不成功结束并且双方不再进行下一步).
SASL
第八步: Server2发送一个应答流头给Server1并带上可用的流特性(包括优先的SASL EXTERNAL机制):
第九步: Server1选择EXTERNAL机制(包含一个"="的空应答):
第十步: Server2返回成功:
第十步(替代): Server2通知Server1验证失败了(所以,0)">'urn:ietf:params:xml:ns:xmpp-sasl'> <not-authorized/> </failure> </stream>