public ClientFullyQualifiedDomainNameOption(ClientFullyQualifiedDomainNameFlags flags, byte rcode1, byte rcode2, string domainName) : base(DhcpOptionCode.ClientFullyQualifiedDomainName) { _flags = flags; _rcode1 = rcode1; _rcode2 = rcode2; _domainName = domainName; }
private ClientFullyQualifiedDomainNameOption GetClientFullyQualifiedDomainNameOption(DhcpMessage request) { ClientFullyQualifiedDomainNameFlags responseFlags = ClientFullyQualifiedDomainNameFlags.None; if (request.ClientFullyQualifiedDomainName.Flags.HasFlag(ClientFullyQualifiedDomainNameFlags.EncodeUsingCanonicalWireFormat)) { responseFlags |= ClientFullyQualifiedDomainNameFlags.EncodeUsingCanonicalWireFormat; } if (request.ClientFullyQualifiedDomainName.Flags.HasFlag(ClientFullyQualifiedDomainNameFlags.NoDnsUpdate)) { responseFlags |= ClientFullyQualifiedDomainNameFlags.ShouldUpdateDns; responseFlags |= ClientFullyQualifiedDomainNameFlags.OverrideByServer; } else if (request.ClientFullyQualifiedDomainName.Flags.HasFlag(ClientFullyQualifiedDomainNameFlags.ShouldUpdateDns)) { responseFlags |= ClientFullyQualifiedDomainNameFlags.ShouldUpdateDns; } else { responseFlags |= ClientFullyQualifiedDomainNameFlags.ShouldUpdateDns; responseFlags |= ClientFullyQualifiedDomainNameFlags.OverrideByServer; } string clientDomainName; if (string.IsNullOrWhiteSpace(request.ClientFullyQualifiedDomainName.DomainName)) { //client domain empty and expects server for a fqdn domain name if (request.HostName == null) { return(null); //server unable to decide a name for client } clientDomainName = request.HostName.HostName + "." + _domainName; } else if (request.ClientFullyQualifiedDomainName.DomainName.Contains(".")) { //client domain is fqdn if (request.ClientFullyQualifiedDomainName.DomainName.EndsWith("." + _domainName, StringComparison.OrdinalIgnoreCase)) { clientDomainName = request.ClientFullyQualifiedDomainName.DomainName; } else { string[] parts = request.ClientFullyQualifiedDomainName.DomainName.Split('.'); clientDomainName = parts[0] + "." + _domainName; } } else { //client domain is just hostname clientDomainName = request.ClientFullyQualifiedDomainName.DomainName + "." + _domainName; } return(new ClientFullyQualifiedDomainNameOption(responseFlags, 255, 255, clientDomainName)); }
protected override void ParseOptionValue(Stream s) { if (s.Length < 3) { throw new InvalidDataException(); } int flags = s.ReadByte(); if (flags < 0) { throw new EndOfStreamException(); } _flags = (ClientFullyQualifiedDomainNameFlags)flags; int rcode; rcode = s.ReadByte(); if (rcode < 0) { throw new EndOfStreamException(); } _rcode1 = (byte)rcode; rcode = s.ReadByte(); if (rcode < 0) { throw new EndOfStreamException(); } _rcode2 = (byte)rcode; if (_flags.HasFlag(ClientFullyQualifiedDomainNameFlags.EncodeUsingCanonicalWireFormat)) { _domainName = DnsDatagram.DeserializeDomainName(s); } else { _domainName = Encoding.ASCII.GetString(s.ReadBytes((int)s.Length - 3)); } }