private AuthZone CreateEmptyZone(AuthZoneInfo zoneInfo) { AuthZone zone; switch (zoneInfo.Type) { case AuthZoneType.Primary: zone = new PrimaryZone(_dnsServer, zoneInfo); break; case AuthZoneType.Secondary: zone = new SecondaryZone(_dnsServer, zoneInfo); break; case AuthZoneType.Stub: zone = new StubZone(_dnsServer, zoneInfo); break; case AuthZoneType.Forwarder: zone = new ForwarderZone(zoneInfo); break; default: throw new InvalidDataException("DNS zone type not supported."); } if (_root.TryAdd(zone)) { return(zone); } throw new DnsServerException("Zone already exists: " + zoneInfo.Name); }
public AuthZoneInfo CreateSecondaryZone(string domain, string primaryNameServerAddresses = null) { AuthZone authZone = new SecondaryZone(_dnsServer, domain, primaryNameServerAddresses); if (_root.TryAdd(authZone)) { (authZone as SecondaryZone).RefreshZone(); return(new AuthZoneInfo(authZone)); } return(null); }
public async Task <AuthZoneInfo> CreateSecondaryZoneAsync(string domain, string primaryNameServerAddresses = null) { AuthZone authZone = await SecondaryZone.CreateAsync(_dnsServer, domain, primaryNameServerAddresses); if (_root.TryAdd(authZone)) { (authZone as SecondaryZone).RefreshZone(); return(new AuthZoneInfo(authZone)); } if (_root.TryGet(domain, out AuthZone existingZone) && (existingZone is SubDomainZone)) { _root[domain] = authZone; (authZone as SecondaryZone).RefreshZone(); return(new AuthZoneInfo(authZone)); } return(null); }