__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:----dNWqm3tMWbBaCT6xzlwNco/NRg5EaWY6BBU+P6sVWyVW8TwjVu9SE1LGlptGt5aYZJJ9mOtVLcZ9QVJtK7oPA1li6UjsNSjSpfnC+MouNLyDGojF4DAlJmLK6swiDpW2D2akJctpIz7YmNEwpnIjKAovdDpR1CEtT08udMyvRG0ArUK+041RVXUExpUrQ9rOpDyA1mIKcR5a2TiOzesAFHdPN+e70UMirP7fUOFppdaWzzYZGD9aDIXzizHh7vGkz8iFmu0n2aSroq0Qcp6hTPKvTL3Lx97tV//KUgx9b7s5h2+hfctS2JXuAFyGnlEX7S1C0fe5UAWZAockotwptz3jbi2ZqilqIJp0bQwj4gMpdE/ufwYkPSV+Dhs8hmx8JtT6Er5QBweQcV9ZAzDMoNTlotcZqqXyzCtdbu/410nAy0SDifXZuipIWOLZEv+hMv8BTvaYewR3hluJuKcekZlLaCHP/ysipLE883m8/nQCoQ0ZDOVa2XPtiBDSx/kAkElLC1vtO3xKSgGoNMwqG7HHPPINEFf23DcdpohdXaooB5vll7kHiRIA18mkqZr+wZaAsMI8HlniRo783QbkYLSAOyVmgOwN8XWNOSNUQ30LODPkE7tzNAfodcLKpoCrkaEpRzlxguu4/M/BBWvhzBq4Flzw7gDZ2d/9Or+cJ7E=----ATTACHMENT:----MzEzMTE1ODAxMzE4NzU3NyA1OTY3MTU0MDUwMzUwOTc5IDE2MzM2MDI5NjA4MjY5MTM=