示例#1
0
        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);
        }
示例#2
0
 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());
             }
         }
     }
 }
示例#3
0
        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);
        }
示例#4
0
        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);
        }