Add restrictions on packet send directions with interfaces

This prevents plugins sending wrong packets at the compiler level (or would, if we had a compiler). It's more robust than a getter for client/server and throwing an exception since a static analysis tool can detect faults created by sending wrong packets from the server. This is also used to deny service to dodgy clients which send wrong packets to the server to attack it.
This commit is contained in:
Dylan K. Taylor
2019-01-04 03:19:47 +00:00
parent b82e00ffdf
commit 76f1ee1827
130 changed files with 237 additions and 174 deletions

View File

@ -25,7 +25,7 @@ namespace pocketmine\event\server;
use pocketmine\event\Cancellable;
use pocketmine\event\CancellableTrait;
use pocketmine\network\mcpe\protocol\Packet;
use pocketmine\network\mcpe\protocol\ClientboundPacket;
use pocketmine\Player;
/**
@ -36,12 +36,12 @@ class DataPacketBroadcastEvent extends ServerEvent implements Cancellable{
/** @var Player[] */
private $players;
/** @var Packet[] */
/** @var ClientboundPacket[] */
private $packets;
/**
* @param Player[] $players
* @param Packet[] $packets
* @param Player[] $players
* @param ClientboundPacket[] $packets
*/
public function __construct(array $players, array $packets){
$this->players = $players;
@ -63,14 +63,14 @@ class DataPacketBroadcastEvent extends ServerEvent implements Cancellable{
}
/**
* @return Packet[]
* @return ClientboundPacket[]
*/
public function getPackets() : array{
return $this->packets;
}
/**
* @param Packet[] $packets
* @param ClientboundPacket[] $packets
*/
public function setPackets(array $packets) : void{
$this->packets = $packets;

View File

@ -25,30 +25,30 @@ namespace pocketmine\event\server;
use pocketmine\event\Cancellable;
use pocketmine\event\CancellableTrait;
use pocketmine\network\mcpe\protocol\Packet;
use pocketmine\network\mcpe\protocol\ServerboundPacket;
use pocketmine\Player;
class DataPacketReceiveEvent extends ServerEvent implements Cancellable{
use CancellableTrait;
/** @var Packet */
/** @var ServerboundPacket */
private $packet;
/** @var Player */
private $player;
/**
* @param Player $player
* @param Packet $packet
* @param Player $player
* @param ServerboundPacket $packet
*/
public function __construct(Player $player, Packet $packet){
public function __construct(Player $player, ServerboundPacket $packet){
$this->packet = $packet;
$this->player = $player;
}
/**
* @return Packet
* @return ServerboundPacket
*/
public function getPacket() : Packet{
public function getPacket() : ServerboundPacket{
return $this->packet;
}

View File

@ -25,30 +25,30 @@ namespace pocketmine\event\server;
use pocketmine\event\Cancellable;
use pocketmine\event\CancellableTrait;
use pocketmine\network\mcpe\protocol\Packet;
use pocketmine\network\mcpe\protocol\ClientboundPacket;
use pocketmine\Player;
class DataPacketSendEvent extends ServerEvent implements Cancellable{
use CancellableTrait;
/** @var Packet */
/** @var ClientboundPacket */
private $packet;
/** @var Player */
private $player;
/**
* @param Player $player
* @param Packet $packet
* @param Player $player
* @param ClientboundPacket $packet
*/
public function __construct(Player $player, Packet $packet){
public function __construct(Player $player, ClientboundPacket $packet){
$this->packet = $packet;
$this->player = $player;
}
/**
* @return Packet
* @return ClientboundPacket
*/
public function getPacket() : Packet{
public function getPacket() : ClientboundPacket{
return $this->packet;
}