From 0e508876d2d3762bbbedb48090f8a2e6ba790503 Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Sun, 7 Oct 2018 15:32:23 +0100 Subject: [PATCH] RakLibInterface: Disconnect players who trigger errors during handler this is cleaner than leaving the player hanging for 5 seconds (which they'll often timeout from anyway). Banning the IP without kicking the player can often look like "lag" and end up getting brushed off as a performance issue. --- src/pocketmine/network/mcpe/RakLibInterface.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/pocketmine/network/mcpe/RakLibInterface.php b/src/pocketmine/network/mcpe/RakLibInterface.php index f8eefa12a..a200c2ffd 100644 --- a/src/pocketmine/network/mcpe/RakLibInterface.php +++ b/src/pocketmine/network/mcpe/RakLibInterface.php @@ -154,17 +154,19 @@ class RakLibInterface implements ServerInstance, AdvancedSourceInterface{ public function handleEncapsulated(string $identifier, EncapsulatedPacket $packet, int $flags) : void{ if(isset($this->players[$identifier])){ //get this now for blocking in case the player was closed before the exception was raised - $address = $this->players[$identifier]->getAddress(); + $player = $this->players[$identifier]; + $address = $player->getAddress(); try{ if($packet->buffer !== ""){ $pk = PacketPool::getPacket($packet->buffer); - $this->players[$identifier]->handleDataPacket($pk); + $player->handleDataPacket($pk); } }catch(\Throwable $e){ $logger = $this->server->getLogger(); $logger->debug("Packet " . (isset($pk) ? get_class($pk) : "unknown") . " 0x" . bin2hex($packet->buffer)); $logger->logException($e); + $player->close($player->getLeaveMessage(), "Internal server error"); $this->interface->blockAddress($address, 5); } }