﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-面对现实，超越自己-随笔分类-Openfire&amp;Gloox</title><link>http://www.cppblog.com/wanghaiguang/category/20962.html</link><description>逆水行舟，不进则退</description><language>zh-cn</language><lastBuildDate>Thu, 04 Sep 2014 19:10:53 GMT</lastBuildDate><pubDate>Thu, 04 Sep 2014 19:10:53 GMT</pubDate><ttl>60</ttl><item><title>Gloox文件传输小记</title><link>http://www.cppblog.com/wanghaiguang/archive/2014/09/02/208206.html</link><dc:creator>王海光</dc:creator><author>王海光</author><pubDate>Tue, 02 Sep 2014 09:18:00 GMT</pubDate><guid>http://www.cppblog.com/wanghaiguang/archive/2014/09/02/208206.html</guid><wfw:comment>http://www.cppblog.com/wanghaiguang/comments/208206.html</wfw:comment><comments>http://www.cppblog.com/wanghaiguang/archive/2014/09/02/208206.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wanghaiguang/comments/commentRss/208206.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wanghaiguang/services/trackbacks/208206.html</trackback:ping><description><![CDATA[<span style="font-family: Verdana; font-size: 14pt;">使用版本：1.1.10</span><br /><br /><span style="font-size: 14pt; font-family: Verdana;">今天弄了一下Gloox中自带的收发文件例子，收发文件的例子都是好使的，只不过，在调试过程中需要注意一些问题，下面将我遇到的问题做个记录（例子中以In-Band Bytestreams方式收发）</span><span style="font-size: 14pt; font-family: Verdana;">。</span><br /><br /><span style="font-size: 14pt; font-family: Verdana;"><strong>1、发送文件过程中遇到404错误</strong></span><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff; font-family: Verdana;">&lt;</span><span style="color: #800000; font-family: Verdana;">iq&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">type</span><span style="color: #0000ff; font-family: Verdana;">='error'&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">id</span><span style="color: #0000ff; font-family: Verdana;">='uid-8509a748-00000005'&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">to</span><span style="color: #0000ff; font-family: Verdana;">='wanghaiguang@wanghaiguang-wk/glooxsendfile'from='www@192.168.60.67/Spark&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">2.6.3'</span><span style="color: #0000ff; font-family: Verdana;">&gt;&lt;</span><span style="color: #800000; font-family: Verdana;">sixmlns</span><span style="color: #0000ff; font-family: Verdana;">='http://jabber.org/protocol/si'&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">id</span><span style="color: #0000ff; font-family: Verdana;">='uid-8509a748-00000006'&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">profile</span><span style="color: #0000ff; font-family: Verdana;">='http://jabber.org/protocol/si/profile/file-transfer'&gt;&lt;file&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">xmlns</span><span style="color: #0000ff; font-family: Verdana;">='http://jabber.org/protocol/si/profile/file-transfer'&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">name</span><span style="color: #0000ff; font-family: Verdana;">='d:\offline.bmp'&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">size</span><span style="color: #0000ff; font-family: Verdana;">='6998'/&gt;&lt;feature&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">xmlns</span><span style="color: #0000ff; font-family: Verdana;">='http://jabber.org/protocol/feature-neg'&gt;&lt;x&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">xmlns</span><span style="color: #0000ff; font-family: Verdana;">='jabber:x:data'&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">type</span><span style="color: #0000ff; font-family: Verdana;">='form'&gt;&lt;field&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">type</span><span style="color: #0000ff; font-family: Verdana;">='list-single'var='stream-method'&gt;&lt;option&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">label</span><span style="color: #0000ff; font-family: Verdana;">='ibb'&gt;&lt;value&gt;http://jabber.org/protocol/ibb&lt;/value&gt;&lt;/option&gt;&lt;option&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">label</span><span style="color: #0000ff; font-family: Verdana;">='oob'&gt;&lt;value&gt;jabber:iq:oob&lt;/value&gt;&lt;/option&gt;&lt;option&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">label</span><span style="color: #0000ff; font-family: Verdana;">='s5b'&gt;&lt;value&gt;http://jabber.org/protocol/bytestreams&lt;/value&gt;&lt;/option&gt;&lt;value/&gt;&lt;/field&gt;&lt;/x&gt;&lt;/feature&gt;&lt;/si&gt;&lt;error&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">code</span><span style="color: #0000ff; font-family: Verdana;">='404'&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">type</span><span style="color: #0000ff; font-family: Verdana;">='cancel'&gt;&lt;remote-server-not-found&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">xmlns</span><span style="color: #0000ff; font-family: Verdana;">='urn:ietf:params:xml:ns:xmpp-stanzas'/&gt;&lt;/error&gt;&lt;/iq&gt;</span></div><br /><span style="font-size: 14pt; font-family: Verdana;">可以将ip地址换成服务器名称试试</span><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff; font-family: Verdana;">JID</span><span style="font-family: Verdana;">&nbsp;j(&nbsp;"www@192.168.60.67/gloox"&nbsp;);&#8212;&#8212;&gt;&nbsp;</span><span style="color: #0000ff; font-family: Verdana;">JID&nbsp;</span><span style="font-family: Verdana;">j(&nbsp;"www@wanghaiguang-wk/gloox"&nbsp;);</span></div><div></div><strong style="font-size: 14pt; font-family: Verdana;"><br />2、</strong><strong style="font-family: Verdana; font-size: 18.66666603088379px;">发送文件过程中遇到</strong><strong style="font-size: 14pt; font-family: Verdana;">503错误</strong><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff; font-family: Verdana;">&lt;</span><span style="color: #800000; font-family: Verdana;">iq&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">type</span><span style="color: #0000ff; font-family: Verdana;">='error'&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">id</span><span style="color: #0000ff; font-family: Verdana;">='uid-8663a748-00000005'&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">from</span><span style="color: #0000ff; font-family: Verdana;">='www@wanghaiguang-wk/glooxsend'to='wanghaiguang@wanghaiguang-wk/glooxsendfile'&gt;&lt;si&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">xmlns</span><span style="color: #0000ff; font-family: Verdana;">='http://jabber.org/protocol/si'&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">id</span><span style="color: #0000ff; font-family: Verdana;">='uid-8663a748-00000006'&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">profile</span><span style="color: #0000ff; font-family: Verdana;">='http://jabber.org/protocol/si/profile/file-transfer'&gt;&lt;file&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">xmlns</span><span style="color: #0000ff; font-family: Verdana;">='http://jabber.org/protocol/si/profile/file-transfer'&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">name</span><span style="color: #0000ff; font-family: Verdana;">='d:\offline.bmp'&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">size</span><span style="color: #0000ff; font-family: Verdana;">='6998'/&gt;&lt;feature&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">xmlns</span><span style="color: #0000ff; font-family: Verdana;">='http://jabber.org/protocol/feature-neg'&gt;&lt;x&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">xmlns</span><span style="color: #0000ff; font-family: Verdana;">='jabber:x:data'&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">type</span><span style="color: #0000ff; font-family: Verdana;">='form'&gt;&lt;field&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">type</span><span style="color: #0000ff; font-family: Verdana;">='list-single'&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">var</span><span style="color: #0000ff; font-family: Verdana;">='stream-method'&gt;&lt;option&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">label</span><span style="color: #0000ff; font-family: Verdana;">='ibb'&gt;&lt;value&gt;http://jabber.org/protocol/ibb&lt;/value&gt;&lt;/option&gt;&lt;option&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">label</span><span style="color: #0000ff; font-family: Verdana;">='oob'&gt;&lt;value&gt;jabber:iq:oob&lt;/value&gt;&lt;/option&gt;&lt;option&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">label</span><span style="color: #0000ff; font-family: Verdana;">='s5b'&gt;&lt;value&gt;http://jabber.org/protocol/bytestreams&lt;/value&gt;&lt;/option&gt;&lt;value/&gt;&lt;/field&gt;&lt;/x&gt;&lt;/feature&gt;&lt;/si&gt;&lt;error&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">code</span><span style="color: #0000ff; font-family: Verdana;">='503'&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">type</span><span style="color: #0000ff; font-family: Verdana;">='cancel'&gt;&lt;service-unavailable&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">xmlns</span><span style="color: #0000ff; font-family: Verdana;">='urn:ietf:params:xml:ns:xmpp-stanzas'/&gt;&lt;/error&gt;&lt;/iq&gt;</span></div><br /><span style="font-size: 14pt; font-family: Verdana;">这个问题可能是由于你接收端的资源名称与发送端</span><span style="line-height: 21px; background-color: #eeeeee; font-size: 14pt; font-family: Verdana;">不匹配</span><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><span style="font-size: 13px; color: #008000; font-family: Verdana;">//</span><span style="font-size: 13px; color: #008000; font-family: Verdana;">接收端登录的jid</span><br /><span style="color: #0000ff; font-family: Verdana;">JID</span><span style="font-family: Verdana;">&nbsp;jid(&nbsp;"www@192.168.60.67/glooxsendfile"&nbsp;);</span><br /><span style="font-family: Verdana;">&nbsp;j&nbsp;=&nbsp;</span><span style="color: #0000ff; font-family: Verdana;">new</span><span style="font-family: Verdana;">&nbsp;Client(&nbsp;jid,&nbsp;"111"&nbsp;);</span><br /><br /><span style="color: #008000; font-family: Verdana;">//</span><span style="color: #008000; font-family: Verdana;">发送端的jid名称（发送给对方的jid名称）</span><span style="color: #008000; "><br /></span><span style="color: #0000ff; font-family: Verdana;">JID</span><span style="font-family: Verdana;">&nbsp;j(&nbsp;"www@wanghaiguang-wk/gloox"&nbsp;);</span><br /><span style="color: #0000ff; font-family: Verdana;">if</span><span style="font-family: Verdana;">(&nbsp;j.resource().empty()&nbsp;)</span><br /><span style="font-family: Verdana;">{</span><br /><span style="font-family: Verdana;">&nbsp; &nbsp; &nbsp;printf(&nbsp;"error:&nbsp;need&nbsp;full&nbsp;jid\n"&nbsp;);</span><br />&nbsp; &nbsp; &nbsp;<span style="color: #0000ff; font-family: Verdana;">return</span><span style="font-family: Verdana;">&nbsp;1;</span><br /><span style="font-size: 13px; font-family: Verdana;">}</span></div><img src ="http://www.cppblog.com/wanghaiguang/aggbug/208206.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wanghaiguang/" target="_blank">王海光</a> 2014-09-02 17:18 <a href="http://www.cppblog.com/wanghaiguang/archive/2014/09/02/208206.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> GLOOX 1.0.10注册问题</title><link>http://www.cppblog.com/wanghaiguang/archive/2014/08/28/208165.html</link><dc:creator>王海光</dc:creator><author>王海光</author><pubDate>Thu, 28 Aug 2014 09:59:00 GMT</pubDate><guid>http://www.cppblog.com/wanghaiguang/archive/2014/08/28/208165.html</guid><wfw:comment>http://www.cppblog.com/wanghaiguang/comments/208165.html</wfw:comment><comments>http://www.cppblog.com/wanghaiguang/archive/2014/08/28/208165.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wanghaiguang/comments/commentRss/208165.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wanghaiguang/services/trackbacks/208165.html</trackback:ping><description><![CDATA[<p style="margin: 0px; padding: 0px; font-family: Arial; font-size: 14px; line-height: 26px; background-color: #ffffff;"><strong style="font-size: 14pt; font-family: Verdana;">引文：</strong></p><p style="margin: 0px; padding: 0px; font-family: Arial; font-size: 14px; line-height: 26px; background-color: #ffffff;"><span style="font-size: 14pt; font-family: Verdana;">调试GLOOX 1.0.10的注册功能颇费了一些功夫。总体逻辑如GLOOX自带的例子一样是毫无疑问的，但是照搬例子又是不能完成注册的，返回错误码为</span><strong style="font-size: 14pt; font-family: Verdana;">4------RegistrationBadRequest</strong>。<span style="font-size: 14pt;">笔者一开始</span><span style="font-size: 14pt;">在网上狂搜解决方案，资料少之又少，有建议重写Client::handleNormalNode函数（目的是禁止SASL认证）的，有直接继承Client重写Client::handleNormalNode函数的，但都没说到点子上。经过一段时间的研究，在GLOOX的</span><strong><a href="http://camaya.net/gloox/list/dev/" target="_blank" style="color: #ca0000; text-decoration: none;"><span style="font-size: 14pt;">maillist</span></a></strong><span style="font-size: 14pt;">上得到启发，顺利完成注册。现将解决方案记录下来：</span></p><p style="margin: 0px; padding: 0px; font-family: Arial; font-size: 14px; line-height: 26px; background-color: #ffffff;"><br /></p><p style="margin: 0px; padding: 0px; font-family: Arial; font-size: 14px; line-height: 26px; background-color: #ffffff;"><strong style="font-size: 14pt; font-family: Verdana;">环境</strong></p><p style="margin: 0px; padding: 0px; font-family: Arial; font-size: 14px; line-height: 26px; background-color: #ffffff;"><span style="font-size: 14pt; font-family: Verdana;">客户端：GLOOX1.0.1.0 VS2008</span></p><p style="margin: 0px; padding: 0px; font-family: Arial; font-size: 14px; line-height: 26px; background-color: #ffffff;"><span style="font-size: 14pt; font-family: Verdana;">服务器：OPENFIRE 默认安装</span></p><p style="margin: 0px; padding: 0px; font-family: Arial; font-size: 14px; line-height: 26px; background-color: #ffffff;"><br /></p><p style="margin: 0px; padding: 0px; font-family: Arial; font-size: 14px; line-height: 26px; background-color: #ffffff;"><span style="font-size: 14pt; font-family: Verdana;">对于GLOOX自带的注册例子不能正常注册的问题有人在邮件列表里提出来。一个哥们这样回答：<br /></span></p><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="font-size: 14pt; font-family: Verdana;">Ok,&nbsp;I'</span><span style="font-size: 14pt; font-family: Verdana;">ve&nbsp;found&nbsp;what&nbsp;the&nbsp;problem&nbsp;was&nbsp;</span><br /><span style="font-size: 14pt; font-family: Verdana;">In&nbsp;openFire&nbsp;server&nbsp;parameters,&nbsp;Anonymous&nbsp;Login&nbsp;</span><span style="font-size: 14pt; font-family: Verdana;">=&gt;</span><span style="font-size: 14pt; font-family: Verdana;">&nbsp;Disabled&nbsp;</span><span style="font-size: 14pt; font-family: Verdana;">!!!</span>&nbsp;</div><span style="font-size: 14px;"><br /></span><span style="font-size: 14pt; font-family: Verdana;">意思是要</span><strong style="font-size: 14pt; font-family: Verdana;">禁用openFire服务器里的选项&#8221;注册和登录&#8220;的&#8221;匿名登录&#8220;项</strong><span style="font-size: 14pt; font-family: Verdana;">。</span><p style="margin: 0px; padding: 0px; font-size: 14pt; font-family: Verdana;"><span style="font-size: 14pt;">笔者按此说明禁用该选项，果然注册成功。</span></p><p style="margin: 0px; padding: 0px; font-size: 14pt; font-family: Verdana;">这说明开始的注册失败是和匿名登录有关系的。我们来看一下引用registration_expmple例子登录失败时的XML流：</p><p style="margin: 0px; padding: 0px; font-size: 14pt; font-family: Verdana;"><strong>S-&gt;C：服务器返回给客户端支持的认证机制：<br /></strong></p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">stream:features&nbsp;</span><span style="color: #FF0000; ">xmlns:stream</span><span style="color: #0000FF; ">='http://etherx.jabber.org/streams'&gt;&lt;mechanisms&nbsp;</span><span style="color: #FF0000; ">xmlns</span><span style="color: #0000FF; ">='urn:ietf:params:xml:ns:xmpp-sasl'&gt;&lt;mechanism&gt;DIGEST-MD5&lt;/mechanism&gt;&lt;mechanism&gt;PLAIN&lt;/mechanism&gt;&lt;mechanism&gt;ANONYMOUS&lt;/mechanism&gt;&lt;mechanism&gt;CRAM-MD5&lt;/mechanism&gt;&lt;/mechanisms&gt;&lt;compression&nbsp;</span><span style="color: #FF0000; ">xmlns</span><span style="color: #0000FF; ">='http://jabber.org/features/compress'&gt;&lt;method&gt;zlib&lt;/method&gt;&lt;/compression&gt;&lt;auth&nbsp;</span><span style="color: #FF0000; ">xmlns</span><span style="color: #0000FF; ">='http://jabber.org/features/iq-auth'/&gt;&lt;register&nbsp;</span><span style="color: #FF0000; ">xmlns</span><span style="color: #0000FF; ">='http://jabber.org/features/iq-register'/&gt;&lt;/stream:features&gt;&nbsp;</span></div><p>&nbsp;</p><p style="margin: 0px; padding: 0px; font-size: 14pt; font-family: Verdana;">从上面XML流中我们可以看到，默认openFire支持四种认证机制，分别是：DIGEST-MD5、PLAIN、ANONYMOUS、CRAM-MD5。然后我们看GLOOX客户端的响应流：</p><p style="margin: 0px; padding: 0px; font-size: 14pt; font-family: Verdana;"><strong>C-&gt;S：客户端返回选择的认证方式：<br /></strong></p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">auth&nbsp;</span><span style="color: #FF0000; ">xmlns</span><span style="color: #0000FF; ">='urn:ietf:params:xml:ns:xmpp-sasl'&nbsp;</span><span style="color: #FF0000; ">mechanism</span><span style="color: #0000FF; ">='ANONYMOUS'</span><span style="color: #0000FF; ">/&gt;</span></div><span style="font-size: 14pt;"><br />可以看出，客户端&#8221;无耻&#8220;的选择了&#8221;匿名&#8220;--</span><strong style="font-size: 14pt;">'ANONYMOUS'方式</strong><br style="font-size: 14pt;" /><p style="margin: 0px; padding: 0px; font-size: 14pt;">接下来的流程就是客户端&#8221;无耻&#8220;的选择了以匿名的方式登录了服务器，然后再发送注册请求，请求如下：</p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">iq&nbsp;</span><span style="color: #FF0000; ">id</span><span style="color: #0000FF; ">='uid:4e69eccd:00006784'&nbsp;</span><span style="color: #FF0000; ">type</span><span style="color: #0000FF; ">='set'&nbsp;</span><span style="color: #FF0000; ">from</span><span style="color: #0000FF; ">='447e0585@zxl/447e0585'&nbsp;</span><span style="color: #FF0000; ">xmlns</span><span style="color: #0000FF; ">='jabber:client'</span><span style="color: #0000FF; ">&gt;&lt;</span><span style="color: #800000; ">query&nbsp;</span><span style="color: #FF0000; ">xmlns</span><span style="color: #0000FF; ">='jabber:iq:register'</span><span style="color: #0000FF; ">&gt;&lt;</span><span style="color: #800000; ">username</span><span style="color: #0000FF; ">&gt;</span>bbaxiao<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">username</span><span style="color: #0000FF; ">&gt;&lt;</span><span style="color: #800000; ">password</span><span style="color: #0000FF; ">&gt;</span>123456<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">password</span><span style="color: #0000FF; ">&gt;&lt;</span><span style="color: #800000; ">name</span><span style="color: #0000FF; ">&gt;</span>test2<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">name</span><span style="color: #0000FF; ">&gt;&lt;</span><span style="color: #800000; ">email</span><span style="color: #0000FF; ">&gt;</span>163@gmail.com<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">email</span><span style="color: #0000FF; ">&gt;&lt;/</span><span style="color: #800000; ">query</span><span style="color: #0000FF; ">&gt;&lt;/</span><span style="color: #800000; ">iq</span><span style="color: #0000FF; ">&gt;</span>&nbsp;</div><strong><br /></strong><p style="margin: 0px; padding: 0px; font-size: 14px;"><span style="font-size: 14pt;">我们看到，IQ节里包含&#8220;form&#8221;属性，即客户端匿名身份标识。</span></p><p style="margin: 0px; padding: 0px; font-size: 14px;"><span style="font-size: 14pt;">注意，一个客户端已经以一个身份（由服务器临时分配的一个JID）登录，建立了会话，在服务器上我们会看到这个会话，并且服务器发送心跳一直维护这个会话。这种情况下，这个客户端再发送注册请求（另一个身份）建立与服务器的连接是不被允许的。具体请参考XEP-0077（In-Band Registration）：我们关注这两段：</span><br /></p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->If&nbsp;the&nbsp;entity&nbsp;cancels&nbsp;its&nbsp;registration&nbsp;with&nbsp;its&nbsp;"home"&nbsp;server&nbsp;(i.e.,&nbsp;the&nbsp;server&nbsp;at&nbsp;which&nbsp;it&nbsp;has&nbsp;maintained&nbsp;its&nbsp;XMPP&nbsp;account),&nbsp;then&nbsp;the&nbsp;entity&nbsp;SHOULD&nbsp;NOT&nbsp;include&nbsp;a&nbsp;'from'&nbsp;or&nbsp;'to'&nbsp;address&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;the&nbsp;remove&nbsp;request&nbsp;the&nbsp;server&nbsp;SHOULD&nbsp;then&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;a&nbsp;&lt;not-authorized/&gt;&nbsp;stream&nbsp;error&nbsp;and&nbsp;terminate&nbsp;all&nbsp;active&nbsp;sessions&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;the&nbsp;entity.&nbsp;The&nbsp;server&nbsp;SHOULD&nbsp;perform&nbsp;the&nbsp;remove&nbsp;based&nbsp;on&nbsp;the&nbsp;bare&nbsp;JID&nbsp;&lt;localpart@domain.tld&gt;&nbsp;associated&nbsp;with&nbsp;the&nbsp;current&nbsp;session&nbsp;or&nbsp;connection&nbsp;over&nbsp;which&nbsp;it&nbsp;received&nbsp;the&nbsp;remove&nbsp;request.&nbsp;If&nbsp;the&nbsp;server&nbsp;<span style="color: #0000FF; ">is</span>&nbsp;an&nbsp;instant&nbsp;messaging&nbsp;and&nbsp;presence&nbsp;server&nbsp;that&nbsp;conforms&nbsp;to&nbsp;XMPP&nbsp;IM&nbsp;[8],&nbsp;the&nbsp;server&nbsp;SHOULD&nbsp;also&nbsp;cancel&nbsp;all&nbsp;existing&nbsp;presence&nbsp;subscriptions&nbsp;related&nbsp;to&nbsp;that&nbsp;entity&nbsp;(<span style="color: #0000FF; ">as</span>&nbsp;stored&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;the&nbsp;entity's&nbsp;roster).&nbsp;<br />&nbsp;<br />If&nbsp;the&nbsp;entity&nbsp;cancels&nbsp;its&nbsp;registration&nbsp;with&nbsp;a&nbsp;service&nbsp;other&nbsp;than&nbsp;its&nbsp;home&nbsp;server,&nbsp;its&nbsp;home&nbsp;server&nbsp;MUST&nbsp;stamp&nbsp;a&nbsp;'from'&nbsp;address&nbsp;on&nbsp;the&nbsp;remove&nbsp;request,&nbsp;which&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;accordance&nbsp;with&nbsp;XMPP&nbsp;Core&nbsp;will&nbsp;be&nbsp;the&nbsp;entity's&nbsp;full&nbsp;JID&nbsp;&lt;localpart@domain.tld/resource&gt;.&nbsp;The&nbsp;service&nbsp;MUST&nbsp;perform&nbsp;the&nbsp;remove&nbsp;based&nbsp;on&nbsp;the&nbsp;bare&nbsp;JID&nbsp;&lt;localpart@domain.tld&gt;&nbsp;portion&nbsp;of&nbsp;the&nbsp;'from'&nbsp;address.&nbsp;</div><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->If&nbsp;the&nbsp;entity&nbsp;cancels&nbsp;its&nbsp;registration&nbsp;with&nbsp;its&nbsp;"home"&nbsp;server&nbsp;(i.e.,&nbsp;the&nbsp;server&nbsp;at&nbsp;which&nbsp;it&nbsp;has&nbsp;maintained&nbsp;its&nbsp;XMPP&nbsp;account),&nbsp;then&nbsp;the&nbsp;entity&nbsp;SHOULD&nbsp;NOT&nbsp;include&nbsp;a&nbsp;'from'&nbsp;or&nbsp;'to'&nbsp;address&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;the&nbsp;remove&nbsp;request&nbsp;the&nbsp;server&nbsp;SHOULD&nbsp;then&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;a&nbsp;&lt;not-authorized/&gt;&nbsp;stream&nbsp;error&nbsp;and&nbsp;terminate&nbsp;all&nbsp;active&nbsp;sessions&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;the&nbsp;entity.&nbsp;The&nbsp;server&nbsp;SHOULD&nbsp;perform&nbsp;the&nbsp;remove&nbsp;based&nbsp;on&nbsp;the&nbsp;bare&nbsp;JID&nbsp;&lt;localpart@domain.tld&gt;&nbsp;associated&nbsp;with&nbsp;the&nbsp;current&nbsp;session&nbsp;or&nbsp;connection&nbsp;over&nbsp;which&nbsp;it&nbsp;received&nbsp;the&nbsp;remove&nbsp;request.&nbsp;If&nbsp;the&nbsp;server&nbsp;<span style="color: #0000FF; ">is</span>&nbsp;an&nbsp;instant&nbsp;messaging&nbsp;and&nbsp;presence&nbsp;server&nbsp;that&nbsp;conforms&nbsp;to&nbsp;XMPP&nbsp;IM&nbsp;[8],&nbsp;the&nbsp;server&nbsp;SHOULD&nbsp;also&nbsp;cancel&nbsp;all&nbsp;existing&nbsp;presence&nbsp;subscriptions&nbsp;related&nbsp;to&nbsp;that&nbsp;entity&nbsp;(<span style="color: #0000FF; ">as</span>&nbsp;stored&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;the&nbsp;entity's&nbsp;roster).&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />If&nbsp;the&nbsp;entity&nbsp;cancels&nbsp;its&nbsp;registration&nbsp;with&nbsp;a&nbsp;service&nbsp;other&nbsp;than&nbsp;its&nbsp;home&nbsp;server,&nbsp;its&nbsp;home&nbsp;server&nbsp;MUST&nbsp;stamp&nbsp;a&nbsp;'from'&nbsp;address&nbsp;on&nbsp;the&nbsp;remove&nbsp;request,&nbsp;which&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;accordance&nbsp;with&nbsp;XMPP&nbsp;Core&nbsp;will&nbsp;be&nbsp;the&nbsp;entity's&nbsp;full&nbsp;JID&nbsp;&lt;localpart@domain.tld/resource&gt;.&nbsp;The&nbsp;service&nbsp;MUST&nbsp;perform&nbsp;the&nbsp;remove&nbsp;based&nbsp;on&nbsp;the&nbsp;bare&nbsp;JID&nbsp;&lt;localpart@domain.tld&gt;&nbsp;portion&nbsp;of&nbsp;the&nbsp;'from'&nbsp;address. &nbsp;</div><p>&nbsp;</p><span style="font-size: 14pt;">意思是说注册请求不能包含&#8220;from&#8221;属性。</span><br style="font-size: 14px;" /><p style="margin: 0px; padding: 0px; font-size: 14px;"><span style="font-size: 14pt;">正常的注册流如下：</span></p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">iq&nbsp;</span><span style="color: #FF0000; ">id</span><span style="color: #0000FF; ">='uid:4e69eccd:00003d6c'&nbsp;</span><span style="color: #FF0000; ">type</span><span style="color: #0000FF; ">='set'&nbsp;</span><span style="color: #FF0000; ">xmlns</span><span style="color: #0000FF; ">='jabber:client'&gt;&lt;query&nbsp;</span><span style="color: #FF0000; ">xmlns</span><span style="color: #0000FF; ">='jabber:iq:register'&gt;&lt;username&gt;bbaxiao&lt;/username&gt;&lt;password&gt;123456&lt;/password&gt;&lt;name&gt;test2&lt;/name&gt;&lt;email&gt;163@gmail.com&lt;/email&gt;&lt;/query&gt;&lt;/iq&gt;&nbsp;</span></div><strong><br /></strong><p style="margin: 0px; padding: 0px; font-size: 14px;">---------------------------</p><p style="margin: 0px; padding: 0px; font-size: 14px;"><span style="font-size: 14pt;">综上所述，解决方案如下：</span></p><p style="margin: 0px; padding: 0px; font-size: 14px;"><span style="font-size: 14pt;">一、关闭openFire的匿名登录功能。^_^&#8230;&#8230;</span></p><p style="margin: 0px; padding: 0px; font-size: 14px;"><span style="font-size: 14pt;">二、禁止GLOOX匿名认证功能。</span></p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="font-size: 12pt;">file:client.cpp&nbsp;</span><br />&nbsp;<br /><span style="font-size: 12pt;">fun:&nbsp;int&nbsp;Client::getSaslMechs(&nbsp;Tag*&nbsp;tag&nbsp;)&nbsp;</span><br />&nbsp;<br /><span style="font-size: 12pt;">line:423&nbsp;</span><br />&nbsp;<br /><span style="font-size: 12pt; color: #008000;">//将423行注释掉即可。&nbsp;</span><br /><span style="font-size: 12pt;">422：if(&nbsp;tag-&gt;hasChildWithCData(&nbsp;mech,&nbsp;"ANONYMOUS"&nbsp;)&nbsp;)&nbsp;</span><br /><span style="font-size: 12pt;">423 &nbsp; &nbsp; &nbsp;</span><span style="font-size: 12pt; color: #008000;">//mechs&nbsp;|=&nbsp;SaslMechAnonymous;&nbsp;</span></div><strong><br /></strong><span style="font-size: 14pt;">重新编译生成DLL即可。</span><p style="margin: 0px; padding: 0px; font-size: 14px;"><span style="font-size: 14pt;">三、手动设置GLOOX客户端SASL认证机制</span></p><p style="margin: 0px; padding: 0px; font-size: 14px;"><span style="font-size: 14pt;">在调用j-&gt;connect()之前设置SASL认证机制，比如设置为&#8220;DIGEST-MD5&#8221;</span></p><strong><br /></strong><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="font-size: 12pt;">j-&gt;setSASLMechanisms(SaslMechDigestMd5);</span></div><strong><br /></strong><span style="font-size: 14pt;">这种方式的缺点是需要先确定服务器支持的认证机制。</span><br style="font-size: 14px;" /><p style="margin: 0px; padding: 0px; font-size: 14px;"></p><p style="margin: 0px; padding: 0px; font-size: 14px;"></p><p style="margin: 0px; padding: 0px; font-size: 14px;"></p><p style="margin: 0px; padding: 0px; font-size: 14px;"><span style="font-size: 14pt;">四、根据XEP-0077所述，即使其名登录，注册流只要不带&#8220;from&#8221;属性应该也可以。所以我们要处理发出的注册流，去除&#8220;from&#8221;属性重新发送注册流即可。</span></p><strong><br /></strong><strong style="font-size: 14pt;">本文转自：</strong><a href="http://blog.csdn.net/abcpanpeng/article/details/7370974" style="font-size: 14pt;">http://blog.csdn.net/abcpanpeng/article/details/7370974</a><p><br /></p><img src ="http://www.cppblog.com/wanghaiguang/aggbug/208165.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wanghaiguang/" target="_blank">王海光</a> 2014-08-28 17:59 <a href="http://www.cppblog.com/wanghaiguang/archive/2014/08/28/208165.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>