/** * Encode a DomainName field * * @param \LibDNS\Records\Types\DomainName $domainName * @param \LibDNS\Encoder\EncodingContext $encodingContext * @return string */ private function encodeDomainName(DomainName $domainName, EncodingContext $encodingContext) { $packetIndex = $encodingContext->getPacket()->getLength() + 12; $labelRegistry = $encodingContext->getLabelRegistry(); $result = ''; $labels = $domainName->getLabels(); if ($encodingContext->useCompression()) { do { $part = implode('.', $labels); $index = $labelRegistry->lookupIndex($part); if ($index === null) { $labelRegistry->register($part, $packetIndex); $label = array_shift($labels); $length = strlen($label); $result .= chr($length) . $label; $packetIndex += $length + 1; } else { $result .= pack('n', 0b1100000000000000 | $index); break; } } while ($labels); if (!$labels) { $result .= ""; } } else { foreach ($labels as $label) { $result .= chr(strlen($label)) . $label; } $result .= ""; } return $result; }