private AnalysisResult GetAnalysisInternal(string hostname, int?maxAge, AnalyzeOptions options, out Host hostResult) { Dictionary <string, string> parms = new Dictionary <string, string>(); parms["host"] = hostname; if (options.HasFlag(AnalyzeOptions.Publish)) { parms["publish"] = "on"; } if (options.HasFlag(AnalyzeOptions.StartNew)) { parms["startNew"] = "on"; } else if (options.HasFlag(AnalyzeOptions.FromCache)) { parms["fromCache"] = "on"; } if (options.HasFlag(AnalyzeOptions.ReturnAll)) { parms["all"] = "on"; } else if (options.HasFlag(AnalyzeOptions.ReturnAllIfDone)) { parms["all"] = "done"; } if (options.HasFlag(AnalyzeOptions.IgnoreMismatch)) { parms["ignoreMismatch"] = "on"; } if (maxAge.HasValue) { parms["maxAge"] = maxAge.ToString(); } HttpResponseMessage resp; try { resp = _restClient.GetAsync(BuildUrl("analyze", parms)).Result; } catch (AggregateException ex) { throw ex.InnerException; } ReadXHeaders(resp); hostResult = null; if (resp.StatusCode == HttpStatusCode.BadRequest || resp.StatusCode == HttpStatusCode.InternalServerError) { // 400 - invocation error (e.g., invalid parameters) // 500 - internal error return(AnalysisResult.Error); } if (resp.StatusCode == (HttpStatusCode)429) { // 429 - client request rate too high return(AnalysisResult.RateLimit); } if (resp.StatusCode == HttpStatusCode.ServiceUnavailable) { // 503 - the service is not available (e.g., down for maintenance) return(AnalysisResult.Maintenance); } if (resp.StatusCode == (HttpStatusCode)529) { // 529 - the service is overloaded return(AnalysisResult.Overloaded); } if (resp.StatusCode != HttpStatusCode.OK) { return(AnalysisResult.UnknownError); } string json = resp.Content.ReadAsStringAsync().Result; hostResult = JsonConvert.DeserializeObject <Host>(json); return(AnalysisResult.Success); }