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)); } }
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)); }
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); }
protected virtual async Task <IPAddress> ExtractAddress(PublicIPAddressProviderConfig config, HttpContent responseBody) { return(IPAddress.Parse((await responseBody.ReadAsStringAsync()).Trim())); }
public bool IsEncrypted(PublicIPAddressProviderConfig config) { return("https".Equals(new Uri(config.Url).Scheme, StringComparison.OrdinalIgnoreCase)); }