2010-09-08 24 views
0

Ive a obtenu ejabberd que mon serveur XMPP et voici mon code php:XMPP Handshake (SASL DIGEST-MD5)

$stripped = strip_tags($returnTwo); // remove the xml tags from the response stanza 
$decoded = base64_decode($stripped); // decode the jibberish 
$regex = "([0-9]{8,})"; // create regex to extract the nonce 
preg_match($regex, $decoded, $noncearr); // extracts nonce 
$nonce = $noncearr[0]; // finally, we can put the nonce into a variable to continue... 

// 1. Create a string of the form "username:realm:password". Call this string X. 
$x = "username:server.dyndns.org:password"; 
// 2. Compute the 16 octet MD5 hash of X. Call the result Y. 
$y = md5($x); 
// 3. Create a string of the form "Y:nonce:cnonce:authzid". Call this string A1. 
$a = "$y:$nonce:$cnonce:[email protected]/webchat"; 
// 4. Create a string of the form "AUTHENTICATE:digest-uri". Call this string A2. 
$a2 = "AUTHENTICATE:xmpp/server.dyndns.org"; 
// 5. Compute the 32 hex digit MD5 hash of A1. Call the result HA1. 
$ha1 = md5($a1); 
// 6. Compute the 32 hex digit MD5 hash of A2. Call the result HA2. 
$ha2 = md5($a2); 
// 7. Create a string of the form "HA1:nonce:nc:cnonce:qop:HA2". Call this string KD. 
$kd = "$ha1:$nonce:00000001:$cnonce:auth:$ha2"; 
// 8. Compute the 32 hex digit MD5 hash of KD. Call the result Z. 
$z = md5($kd); 
$b64z = base64_encode($z); 
$respond = "<response xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>$b64z</response>"; 

// initialize curl again 
$sendThree = curl_init("http://localhost:5280/http-bind"); 
curl_setopt($sendThree, CURLOPT_POST, 1); 
curl_setopt($sendThree, CURLOPT_POSTFIELDS, $respond); 
$returnThree = curl_exec($sendThree); 
curl_close($sendThree); // close the curl connection 

mon problème est que le serveur renvoie un "1". C'est le cas, pas d'acceptation, pas d'erreur, juste un numéro 1. Les étapes avant cela ont toutes retourné ce qui était attendu, mais cette partie a des problèmes avec. im nouveau à php (ce sera seulement ma deuxième page créée avec lui) donc je me demande si j'ai suivi les étapes SASL correctement ou si c'est un problème avec ejabberd?

+0

Si vous utilisez BOSH, je crois que vous devez inclure le '' balise. –

Répondre

0

curl_exec renvoie un booléen en fonction de sa réussite. Donc, votre fonction est de retour true, qui obtient le nombre casté dans 1.

Pour obtenir le résultat réel, vous devez ajouter cette ligne:

curl_setopt($sendThree, CURLOPT_RETURNTRANSFER, true); 
+0

Salut, merci pour les réponses, mais aucune des deux options travaillé – Jonathan

+0

désolé, je dois dire qu'ils travaillaient, mais ils ne prenaient pas à la prochaine étape qui devrait être un succès, échouer, ou mauvaise réponse coder du serveur.la réponse résultante était: – Jonathan

+0

Vous devez envelopper la chaîne que vous envoyez dans ' et '' selon la spécification BOSH: http://xmpp.org/extensions/xep-0124.html –

0

Si vous rencontrez toujours des problèmes avec auth DIGEST-MD5 , je vous recommande de vérifier JAXL XMPP Auth classe qui va probablement vous aider http://github.com/abhinavsingh/JAXL/blob/master/xmpp/xmpp.auth.php#L86

+0

ill jeter un coup d'oeil, et je pourrais avoir à, mais encore dans les étapes d'apprentissage et veulent savoir ce qui se passe en arrière-plan, si cela a du sens lol – Jonathan

+0

oui absolument logique, mais au lieu de réinventer la roue vous-même je vous recommande pour prendre une bibliothèque, l'utiliser, jouer avec, voir la bibliothèque du client et les journaux côté serveur, les comparer avec RFC pour avoir une idée de ce qui se passe ..... –

0

ok, j'ai compris le problème: j'ai oublié d'incrémenter mon rid ... DOI!

et encore satisfaction eldudes ..... maintenant je une mauvaise erreur de protocole x (

0

vérifier votre code, vous avez la chaîne HA1 $ = md5 (a1 $) et seulement $ un valiable, sans " 1" .