2012-11-29 13 views
0

我試圖通過XMPHP預先綁定XMPP會話並將rid/sid/jid傳遞給strophe客戶端以附加到會話。與XMPHP連接到BOSH服務後,fulljid爲空

連接代碼在這裏:

$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()); 
} 

我正在擺脫和SID,但在$康恩對象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

附加到會話時,只會返回ATTACHED狀態。您可以通過爲xmlOutput和xmlInput提供函數來檢查發送和接收的內容。類似conn.xmlOutput = function(body){console.log(body); } – brimil01

+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。