Das mit dem Seed hast du irgendwie alles durcheinander geworfen.
1.
Zuerst sendest du mit _send_hello_request.
Dann wartest du viel zu kurz auf den Seed. Der wird in einer ms nicht da sein.
Das musst du anders lösen, z.b. zuerst den Buffer Seed leeren und nach _send_hello_request warten bis er nicht mehr leer ist.
2.
Im ReceiveData wird der Seed mit 16 Byte rausgeschnitten, aber nie in den Buffer geschrieben. Das soll bei Default: passieren. Und nur wenn es nicht 16 Byte sind ihn mit Nullbytes auffüllen.
3.
Im _send_handshake_request übergibst du direkt den Seed aus dem Buffer. Also ist das str_pad hinfällig. Ebenso wird der Seed aus dem Buffer falsch / leer sein oder von einem vorherigen Versuch sein, da du nie auf den richtigen Seed gewartet hast.
Ja…
Okay also wird mit pcco geantwortet.
Der Rest von oben gilt aber weiter.
Siehst du auch in deinem Debug:
Connect Seed enthält als String ‚false‘.
Siehst du auch beim senden im Debug:
TXT: 08.02.2018 18:13:50.00 | TX MSG crypted: | …False
Tip: Verwende SendDebug anders. Nicht gemischt das JSON und Klartext und Binär ausgeben.
Hier ist es besser den Datenstrom decodiert auszugeben, dann findet man auch die Nutzdaten wieder in allen Ausgaben.
In der connect Funktion setze ich den Buffer vorher auf auf leer.
$this->SetBuffer("Seed", "");
Und warte mit einer while Schliefe so lange bis er voll ist?! Ich hab da irgendwie angst einer Dauerschleife zu bauen…
Gibt es da eine andere bzw. bessere Lösung?
Edit: Wobei jetzt wo das substr im pcco Case ist, hat er den Buffer schon voll, an der Stelle im Connect.
Somit wird max 2,5 Sekunden auf eine Antwort gewartet sonst Abbruch.
Jetzt hast du im ReceiveData das hier dreimal drinnen:
$Seed = substr($Payload,12,16);
Und mach eine Debugausgabe der unverschlüsselten Daten beim senden.
Das Paket ist auf jeden Fall kaputt, da du str_pad falsch benutzt.
Die Funktion hat einen Rückgabewert und ändert nicht das Original http://php.net/manual/de/function.str-pad.php
Michael
Danke, die Funktion schaue ich mir an.
Aber ich denke ich habe Iwo noch Fehler bei den Paketen.
Sobald ein Pakete abgeschickt wird, verliert der Socket die Verbindung zur PS4.
ich habe eben folgende Nachricht von dem Entwickler bekommen, der es in NodeJS umgesetzt hat…
You send unencrypted CHello („client hello“)
PS4 responds with unencrypted SHello („server hello“)
The SHello packet contains the server’s „seed“ that you use to configure crypto. You then use the PS4’s public key to encrypt your client „seed“ and include the encrypted seed in your response (as well as the server’s „seed“).
AFTER sending the handshake packet, everything MUST be encrypted/decrypted.
Meiner Meinung tu ich das ja jetzt. Oder hab ich noch irgendwo etwas übersehen?
Ich versuche das irgendwie nach zu vollziehen.
Dazu brauche ich aber die Daten.
Ich sehe du hast jetzt bei ReceiveData eine Ausgabe der utf8decodierten Daten eingebaut.
Dies und das Debug aus dem socket würde mit helfen
Aktuell kann ich noch nicht mal das Ende vom Paket finden
Auch gerne per PN wenn du irgendwelche Daten hast, welche nicht jeder sehen soll.