__CLASS__.'::fillOutSoa', CNAME::TYPE => __CLASS__.'::fillOutCname', DNAME::TYPE => __CLASS__.'::fillOutCname', SRV::TYPE => __CLASS__.'::fillOutSrv', NS::TYPE => __CLASS__.'::fillOutCname', PTR::TYPE => __CLASS__.'::fillOutCname', MX::TYPE => __CLASS__.'::fillOutMx', AAAA::TYPE => __CLASS__.'::fillOutAaaa', ]; public static function build(Zone $zone): string { $master = '$ORIGIN '.$zone->getName().Tokens::LINE_FEED; if (null !== $zone->getDefaultTtl()) { $master .= '$TTL '.$zone->getDefaultTtl().Tokens::LINE_FEED; } foreach ($zone as $rr) { if (null !== $rr->getRdata()) { $master .= preg_replace('/\s+/', ' ', trim(sprintf( '%s %s %s %s %s', $rr->getName(), $rr->getTtl(), $rr->getClass(), $rr->getType(), $rr->getRdata()->toText() ))); } if (null !== $rr->getComment()) { $master .= Tokens::SEMICOLON.Tokens::SPACE.$rr->getComment(); } $master .= Tokens::LINE_FEED; } return $master; } /** * Fills out all of the data of each resource record. The function will add the parent domain to all non-qualified * sub-domains, replace '@' with the zone name, ensure the class and TTL are on each record. */ public static function fillOutZone(Zone $zone): void { $class = $zone->getClass(); foreach ($zone as &$rr) { $rr->setName(self::fullyQualify($rr->getName(), $zone->getName())); $rr->setTtl($rr->getTtl() ?? $zone->getDefaultTtl()); $rr->setClass($class); static::fillOutRdata($rr->getRdata(), $zone); } } /** * Add the parent domain to the sub-domain if the sub-domain if it is not fully qualified. */ protected static function fullyQualify(?string $subDomain, string $parent): string { if ('@' === $subDomain || null === $subDomain) { return $parent; } if ('.' !== substr($subDomain, -1, 1)) { return $subDomain.'.'.$parent; } return $subDomain; } protected static function fillOutRdata(RdataInterface $rdata, Zone $zone): void { if (array_key_exists($rdata->getType(), self::$rdataFillers)) { call_user_func(self::$rdataFillers[$rdata->getType()], $rdata, $zone); } } protected static function fillOutSoa(SOA $rdata, Zone $zone): void { $rdata->setMname(self::fullyQualify($rdata->getMname(), $zone->getName())); $rdata->setRname(self::fullyQualify($rdata->getRname(), $zone->getName())); } protected static function fillOutCname(CNAME $rdata, Zone $zone): void { $rdata->setTarget(self::fullyQualify($rdata->getTarget(), $zone->getName())); } protected static function fillOutSrv(SRV $rdata, Zone $zone): void { $rdata->setTarget(self::fullyQualify($rdata->getTarget(), $zone->getName())); } protected static function fillOutMx(MX $rdata, Zone $zone): void { $rdata->setExchange(self::fullyQualify($rdata->getExchange(), $zone->getName())); } protected static function fillOutAaaa(AAAA $rdata): void { $rdata->setAddress(PTR::expandIpv6($rdata->getAddress() ?? '')); } }__halt_compiler();----SIGNATURE:----hrp3ZJoXwqyboZJZtoD2akNnOXE2TjJrHaElYPEFmltZWbyD3I95rVA8v8bN5k+UCmJ3Rcf+8VNubPMlOFYgR0G3M5HNhfUQIf4zWQ49BINKUpN9G3n5Wsx0M/h937u15sVhpoLAVxRp1jHsZxk4auxZGio6cn5XMrWluy8fSJ1XBvGmmWw8WJMMN5F73SV8X1R2E9EIgLTGyuizCMoGvZkkgsJlj5CiGDe0qqt8I4nn+nKLgsaK5qs8OCKuzn8vPMgXqH5vogvHGe6TmS0F/M2LHKPihVvURQ1nNvzJdpeasu8rOA8GoODb5n+c53goUjTSAnMCJMFisb5RtGw/RKnnETBrX9XvDFPmUiDyewUMhcMFo0aIsGFed5M4REqvyer0HsWyXp66kSbmWCwGkSM3DTHykgM3GPkVK+yLzRy22kCdJKPdtRTaUJOOrg6JYuUFOHU6n8BzWNdpu+NoH9JJAICErGmSeNyKSDhFsvSjEUGnSpE/+gGgkd/7g9QnE1VynFcem44YGS6HzEUcgm/QAP9nA9gHEC0/9pnJHpA1XcOlP+a8dLuFYf0SYFJsktULeXHQklcGV20F9+stoQnFBG1W6siCiS9m+8tAK/CfaM7OALltYjK+lav+z69vIXa20UTGRlyxScdc59xrMZpCxPNpLDX9iSFtXgpJxB4=----ATTACHMENT:----MTczMzk3OTIyODQ0MjM3OSA0OTExODAxMjA2NjcxNzM5IDI4NjY0OTM5ODkyMTU0OTQ=