TAG:
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了。
(sxcong) |