public function decode() { parent::decode(); $this->clientID = Binary::readLong($this->get(8)); $this->session = Binary::readLong($this->get(8)); $this->unknown = $this->get(1); }
public function decode() { parent::decode(); $this->clientID = Binary::readLong($this->get(8)); $this->sendPing = Binary::readLong($this->get(8)); $this->useSecurity = \ord($this->get(1)) > 0; }
public function decode() { parent::decode(); $this->offset += 16; //Magic $this->protocol = $this->getByte(); $this->mtuSize = strlen($this->get(true)) + 18; }
public function decode() { parent::decode(); $this->offset += 16; //Magic $this->protocol = \ord($this->get(1)); $this->mtuSize = \strlen($this->get(\true)) + 18; }
public function decode() { parent::decode(); $this->pingID = Binary::readLong($this->get(8)); $this->serverID = Binary::readLong($this->get(8)); $this->offset += 16; //magic $this->serverName = $this->getString(); }
public function decode() { parent::decode(); $this->offset += 16; //Magic $this->getAddress($this->serverAddress, $this->serverPort); $this->mtuSize = $this->getShort(); $this->clientID = $this->getLong(); }
public function decode() { parent::decode(); $this->offset += 16; //Magic $this->getAddress($this->serverAddress, $this->serverPort); $this->mtuSize = \unpack("n", $this->get(2))[1]; $this->clientID = Binary::readLong($this->get(8)); }
public function decode() { parent::decode(); $this->pingID = $this->getLong(); $this->serverID = $this->getLong(); $this->offset += 16; //magic $this->serverName = $this->getString(); }
public function decode() { parent::decode(); $this->offset += 16; //Magic $this->serverID = Binary::readLong($this->get(8)); \ord($this->get(1)); //security $this->mtuSize = \unpack("n", $this->get(2))[1]; }
public function decode() { parent::decode(); $this->offset += 16; //Magic $this->serverID = $this->getLong(); $this->clientPort = $this->getShort(); $this->mtuSize = $this->getShort(); //server security }
public function decode() { parent::decode(); $this->offset += 16; //Magic $this->serverID = Binary::readLong($this->get(8)); $this->clientPort = unpack("n", $this->get(2))[1]; $this->mtuSize = unpack("n", $this->get(2))[1]; //server security }
public function decode() { parent::decode(); $this->getAddress($this->address, $this->port); for ($i = 0; $i < 10; ++$i) { $this->getAddress($addr, $port, $version); $this->systemAddresses[$i] = [$addr, $port, $version]; } $this->sendPing = Binary::readLong($this->get(8)); $this->sendPong = Binary::readLong($this->get(8)); }
public function decode() { parent::decode(); $this->cookie = $this->get(4); $this->security = $this->get(1); $this->port = unpack("n", $this->get(2))[1]; $this->dataArray0 = $this->get(ord($this->get(1))); $this->dataArray = $this->getDataArray(9); $this->timestamp = $this->get(2); $this->session2 = Binary::readLong($this->get(8)); $this->session = Binary::readLong($this->get(8)); }
public function decode() { parent::decode(); $this->seqNumber = unpack("V", $this->get(3) . "")[1]; while (!$this->feof()) { $offset = 0; $packet = EncapsulatedPacket::fromBinary(substr($this->buffer, $this->offset), false, $offset); $this->offset += $offset; if (strlen($packet->buffer) === 0) { break; } $this->packets[] = $packet; } }
public function decode() { parent::decode(); $count = $this->getShort(); $this->packets = []; $cnt = 0; for ($i = 0; $i < $count and !$this->feof() and $cnt < 4096; ++$i) { if ($this->getByte() === 0) { $start = $this->getLTriad(); $end = $this->getLTriad(); if ($end - $start > 512) { $end = $start + 512; } for ($c = $start; $c <= $end; ++$c) { $this->packets[$cnt++] = $c; } } else { $this->packets[$cnt++] = $this->getLTriad(); } } }
public function decode() { parent::decode(); $count = unpack("n", $this->get(2))[1]; $this->packets = []; $cnt = 0; for ($i = 0; $i < $count and !$this->feof() and $cnt < 4096; ++$i) { if (ord($this->get(1)) === 0) { $start = unpack("V", $this->get(3) . "")[1]; $end = unpack("V", $this->get(3) . "")[1]; if ($end - $start > 512) { $end = $start + 512; } for ($c = $start; $c <= $end; ++$c) { $this->packets[$cnt++] = $c; } } else { $this->packets[$cnt++] = unpack("V", $this->get(3) . "")[1]; } } }
public function decode() { parent::decode(); $this->pingID = Binary::readLong($this->get(8)); }
public function decode() { parent::decode(); //TODO, not needed yet }
public function decode() { parent::decode(); $this->pingID = $this->getLong(); //magic }
public function handlePacket(Packet $packet) { $this->isActive = \true; $this->lastUpdate = \microtime(\true); if ($this->state === self::STATE_CONNECTED or $this->state === self::STATE_CONNECTING_2) { if ($packet::$ID >= 0x80 and $packet::$ID <= 0x8f and $packet instanceof DataPacket) { //Data packet $packet->decode(); if ($packet->seqNumber < $this->windowStart or $packet->seqNumber > $this->windowEnd or isset($this->receivedWindow[$packet->seqNumber])) { return; } $diff = $packet->seqNumber - $this->lastSeqNumber; unset($this->NACKQueue[$packet->seqNumber]); $this->ACKQueue[$packet->seqNumber] = $packet->seqNumber; $this->receivedWindow[$packet->seqNumber] = $packet->seqNumber; if ($diff !== 1) { for ($i = $this->lastSeqNumber + 1; $i < $packet->seqNumber; ++$i) { if (!isset($this->receivedWindow[$i])) { $this->NACKQueue[$i] = $i; } } } if ($diff >= 1) { $this->lastSeqNumber = $packet->seqNumber; $this->windowStart += $diff; $this->windowEnd += $diff; } foreach ($packet->packets as $pk) { $this->handleEncapsulatedPacket($pk); } } else { if ($packet instanceof ACK) { $packet->decode(); foreach ($packet->packets as $seq) { if (isset($this->recoveryQueue[$seq])) { foreach ($this->recoveryQueue[$seq]->packets as $pk) { if ($pk instanceof EncapsulatedPacket and $pk->needACK and $pk->messageIndex !== \null) { unset($this->needACK[$pk->identifierACK][$pk->messageIndex]); } } unset($this->recoveryQueue[$seq]); } } } elseif ($packet instanceof NACK) { $packet->decode(); foreach ($packet->packets as $seq) { if (isset($this->recoveryQueue[$seq])) { $pk = $this->recoveryQueue[$seq]; $pk->seqNumber = $this->sendSeqNumber++; $this->packetToSend[] = $pk; unset($this->recoveryQueue[$seq]); } } } } } elseif ($packet::$ID > 0x0 and $packet::$ID < 0x80) { //Not Data packet :) $packet->decode(); if ($packet instanceof UNCONNECTED_PING) { $pk = new UNCONNECTED_PONG(); $pk->serverID = $this->sessionManager->getID(); $pk->pingID = $packet->pingID; $pk->serverName = $this->sessionManager->getName(true); $this->sendPacket($pk); $pk->serverName = $this->sessionManager->getName(false); $this->sendPacket($pk); } elseif ($packet instanceof OPEN_CONNECTION_REQUEST_1) { $packet->protocol; //TODO: check protocol number and refuse connections $pk = new OPEN_CONNECTION_REPLY_1(); $pk->mtuSize = $packet->mtuSize; $pk->serverID = $this->sessionManager->getID(); $this->sendPacket($pk); $this->state = self::STATE_CONNECTING_1; } elseif ($this->state === self::STATE_CONNECTING_1 and $packet instanceof OPEN_CONNECTION_REQUEST_2) { $this->id = $packet->clientID; if ($packet->serverPort === $this->sessionManager->getPort() or !$this->sessionManager->portChecking) { $this->mtuSize = \min(\abs($packet->mtuSize), 1464); //Max size, do not allow creating large buffers to fill server memory $pk = new OPEN_CONNECTION_REPLY_2(); $pk->mtuSize = $this->mtuSize; $pk->serverID = $this->sessionManager->getID(); $pk->clientAddress = $this->address; $pk->clientPort = $this->port; $this->sendPacket($pk); $this->state = self::STATE_CONNECTING_2; } } } }