. All rights reserved. * * See LICENSE for more details. * * @category Networking * @package Net_DNS2 * @author Mike Pultz * @copyright 2022 Mike Pultz * @license http://www.opensource.org/licenses/bsd-license.php BSD License * @link https://netdns2.com/ * @since File available since Release 1.5.3 * */ /** * text compression/expansion and labeling class * */ class Net_DNS2_Names { /** * pack a text string * * @param string $name a name to be packed * * @return string * @access public * */ public static function pack($name) { return (is_null($name) == true) ? null : pack('Ca*', strlen($name), $name); } /** * returns the canonical wire-format representation of the domain name * * @param string $name a name to be packed * * @return string * @access public * */ public static function canonical($name) { $names = explode('.', $name); $compname = ''; while (!empty($names)) { $first = array_shift($names); $length = strlen($first); $compname .= pack('Ca*', $length, $first); } $compname .= "\0"; return $compname; } /** * parses a domain string into a single string * * @param string $rdata the DNS packet to look in for the domain name * @param integer &$offset the offset into the given packet object * * @return mixed either a name string or null if it's not found. * @access public * */ public static function unpack($rdata, &$offset) { if ($offset > strlen($rdata)) { return null; } $name = ''; $len = ord($rdata[$offset]); if ($len == 0) { return null; } $offset++; if ( ($len + $offset) > strlen($rdata)) { $name = substr($rdata, $offset); } else { $name = substr($rdata, $offset, $len); } $offset += strlen($name); return $name; } }