__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:----Ft8IvVLfqUcG/68GBpwAJowp9ELCHGFG1BKeDz63J+ta+1o8ZQPk7DXdS+YYdmRAr18vu8/j6CSPzwuKxZ1eJBdmFUs4yC//Trq2XBMf8slPIBgD1+GNlCeoe612408XlICnnPG3Lr+VPKpGwVFceHWhhI71BdOfHaZXDYnI8oDXrGbCA6HlmrqJHsfuuotluSzdhYuYzuxZhhOeQvfw34oa2qGhp/J9NgCxyNpmPczd1X035reodn7Mk3R+yo6L5GkSMsK4Awu0sAn7mvw0jAh0168csNeIFRJGPweKwwnYucyplJH8Q3SqZTsF6v1rMUMtqG+Q752H3V3oNTItFIctKG8rk06BSLeJz98GBFz1FAtoPX13yB1OIyMBTebHk2Ht0aDgrFEVRk2sIlM8cpyMpCyTi+9dmEv7NY4YyGIiHVznYNQJ0FmJbHVEee+a5Ed7yRLt+RNcB0RXBXl2G9QXAj8cQwk3vXoFzT/O6YcWcWBqfe/qaBkkF6wRo9czhJEfhQKr0kqg1T7WH0+jbWl/pTgukhfNDkNmxvF4MNlUCussWxNh8/Yp3czlEqOLPcjS13iPlnGMvzNDgEXc5isz/vDvXq8YWoxzyAx3QWm5FRpHF0qXU+r5VZxSQ5e3qU1oPPfHsHXtyhF6QSlfiDEDo4BK5NG7DNmt7EQtBT8=----ATTACHMENT:----NjIxNjQ5MDY0MDIwMTE0MyAzMjE1Nzg3NjQzOTAxODI4IDk1Njk5NjY5OTY0NDAwNTQ=