关闭

gloox不能注册新用户的问题

2365人阅读 评论(19) 收藏 举报

经过测试,发现gloox 0.8版自带的测试程序register_test.cpp,是没有办法注册新用户的

前面的三步是这样没错
Client->Server 001
<?xml version='1.0' ?>
<stream:stream to='jabber.org
xmlns='jabber:client'
xmlns:stream='http://etherx.jabber.org/streams'
xml:lang='en'
version='1.0'>
客户端向服务器建立连接,version='1.0'代表客户端的所用的XMPP的版本,没有表示是0.x版,o.x版与1.0版的验证方式不同

S->C 002
<?xml version='1.0'?>
<stream:stream xmlns:stream='http://etherx.jabber.org/streams'
xmlns='jabber:client'from='jabber.org'
version='1.0'
id='7mh6bxa8x95js1ubvkxyupysze2xpz6jhxtrzzpq'>
服务器响应连接

S->C 003
<stream:features xmlns:stream='http://etherx.jabber.org/streams'>
<mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
    <mechanism>DIGEST-MD5</mechanism>
    <mechanism>PLAIN</mechanism>
</mechanisms>
</stream:features>
服务器返回支持的验证方式

第四步应该就是发送注册新用户的请求了,但应际上,它还是发登录验证,未注册的当然就验证不通过,连接也就断开了

我改了一些代码,让注册可以实现
1. 继承Client类,重载了handleNormalNode函数
class RegisterClient : public Client
{
    public:
    RegisterClient( const JID& jid, const std::string& password, int port = -1 ):
    Client(jid,password,port)
    {
    }
  bool RegisterClient::handleNormalNode( Stanza *stanza )
  {
    if( stanza->name() == "stream:features" )
    {
        //fastxyf modify
        notifyOnConnect();
        return true;

    };
    return false;
  };
};
2. 将RegTest类中star函数中的
  j = new Client( jid, szPassword );
改为:
  j = new RegisterClient( jid, szPassword );
这样就可以注试通过了

新注册的用户名,密码是在handleRegistrationFields函数中指定的
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:38377次
    • 积分:541
    • 等级:
    • 排名:千里之外
    • 原创:9篇
    • 转载:6篇
    • 译文:0篇
    • 评论:46条
    文章分类
    最新评论