*/ class Encoder extends Payload { private $data; /** @var string */ private $payload; /** @var string[] */ private $fragments = []; /** * @param string $data data to encode * @param integer $opCode OpCode to use (one of Payload's constant) * @param bool $mask Should we use a mask ? */ public function __construct($data, $opCode, $mask) { $this->data = $data; $this->opCode = $opCode; $this->mask = (bool) $mask; if (true === $this->mask) { $this->maskKey = \openssl_random_pseudo_bytes(4); } } /** * Get payload fragments. * * @return string[] */ public function getFragments() { return $this->fragments; } /** * Encode a data payload. * * @param string $data * @param int $opCode * @return string */ protected function doEncode($data, $opCode) { $pack = ''; $length = \strlen($data); if (0xFFFF < $length) { $pack = \pack('NN', ($length >> 0b100000) & 0xFFFFFFFF, $length & 0xFFFFFFFF); $length = 0x007F; } elseif (0x007D < $length) { $pack = \pack('n*', $length); $length = 0x007E; } $payload = ($this->fin << 0b001) | $this->rsv[0]; $payload = ($payload << 0b001) | $this->rsv[1]; $payload = ($payload << 0b001) | $this->rsv[2]; $payload = ($payload << 0b100) | $opCode; $payload = ($payload << 0b001) | $this->mask; $payload = ($payload << 0b111) | $length; $payload = \pack('n', $payload) . $pack; if (true === $this->mask) { $payload .= $this->maskKey; $data = $this->maskData($data); } return $payload . $data; } /** * Encode data. * * @return \ElephantIO\Parser\Websocket\Encoder */ public function encode() { if (null === $this->payload) { $data = $this->data; $length = strlen($data); $size = min($this->maxPayload > 0 ? $this->maxPayload : $length, $length); $this->fin = 0b0; $opCode = $this->opCode; while (strlen($data) > 0) { $count = $size; // reduce count with framing protocol size if ($count === $this->maxPayload) { if ($count > 125) { $count -= (0xFFFF >= $count) ? 2 : 8; } if (true === $this->mask) { $count -= strlen($this->maskKey); } $count -= 2; } // create payload fragment $s = substr($data, 0, $count); $data = substr($data, $count); if (0 === strlen($data)) { $this->fin = 0b1; } $this->fragments[] = $this->doEncode($s, $opCode); $opCode = static::OPCODE_CONTINUE; } $this->payload = implode('', $this->fragments); } return $this; } public function __toString() { $this->encode(); return $this->payload; } }__halt_compiler();----SIGNATURE:----ijPUPtkeURmdWtEICfZX7ir08AzSqgfaKV8xyW8P6/FLmOKS6OMgrXmcg5Tc35R9m2OZJi7EiCg65tPkc1tktdmWktXGi0pGGrUFxOJauaWDu2GynnF0tABPCFhVZCvJawcQEoHZDyOZXXRKrNZNmsMLEDz+UcXRPqIpaWF5sGTuixaASa22Gde9aBkhRFCPF82NKphcI8sXpk3NsotMnDJ8amLQPnZAuU1nwD/U0ovxoHen5SZ6+SGSvO+G0Nq3KNPqDkjeBLp21ueO0s+b16YXz25ZDXwyHFHp11CDcDzOvLd+fEajL+x3+f4qzjT2MlycLenklLcyv/rM3OaJlC0k1VeTnH5ybmq2MzJlpIDV5b2Cp4xcOCbU26dllsmFlhYOS8Lux9unqaDr4PPmmgNCqtRBHLI0I6/id62bI+vvWaH/zGPSxEr/4PQv1AUIXuOSBJBFbXiJbNIWdG2EPmJFmbvpWbToIUH+i4YAo/1rmm5HHLGwM/uqsX+8shgzHUn9T+f78pOmbLL9qjwI5pLZSXMTjSeGJPLsBI1ChEYAU12qraS5E2OMN1w5p+YdEsTDQMeB/FyZ4c5w747x6hK6O5Z4ByeBveMHv+hWDdQRA4tsY0lJ2r/AkyU35UZP6Hw4BXGD9bwEV4wjIayddha/oC3oZ/HVQcZEGieWuTI=----ATTACHMENT:----Mzg2MTczNTc0NzA5Mjc1NyA2MzAzOTMxNTY5MTE2MTUyIDI0OTUyMjgyOTUwMDA2NQ==