Beispiel #1
0
 /**
  * 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;
 }