mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-06-14 15:35:31 +00:00
Cleaned up LoginPacket handling, don't nuke the buffer
This commit is contained in:
parent
91c6086ae1
commit
ccbdb77618
@ -82,7 +82,7 @@ class PlayerNetworkSessionAdapter extends NetworkSession{
|
|||||||
$timings->startTiming();
|
$timings->startTiming();
|
||||||
|
|
||||||
$packet->decode();
|
$packet->decode();
|
||||||
if(!$packet->feof()){
|
if(!$packet->feof() and !$packet->mayHaveUnreadBytes()){
|
||||||
$remains = substr($packet->buffer, $packet->offset);
|
$remains = substr($packet->buffer, $packet->offset);
|
||||||
$this->server->getLogger()->debug("Still " . strlen($remains) . " bytes unread in " . $packet->getName() . ": 0x" . bin2hex($remains));
|
$this->server->getLogger()->debug("Still " . strlen($remains) . " bytes unread in " . $packet->getName() . ": 0x" . bin2hex($remains));
|
||||||
}
|
}
|
||||||
|
@ -62,6 +62,14 @@ abstract class DataPacket extends BinaryStream{
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether the packet may legally have unread bytes left in the buffer.
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function mayHaveUnreadBytes() : bool{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
public function decode(){
|
public function decode(){
|
||||||
$this->offset = 0;
|
$this->offset = 0;
|
||||||
$this->decodeHeader();
|
$this->decodeHeader();
|
||||||
|
@ -27,6 +27,7 @@ namespace pocketmine\network\mcpe\protocol;
|
|||||||
|
|
||||||
|
|
||||||
use pocketmine\network\mcpe\NetworkSession;
|
use pocketmine\network\mcpe\NetworkSession;
|
||||||
|
use pocketmine\utils\BinaryStream;
|
||||||
use pocketmine\utils\Utils;
|
use pocketmine\utils\Utils;
|
||||||
|
|
||||||
class LoginPacket extends DataPacket{
|
class LoginPacket extends DataPacket{
|
||||||
@ -63,17 +64,20 @@ class LoginPacket extends DataPacket{
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function mayHaveUnreadBytes() : bool{
|
||||||
|
return $this->protocol !== null and $this->protocol !== ProtocolInfo::CURRENT_PROTOCOL;
|
||||||
|
}
|
||||||
|
|
||||||
protected function decodePayload(){
|
protected function decodePayload(){
|
||||||
$this->protocol = $this->getInt();
|
$this->protocol = $this->getInt();
|
||||||
|
|
||||||
if($this->protocol !== ProtocolInfo::CURRENT_PROTOCOL){
|
if($this->protocol !== ProtocolInfo::CURRENT_PROTOCOL){
|
||||||
$this->buffer = null;
|
return; //Do not attempt to continue decoding for non-accepted protocols
|
||||||
return; //Do not attempt to decode for non-accepted protocols
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->setBuffer($this->getString(), 0);
|
$buffer = new BinaryStream($this->getString());
|
||||||
|
|
||||||
$this->chainData = json_decode($this->get($this->getLInt()), true);
|
$this->chainData = json_decode($buffer->get($buffer->getLInt()), true);
|
||||||
foreach($this->chainData["chain"] as $chain){
|
foreach($this->chainData["chain"] as $chain){
|
||||||
$webtoken = Utils::decodeJWT($chain);
|
$webtoken = Utils::decodeJWT($chain);
|
||||||
if(isset($webtoken["extraData"])){
|
if(isset($webtoken["extraData"])){
|
||||||
@ -89,7 +93,7 @@ class LoginPacket extends DataPacket{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->clientDataJwt = $this->get($this->getLInt());
|
$this->clientDataJwt = $buffer->get($buffer->getLInt());
|
||||||
$this->clientData = Utils::decodeJWT($this->clientDataJwt);
|
$this->clientData = Utils::decodeJWT($this->clientDataJwt);
|
||||||
|
|
||||||
$this->clientId = $this->clientData["ClientRandomId"] ?? null;
|
$this->clientId = $this->clientData["ClientRandomId"] ?? null;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user