`
suoyihen
  • 浏览: 1356715 次
文章分类
社区版块
存档分类
最新评论

gloox1.0中注册账号不成功的问题

 
阅读更多

前段时间研究gloox1.0版的注册,用官方自带的example,注册应该是很简单的例子,代码如下:

  1: j = new Client( "pc-20110409pvwc" );
  2: j->disableRoster();
  3: j->registerConnectionListener( this );
  4: 
  5: m_reg = new Registration( j );
  6: m_reg->registerRegistrationHandler( this );
  7: 
  8: j->logInstance().registerLogHandler( LogLevelDebug, LogAreaAll, this );
  9: 
 10: j->connect();
 11: 
 12: delete( m_reg );
 13: delete( j );
但是我用自带的register_example编程成功后运行,在最后一步提交注册信息后返回如下的结果:

image

“bad-request”。。。仔细看返回的结果,在gloox1.0版本,在register_example运行时候,有Sasl验证过程,跟代码发现进行的是匿名验证。但是我记得在之前0.99版本都不会有验证的过程呀!于是我考虑在注册的时候像之前的版本那样禁用掉Sasl验证,禁用过程用Client::setForceNonSasl函数,代码如下:

  1: j = new Client( "pc-20110409pvwc" );
  2: j->disableRoster();
  3: j->setForceNonSasl();
  4: j->registerConnectionListener( this );
  5: 
  6: m_reg = new Registration( j );
  7: m_reg->registerRegistrationHandler( this );
  8: 
  9: j->logInstance().registerLogHandler( LogLevelDebug, LogAreaAll, this );
 10: 
 11: j->connect();
 12: 
 13: delete( m_reg );
 14: delete( j );
修改后运行发现居然还要进行Sasl验证过程,单步调试发现setForceNonSasl没有起作用,找到匿名验证验证的代码处,在Client::handleNormalNode函数中,截取代码段:
  1:  else if( !m_clientCerts.empty() && !m_clientKey.empty()
  2:                  && m_streamFeatures & SaslMechExternal && m_availableSaslMechs & SaslMechExternal )
  3:         {
  4:           notifyStreamEvent( StreamEventAuthentication );
  5:           startSASL( SaslMechExternal );
  6:         }
  7: #if defined( _WIN32 ) && !defined( __SYMBIAN32__ )
  8:         else if( m_streamFeatures & SaslMechGssapi && m_availableSaslMechs & SaslMechGssapi )
  9:         {
 10:           notifyStreamEvent( StreamEventAuthentication );
 11:           startSASL( SaslMechGssapi );
 12:         }
 13:         else if( m_streamFeatures & SaslMechNTLM && m_availableSaslMechs & SaslMechNTLM )
 14:         {
 15:           notifyStreamEvent( StreamEventAuthentication );
 16:           startSASL( SaslMechNTLM );
 17:         }
 18: #endif
 19:         else if( m_streamFeatures & SaslMechAnonymous
 20:                  && m_availableSaslMechs & SaslMechAnonymous )
 21:         {
 22:           notifyStreamEvent( StreamEventAuthentication );
 23:           startSASL( SaslMechAnonymous );
 24:         }
 25:         else
 26:         {
 27:           notifyStreamEvent( StreamEventFinished );
 28:           connected();
 29:         }
匿名验证是在倒数第二段,于是在它的if判断语句加上检测是否禁止验证如下

else if( !m_forceNonSasl && m_streamFeatures & SaslMechAnonymous
&& m_availableSaslMechs & SaslMechAnonymous )

保存重新编译,这样就可以不用进行匿名验证,实现正常的注册了。

我对gloox1.0理解还很浅,如果哪位知道register_example为什么会运行失败的真正原因,麻烦说明一下!

分享到:
评论

相关推荐

    gloox-1.0.zip_gloox_gloox windows_gloox1.0_gloox1.0.dll_xmpp

    gloox 是一个C++的类库,用以实现可移植的 Jabber/XMPP 协议。gloox 完全兼容 XMPP RFCs,支持所有的 XMPP 特性,包括 SRV lookups, TLS, SASL, roster management, and privacy lists,同时实现了许多 XEPs 协议...

    gloox1.0beta5

    gloox-1.0-beta5,c++源码,跨平台的开源类,广泛应用于gtalk,qq。支持android和ios。

    Gloox1.0 封装

    一、对Gloox1.0添加了操作接口(.def),实现收发信息,可以发送中文。 二、开发环境:VC2008、Openfire、WinXP。 说明: 1、此代码是项目中正在使用的代码,如有不妥请指教。... 问题,不理解,请给出详细错误信息。

    GLOOX1.0官方API文档 chm,DOXYGEN生成。GLOOX开发XMPP必备。

    GLOOX1.0官方API文档,DOXYGEN生成。GLOOX开发XMPP必备。 整理后CHM

    gloox1.0源代码

    即时通讯相关的非常好的参考源码,基本全部都测试通过。

    Gloox1.0 二次开发

    Gloox1.0 二次开发,添加了操作接口(.def),实现收发信息,可以发送中文。

    基于GLOOX1.0的心跳程序

    通常在客户端与服务器之间需要心跳来维系连接,XMPP可以通过一个扩展协议...XEP-0199规定通过发送命名空间为'urn:xmpp:ping'的iq节XML流来解决这个问题。本文代码为测试代码…… 本文阐述GLOOX客户端对服务器消息的封装

    gloox-1.0-beta3

    gloox 是一个使用 C++ 实现的 Jabber/XMPP 的底层库(非界面),它使开发XMPP/JABBER客户端更为简单,并且可以让各种程序方便的嵌入XMPP的支持。它使用 GNU GPL 授权,也支持商业授权 0.9版主要支持以下功能 - full ...

    gloox api文档

    GLOOX1.0官方API文档,DOXYGEN生成。GLOOX开发XMPP必备。

    gloox-1.0.zip_gloox

    著名的xmpp服务器开发包,可用于通信软件的二次开发

    gloox-1.0.rar_gloox

    移动设备与PC设备直接通讯,能够实现同步,上传,下载

    gloox-1.0.17源码

    这是gloox-1.0.17源码,用VS2013编译成功。找到源码里的gloox.sln文件,用VS2013打开,重新编译后,生成gloox-1.0.17.dll

    gloox 测试 注册

    目前做了一些IM的程序,这是gloox注册例子

    gloox-1.0-beta5.tar.bz2.zip_gloox j2me_open_xmpp _xmpp gloox_xmp

    XMPP开源实现 open source implement (C/C++)

    用VC6.0编译成功的GLOOX

    该开发包由Visual C++ 6.0 和Microsoft Platform...4 sys-dll文件夹中是gloox.dll所依赖的库,考虑到有些开发环境的SDK比较老,没有这几个库文件,所以一并放在这里 该SDK可在Visual C++ 6.0及比它高级的开发环境中使用

    gloox文件传输代码

    关于gloox的文件传输的参考代码,我去掉了一些业务方面的代码,这些代码只能做参考。

    gloox1实现xmpp协议

    gloox源代码,可以用来实现xmpp客户端。功能强大

    gloox库代码分析和源码

    gloox库代码分析和源码,gloox库代码分析和源码gloox库代码分析和源码

    gloox-1.0.20-api Documentation

    gloox-1.0.20-api Documentation 最新版的api文档,详细解释 GLOOX1.0.20官方API文档,DOXYGEN生成。GLOOX开发XMPP必备。

    gloox测试 gloox 登录

    gloox 登录,仅供参考(要使用,请先编译gloox库)

Global site tag (gtag.js) - Google Analytics