使用PHP连接到BOSCH服务后,完整ID为空

时间:2012-11-29 17:37:02

标签: strophe bosh xmpphp

我正在尝试通过XMPHP预绑定XMPP会话,并将rid / sid / jid传递给strophe客户端以附加到会话。

连接代码:

$conn = new CIRCUIT_BOSH('server.com', 7070, $username, $pass, $resource, 'server.com', $printlog=true, $loglevel=XMPPHP_Log::LEVEL_VERBOSE);
$conn->autoSubscribe();

try{
  $conn->connect('http://xmpp.server.com/http-bind', 1, true);
  $log->lwrite('Connected!');
}catch(XMPPHP_Exception $e){
  die($e->getMessage());
}

我得到了rid和sid,但是$ conn对象中的fulljid保持空白,我无法在我的openfire管理控制台上看到会话。

如果我通过使用给定资源手动创建jid并将jid / rid / sid传递给strophe以在attach中使用,我会获得ATTACHED状态,并且我看到从客户端到BOSH ip的调用但是我仍然没有看到会话,我不能使用连接。

Strophe客户代码:

打电话给文件准备好了:

var sid = $.cookie('sid');
var rid = $.cookie('rid');
var jid = $.cookie('jid');
    $(document).trigger('attach', {
      sid: sid,
      rid: rid,
      jid: jid,
    });

$(document).bind('attach', function (ev, data) {

    var conn = new Strophe.Connection(
        "http://xmpp.server.com/http-bind");

    conn.attach(data.jid, data.sid, data.rid, function (status) {
        if (status === Strophe.Status.CONNECTED) {
            $(document).trigger('connected');
        } else if (status === Strophe.Status.DISCONNECTED) {
            $(document).trigger('disconnected');
        } else if (status === Strophe.Status.ATTACHED){
            $(document).trigger('attached');
        }
    });

    Object.connection = conn;

}); 

我认为问题始于XMPPHP方面,而不是正确创建会话。 “附加”被触发但从未“连接”,是否应该发送状态“已连接”? 我错过了什么?

1 个答案:

答案 0 :(得分:0)

好的,解决了,我看到XMPPHP lib在openfire服务器上根本没有创建会话,所以我为XMPP类编写了一个简单的测试,它很好并创建了会话,而且XMPP_BOSH类没有管理创造一个。然后我在这里看到了问题报告:http://code.google.com/p/xmpphp/issues/detail?id=47评论no.9工作,它通过将processUntil()函数从XMLStream.php复制到BOSH.php来修复问题,仍然无法弄清楚为什么这个工作中。然后我发现我在openfire服务器上为用户设置的一些密码也有重叠的错误。这些密码包含这些! # % ^个字符,由于某种原因,XMPP_BOSH发送的密码已损坏或已更改,因此我收到了Auth Failed异常。更改密码修复了问题,我现在可以附加到使用Strophe.js库创建的会话XMPPHP。