Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1239515
  • 博文数量: 76
  • 博客积分: 1959
  • 博客等级: 上尉
  • 技术积分: 2689
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-19 12:07
个人简介

樽中酒不空

文章分类

全部博文(76)

文章存档

2020年(4)

2019年(1)

2017年(2)

2016年(2)

2015年(7)

2014年(11)

2013年(13)

2012年(18)

2011年(2)

2010年(16)

分类: C/C++

2012-12-14 14:05:54

1 MyJingle底层用到了libjingle。这里只涉及其中的文字部分。语音视频和文件,基本不可能用xmpp来传。
2 MyJingle缺省是登录gmail,稍改一下就可以登录openfire:
  talk/xmpp/saslplainmechanism.h
  credential.Append(user_jid_.Str());修改为credential.Append(user_jid_.node());
3 修改后,可以使用域名登录openfire,但一般在本地机器上安装openfire之后,习惯都是以IP登录。MyJingle使用IP登录会返回bind失败的错误。跟踪一下,发现问题和上面一样,还是改Jid。
在xmpplogintask.cc的XmppLoginTask::Advance() 这个函数里,
找到 case LOGINSTATE_BIND_REQUESTED:
关键在这一句:
if (pctx_->user_jid_.domain() != STR_DEFAULT_DOMAIN &&
           fullJid_.BareJid() != pctx_->user_jid_) 。

看一下定义:const std::string STR_DEFAULT_DOMAIN("default.talk.google.com");
明显不符合。
然后,两个Jid的比较肯定不等,因为登录时我们用的是node。所以修改成:
if (fullJid_.BareJid().node() != pctx_->user_jid_.node())
{
return Failure(XmppEngine::ERROR_BIND);
}

重编译一下libjingle和MyJingle,登录成功,发消息成功,收消息成功。OK了。
 
阅读(6261) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

sxcong2015-01-15 13:42:59

lwow2020:语音视频和文件,基本不可能用xmpp来传.这句话是什么意思呢?xmpp不就是传视频和语音的吗?

xmpp最初是用来传文本消息,因为是用xml描述,没办法传二进制。扩展协议应该可以传二进制,但市面上有更好的办法。

回复 | 举报

lwow20202015-01-12 10:58:05

语音视频和文件,基本不可能用xmpp来传.这句话是什么意思呢?xmpp不就是传视频和语音的吗?