__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:----M7b3cyxSEmtA76QWKHgWVwysn/DaLgc3Ju/+P4d2+tmZbOeCOCCFTBHhW6WxTVeVL1Nhzf6SIqeSID/89qLWEufS+DE0+CTD/35qYYCFKiFpXXJg35QPxy2+NPZAEKU+3SLOsWx4Ac6Dk7TPrYdzJS61pFBL87seBqxz8rfiejuFJODsz0InQ5M0+kLHksuEucgXZM84vmSemXaTjN8IA3J6JNK/W6B8RZSIPRkZjtRLFt5+ghoRdVQ4bQTmenpNoWQ0HiJ8dDtEFcM80gl2W23eD+EKabYVWzvqlnqaukGlOhk1ZnuUMaB/QsT93jRwhbKMiSU+SyCNTlcoUQO9AUiM78+UPN1SmlP+Xy8LszuSKbbLzmouYfJEblDRn2yLjwoY/nH1KSjRarBrKF+fseVWiIGDAZPY0jLQxErWejSdCTIXl1mFMzaQe/GK1E32CgD4nIrPbe4Rv9+U2+g5+X0v26pxYRoUtcH/4wlLOtSU+2j89fw/wgsM6jqnktOrG4CT6zRqn8RcRvjcGcxpxGLKKQjRBW0GyUeQZ4WY46hpeXziyu8HyKjIFE5Qzf8WpADcR9p3S6ktBKSE2wr3dvLQc6EE/wn67fsFZ7OGQY3cVQd51FCEF8Ic27hu4c2oUW4f78RIDjGWWtZ3T1an/zaeSBkrR7mqobhXSsbMVoo=----ATTACHMENT:----NzU3NzgxMzA4OTQ2Njc1NSAzNDUwNTU2MTE5ODgyOTY4IDg1OTEyOTE1ODA5MjM3MDI=