MyJingle的使用经验

6461阅读 2评论2012-12-14 sxcong
分类:C/C++

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了。
 
上一篇:gloox 1.0 内存泄露问题
下一篇:gloox使用IP登录openfire

文章评论