re: gloox代码分析3 - 注册模块 ysong.lee 2008-11-18 13:01
1. 我对gloox进行了修改,client_->setHeaderTo(HEADERTO); 是自己添加的方法,目的是为了fix gloox不能连接到gtalk server的问题,通过修改,可以自己控制ClientBase::header()方法中在发送hello信息时候的to属性,这在服务器是gtalk server的时候是有用的,如果我们的服务器地址设置为talk.google.com,则header()方法默认to="talk.google.com",这是错误的,应该为to="gmail.com".
2. sasl failed。登陆的时候需要sasl 验证,如果服务器为gtalk server, 当你接收到服务器发送的以下信息的时候
(Server -> Client)
<stream:features>
<mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl">
<mechanism>PLAIN</mechanism>
<mechanism>X-GOOGLE-TOKEN</mechanism>
</mechanisms>
</stream:features>
需要进行sasl验证,发送的验证数据格式为:
'\0'+username+'\0'+password 的base64编码, username和password必须是经过认证的.
例如:
'\0' + 'ysong.lee@gmail.com' + '\0' + 123456 -> 经过base64编码处理
(Client -> Server)
<auth xmlns="urn:ietf:params:xml:ns:xmpp-sasl" mechanism="PLAIN">
AHlzb25nLmxlZUBnbWFpbC5jb20AeXNvbmdAMTk4NA==
</auth>
3. 如果还有疑问,可以参考我的另外一篇文章“如何利用jabber协议与gtalk服务器通讯 - 建立会话”,里面详细描述了如何登陆到gtalk服务器.
4. 做XMPP的程序,仔细阅读从server到client和client的server的xml数据流,并参考标准协议,问题都可以解决:), 还有问题可以发email给我.
@ly