private async Task <List <IpAddressRange> > GetDotaIpRanges() { List <IpAddressRange> result; if (!_cache.TryGetValue("dota_ip_ranges", out result)) { result = new List <IpAddressRange>(); WebRequest request = WebRequest.CreateHttp("http://media.steampowered.com/apps/sdr/network_config.json"); request.Method = "GET"; var response = await request.GetResponseAsync(); var responseStream = response.GetResponseStream(); StreamReader reader = new StreamReader(responseStream, Encoding.UTF8); string content = reader.ReadToEnd(); reader.Close(); var json = JsonDocument.Parse(content).RootElement; if (json.TryGetProperty("data_centers", out var datacenters)) { foreach (var datacenter in datacenters.EnumerateArray()) { if (datacenter.TryGetProperty("address_ranges", out var addressRanges)) { foreach (var addressRange in addressRanges.EnumerateArray()) { result.Add(IpAddressRange.Parse(addressRange.ToString())); } } } } result.Add(new IpAddressRange("127.0.0.1", "127.0.0.1")); result.Add(new IpAddressRange("::1", "::1")); _cache.Set("dota_ip_ranges", result, TimeSpan.FromDays(1)); } return(result); }
private async Task <List <IpAddressRange> > GetDotaIpRanges() { List <IpAddressRange> result = null; if (!_cache.TryGetValue("dota_ip_ranges", out result)) { result = new List <IpAddressRange>(); WebRequest request = WebRequest.CreateHttp("http://media.steampowered.com/apps/sdr/network_config.json"); request.Method = "GET"; var response = await request.GetResponseAsync(); var responseStream = response.GetResponseStream(); StreamReader reader = new StreamReader(responseStream, Encoding.UTF8); string content = reader.ReadToEnd(); var json = JObject.Parse(content); var datacenters = json["data_centers"] as JObject; if (datacenters != null) { foreach (var datacenter in datacenters) { var addressRanges = datacenter.Value["address_ranges"] as JArray; if (addressRanges != null) { foreach (var addressRange in addressRanges) { result.Add(IpAddressRange.Parse((string)addressRange)); } } } } result.Add(new IpAddressRange("127.0.0.1", "127.0.0.1")); result.Add(new IpAddressRange("::1", "::1")); _cache.Set("dota_ip_ranges", result, TimeSpan.FromDays(1)); } return(result); }