【XMPP】gloox开源代码分析

windows客户端开发--xmpp协议gloox库 很多聊天室客户端都使用了xmpp协议。这个协议被人们诟病很多,但是对于简单的消息传送还是有很大的使用价值的。XMPP is the open standard for messaging and presence。gloox is a popular library for the Extensible Messaging and Presence Protocol (XMPP), formerly 阅读详情

最近项目上需要用到gloox的开源代码,结合项目的特性,对XMPP有了部分了解,期间碰到的问题大致如下:

1. Gloox工程的移植

网上有不少Gloox的测试代码,找一份XCode平台下能编译通过的即可,笔者找的一份为“glooxForIos”,

wiki的地址为:http://code.google.com/p/gloox-for-ios/


2. Connect.h分析

Connect.h是gloox的测试类代码,它实现了ConnectionListener, LogHandler, MessageHandler, TLSHandler等几个接口,分别对连接,日志,消息,TLS进行管理,具体的功能看其源码就知道了。

其主要的成员变量有:

    Client *j;
    TLSBase* m_tls;
    std::string m_send;
    const JID rcpt;
Client就是自身的客户端,构建的时候需要传入一个JID作为构造参数;

TLSBase负责对数据的加密,解密,构建安全通道(负责握手)等;

m_send就是传递的消息实体;

rcpt是要与之通信的对象,也需要jid来进行构造。


主要的接口有:

void xtlsSend()
void start()

前者负责给其它client发送消息,后再负责初始化client;

在项目中,会发现xtlsSend完全不够用,它发送的消息格式需要重构,发送server能认识的消息。


3. 初始化工作

a. jid的设置

jid不能直接挂上邮件名,比如“**@xx.com”, 这样的设置不会影响认证的过程,但认证之后的present,message会收不到。在后面需要挂上reource标签,比如“/ios”,标明是来自ios的,以示区别。

b.server的地址

这个地址值,在JID中,通过setServer的方式设置进去。

c.auth的方式

在连接成功后,server端会发送认证方式到client,具体如下:

<stream:stream
  from='im.example.com'
  id='vgKi/bkYME8OAj4rlXMkpucAqe4='
  to='juliet@im.example.com'
  version='1.0'
  xml:lang='en'
  xmlns='jabber:client'
  xmlns:stream='http://etherx.jabber.org/streams'>
<stream:features>
  <mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
    <mechanism>SCRAM-SHA-1-PLUS</mechanism>
    <mechanism>SCRAM-SHA-1</mechanism>
    <mechanism>PLAIN</mechanism>
  </mechanisms>
  <pipelining xmlns='urn:xmpp:features:pipelining'/>
  <c xmlns='http://jabber.org/protocol/caps'
     hash='sha-1'
     node='http://prosody.im/'
     ver='ItBTI0XLDFvVxZ72NQElAzKS9sU='/>
</stream:features>


方式有plain,scram-sha-1等方式,此时需要发送指令到server,确定认证方式,详情参见:

http://xmpp.org/extensions/xep-0305.html


d. 修改认证方式

由于项目中server提供的认证方式中有一个token的,没能搞清楚XMPP中是如何通过Token的方式跟系统认证。

于是修改了clientBase中的

 void ClientBase::startSASL( SaslMechanism type )

