Opc.Ua.ServerBase.FilterByEndpointUrl C# (CSharp) Method

FilterByEndpointUrl() protected method

Filters the list of addresses by the URL that the client provided.
protected FilterByEndpointUrl ( Uri endpointUrl, IList baseAddresses ) : IList
endpointUrl System.Uri
baseAddresses IList
return IList
        protected IList<BaseAddress> FilterByEndpointUrl(Uri endpointUrl, IList<BaseAddress> baseAddresses)
        {
            // client gets all of the endpoints if it using a known variant of the hostname.
            if (NormalizeHostname(endpointUrl.DnsSafeHost) == NormalizeHostname("localhost"))
            {
                return baseAddresses;
            }

            // client only gets alternate addresses that match the DNS name that it used.
            List<BaseAddress> accessibleAddresses = new List<BaseAddress>();

            foreach (BaseAddress baseAddress in baseAddresses)
            {
                if (baseAddress.Url.DnsSafeHost == endpointUrl.DnsSafeHost)
                {
                    accessibleAddresses.Add(baseAddress);
                    continue;
                }

                if (baseAddress.AlternateUrls != null)
                {
                    foreach (Uri alternateUrl in baseAddress.AlternateUrls)
                    {
                        if (alternateUrl.DnsSafeHost == endpointUrl.DnsSafeHost)
                        {
                            accessibleAddresses.Add(baseAddress);
                            break;
                        }
                    }
                }
            }

            // no match on client DNS name. client gets only addresses that match the scheme.
            if (accessibleAddresses.Count == 0)
            {
                foreach (BaseAddress baseAddress in baseAddresses)
                {
                    if (baseAddress.Url.Scheme == endpointUrl.Scheme)
                    {
                        accessibleAddresses.Add(baseAddress);
                        continue;
                    }
                }
            }

            return accessibleAddresses;
        }