public function getFrameOptions() { $isChecksum = false; while (!$isChecksum) { $idOption = hexdec($this->buffer->getUint16LE()); $nameOption = Option::$optionIds[$idOption]; $sizeOption = $this->buffer->getUint16LE(); if ($nameOption === 'checksum') { $isChecksum = true; $expectedChecksum = 0; $checksum = $this->buffer->getUint32LE(); $data = $this->buffer->getData(); for ($i = 0; $i < $this->buffer->getLength() - $sizeOption; ++$i) { $expectedChecksum = $expectedChecksum + hexdec(bin2hex($data[$i])); } $expectedChecksum = dechex($expectedChecksum); if ($checksum !== $expectedChecksum) { throw new \Exception('Invalid checksum'); } } $option = new Option($idOption, $this->buffer); $this->options[$option->getName()] = $option; } }