Example #1
0
 public async Task <IPAddress> Get(PublicIPAddressProviderConfig config, CancellationToken cancellationToken)
 {
     using (var response = await client.GetAsync(new Uri(config.Url), HttpCompletionOption.ResponseHeadersRead, cancellationToken))
     {
         response.EnsureSuccessStatusCode();
         return(await ExtractAddress(config, response.Content));
     }
 }
Example #2
0
        protected override async Task <IPAddress> ExtractAddress(PublicIPAddressProviderConfig config, HttpContent responseBody)
        {
            var match = Regex.Match(await responseBody.ReadAsStringAsync(), config.Pattern);

            if (!match.Success)
            {
                throw new PublicIPAddressProviderException("Failed to match the regex pattern.");
            }
            return(IPAddress.Parse(match.Value));
        }
Example #3
0
        private static PublicIPAddressProviderConfig[] GetSortedProviders(IEnumerable <PublicIPAddressProviderConfig> providers, bool shuffle)
        {
            var encryptedProviders   = new List <PublicIPAddressProviderConfig>();
            var unencryptedProviders = new List <PublicIPAddressProviderConfig>();

            foreach (var provider in providers)
            {
                (new Uri(provider.Url).Scheme == "https" ? encryptedProviders : unencryptedProviders).Add(provider);
            }

            if (shuffle)
            {
                encryptedProviders.Shuffle();
                unencryptedProviders.Shuffle();
            }

            var r = new PublicIPAddressProviderConfig[encryptedProviders.Count + unencryptedProviders.Count];

            encryptedProviders.CopyTo(r, 0);
            unencryptedProviders.CopyTo(r, encryptedProviders.Count);
            return(r);
        }
Example #4
0
 protected virtual async Task <IPAddress> ExtractAddress(PublicIPAddressProviderConfig config, HttpContent responseBody)
 {
     return(IPAddress.Parse((await responseBody.ReadAsStringAsync()).Trim()));
 }
Example #5
0
 public bool IsEncrypted(PublicIPAddressProviderConfig config)
 {
     return("https".Equals(new Uri(config.Url).Scheme, StringComparison.OrdinalIgnoreCase));
 }