Ejemplo n.º 1
0
 public ClientFullyQualifiedDomainNameOption(ClientFullyQualifiedDomainNameFlags flags, byte rcode1, byte rcode2, string domainName)
     : base(DhcpOptionCode.ClientFullyQualifiedDomainName)
 {
     _flags      = flags;
     _rcode1     = rcode1;
     _rcode2     = rcode2;
     _domainName = domainName;
 }
Ejemplo n.º 2
0
        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));
        }
Ejemplo n.º 3
0
        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));
            }
        }