部分代码如下:

      case SaslMechPlain:
      {
//        a->addAttribute( "mechanism", "PLAIN" );
//        std::string tmp;
//        if( m_authzid )
//          tmp += m_authzid.bare();
//
//        tmp += '\0';
//        if( !m_authcid.empty() )
//          tmp += m_authcid;
//        else
//          tmp += m_jid.username();
//        tmp += '\0';
//        tmp += m_password;
//        a->setCData( Base64::encode64( tmp ) );
          a->addAttribute( "mechanism", "TOKEN" );
          a->setCData( ((XMPPJabberInfo)XMPPCoreMgr::sharedInstance()->getJabberData()).getJabberToken() );
          
        break;

这样就能通过server端的认证,但没有走正途。


5. 密码的设置

密码的认证,XMPP要求不高,可以为任意一个密码,但不能为空。


bool Client::handleNormalNode( Tag* tag )

会进行判定,如果密码为空,则不进行登录。

else if( !username().empty() && !password().empty() )
{
    if( !login() )
          {
            logInstance().err( LogAreaClassClient, "The server doesn't support"
                                           " any auth mechanisms we know about" );
            disconnect( ConnNoSupportedAuth );
     }
 }


TBD...


利用XMPP实现文件共享---简析 “XMPP文件传输协议”  最近在研究XMPP协议,client端用的是开源的Gloox库,server使用gtalk server和OpenFire。昨天想实现XMPP的文件传输,于是仔细看了下XMPP的文件传输协议,结合协议和代码,算是把标准XMPP文件传输协议摸清楚了。下面是一些要点总结。XMPP主要支持两种形式的文件传输协议:SOCKS5 Bytestreams和 In-Band Bytestreams 阅读详情

相关推荐

gloox库实战指南:深入理解和应用示例

XMPP(Extensible Messaging and Presence Protocol)是一种开放的即时消息协议,最初由Jabber社区开发,现在由XMPP标准基金会维护。其设计目标是提供一个简单、可扩展、分布式的即时消息系统架构,同时支持即时消息、状态指示和群组管理等需求。XMPP协议的一个核心特点是其基于XML的可扩展消息格式,这使得它能够轻松地与其他网络服务进行集成。gloox是一个C++库,它提供了XMPP协议的支持,允许开发者在不深入了解协议细节的情况下实现即时通讯功能。

weixin_28888459的博客 473

gloox开发

1、服务器环境 服务器是在xp系统下安装的(我是在虚拟机中的xp系统下安装的),服务器采用的是Openfire 3.9.3版本,安装服务器时采用的是服务器自带的数据库。 2、编程环境 编程环境是在win7 64位系统下进行的,采用的是Microsoft Visual Studio 2010 旗舰版进行编程。 3、客户端编程采用的技术 3.1采用基于C++实现的XMPP协议客户端开源库gloox gloox简介: gloox是一个开源的跨平台的C++实现的XMPP协议开发包,目前的版本为1.0.

翻肚鱼儿的博客 356

gloox1实现xmpp协议

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

gloox开发环境搭建

Gloox是一个开源的跨平台的C++实现的XMPP协议开发包,目前的版本为1.0测试版,不过由于是测试版,故在实际项目使用中不便于使用,故仍用0.9.9.5版本,这是一个比较稳定的版本,提供了很多的功能支持。当从gloox的官网中下载0.9.9.5之后,解压。可以看见里面含有一个SRC的文件夹,里面就是gloox的所有的头文件和源文件了。在编译gloox中,根据了解,可以编译成DLL动态库

qiuhong101的专栏 1万+

gloox库代码分析和源码

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

xmpp客户端源代码

xmpp客户端源代码

gloox的源码

学习xmpp协议必要的代码,对xmpp的协议实现的比较好。

基于C++的xmpp协议的gloox库

这个只是一个应用xmpp协议的C++的库,有需要的朋友可以下载一下。

制作自己的xmpp/gtalk客户端

本文作者的这个研究过程跟我的好像,我也在xmpp和libjingle之间辗转研究,用了xmppframework,libjingle,gloox,其中libjingle我是以前都研究过,所有基于它的P2P进行数据传输这部分没有问题,也是会遇到用户系统的问题,我们需要使用自己的用户系统,又不想建立自己的STUN,而xmppframework这个又实现的不完整而且也没什么资料,所以最后又使用gloox

zoutian007的专栏 4768

gloox 一些软件的源代码,有用极了

下载此代码可以减少研发的中碰到的很多麻烦。

gloox1.07beta最新版xmpp协议源码

gloox1.07 beta c++ 最新版xmpp协议源码

gloox 开发环境建立

Gloox是一个开源的跨平台的C++实现的XMPP协议开发包,目前的版本为1.0测试版,不过由于是测试版,故在实际项目使用中不便于使用,故仍用0.9.9.5版本,这是一个比较稳定的版本,提供了很多的功能支持。 当从gloox的官网中下载0.9.9.5之后,解压。可以看见里面含有一个SRC的文件夹,里面就是gloox的所有的头文件和源文件了。 在编译gloox中,根据了解,可以编译成DLL动态库

少壮不努力,不如自挂东南枝 765

gloox-1.0.17源码

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

C++:gloox库进行协议扩展(使用自定义标签)

前言 直接使用gloox库源码中examples下面的示例,采用开源的openfire搭建的xmpp的服务器,是可以直接进行连接、注册和消息推送。 使用AndroidPN作为xmpp服务器可以可以直接使用 gloox的示例进行注册,但是连接 和 消息推送不行。连接的问题咋们就不说了,咋们直接说 消息推送的问题。 因为AndroidPN作为服务器 给客户端推送的消息是扩展了协议,所以直接使用示例代码...

重庆李四 1060

基于DFT的scanshift sdc模板(DFT)

摘要:本文详细介绍了DFT测试模式下的SDC约束方法。

murphyrong的博客 887

工业预测模型避坑指南:PHM2012轴承数据实战中,LSTM、CNN、Transformer到底怎么选?

本文深入探讨了工业预测模型在PHM2012轴承数据下的选型策略,对比了LSTM、CNN和Transformer等主流模型在轴承寿命预测任务中的表现。通过真实实验数据,提供了可复现的选型决策框架,帮助工程师根据数据规模、硬件条件和精度要求选择最佳模型。文章还揭示了工程落地中的隐藏陷阱,如数据不均衡和工况迁移挑战,并提出了解决方案。

weixin_33694172的博客 493
上一篇: 【XMPP】client 连接server的过程
下一篇: 【PhoneGap】环境安装配置浅析
StreamH
博客等级 码龄21年 47粉丝 54原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值