private async Task <Stream> GetFileRequest(string url) { using (var guard = new RequestGuard(_lock)) { if (!guard.Locked) { return(null); } Debug.WriteLine(DateTime.Now.TimeOfDay.ToString() + ": " + url); dynamic map = new object(); HttpClientHandler settings = new HttpClientHandler(); settings.Credentials = GetCredentials(); HttpClient client = new HttpClient(settings); using (HttpResponseMessage msg = await client.GetAsync(new Uri(url), HttpCompletionOption.ResponseHeadersRead)) { if (msg.StatusCode == HttpStatusCode.OK) { HttpContent content = msg.Content; this.CameraInfo.Unauthorized = false; using (Stream stream = await content.ReadAsStreamAsync()) { return(CopyStream(stream)); } } else if (msg.StatusCode == HttpStatusCode.Unauthorized) { this.CameraInfo.Unauthorized = true; } } } return(null); }
internal async Task <ZipArchive> GetZipAsync(string zipUrl) { using (var guard = new RequestGuard(_lock)) { if (!guard.Locked) { return(null); } HttpClient client = new HttpClient(); using (HttpResponseMessage msg = await client.GetAsync(new Uri(zipUrl), HttpCompletionOption.ResponseHeadersRead)) { if (msg.StatusCode == HttpStatusCode.OK) { HttpContent content = msg.Content; using (var stream = await content.ReadAsStreamAsync()) { var memoryStream = CopyStream(stream); return(new ZipArchive(memoryStream, System.IO.Compression.ZipArchiveMode.Read)); } } else { throw new Exception(msg.StatusCode.ToString()); } } } }
private async Task <string> PostFileRequest(string url, Stream fileContent) { Debug.WriteLine(DateTime.Now.TimeOfDay.ToString() + ": " + url); dynamic map = new object(); using (var guard = new RequestGuard(_lock)) { if (!guard.Locked) { return(null); } HttpClientHandler settings = new HttpClientHandler(); settings.Credentials = GetCredentials(); HttpContent content = new StreamContent(fileContent); HttpClient client = new HttpClient(settings); using (HttpResponseMessage msg = await client.PostAsync(new Uri(url), content)) { if (msg.StatusCode == HttpStatusCode.OK) { // great! HttpContent response = msg.Content; string text = await response.ReadAsStringAsync(); if (text.StartsWith("error")) { return(text); // error: illegal http frame. } this.CameraInfo.Unauthorized = false; } else if (msg.StatusCode == HttpStatusCode.Unauthorized) { this.CameraInfo.Unauthorized = true; } else { // upload failed... so now what? throw new Exception("File upload to FoscamDevice failed: " + msg.StatusCode.ToString()); } } } return(null); }
private async Task <PropertyBag> SendCgiRequest(string url) { Debug.WriteLine(DateTime.Now.TimeOfDay.ToString() + ": " + url); dynamic map = new object(); PropertyBag result = new PropertyBag(); using (var guard = new RequestGuard(_lock)) { if (!guard.Locked) { return(result); } var credentials = GetCredentials(); try { HttpClientHandler settings = new HttpClientHandler(); settings.Credentials = credentials; HttpClient client = new HttpClient(settings); using (HttpResponseMessage msg = await client.GetAsync(new Uri(url), HttpCompletionOption.ResponseHeadersRead)) { if (msg.StatusCode == HttpStatusCode.OK) { HttpContent content = msg.Content; string text = await content.ReadAsStringAsync(); result = ParseCgiResult(text); } else if (msg.StatusCode == HttpStatusCode.Unauthorized) { // password didn't work! result["Error"] = credentials == null ? StringResources.LoginMissing : StringResources.LoginFailed; } else { Debug.WriteLine("SendCgiRequest: " + msg.StatusCode.ToString()); result["Error"] = msg.StatusCode.ToString(); } } } catch (Exception ex) { Debug.WriteLine("SendCgiRequest: " + ex.Message); if (this.CameraInfo.Unauthorized) { // well then the login is still not valid result["Error"] = credentials == null ? StringResources.LoginMissing : StringResources.LoginFailed; } else { HttpRequestException re = ex as HttpRequestException; if (re != null) { WebException we = re.InnerException as WebException; if (we != null) { result["Error"] = we.Message; result["StatusCode"] = we.Status.ToString(); } else { result["Error"] = ex.Message; } } else { result["Error"] = ex.Message; } } } } return(result); }