private static bool Fill(HttpWebResponse response, HttpClientResponse value) { if (response == null || value == null) { return(false); } value.ContentLength = response.ContentLength; value.LastModified = response.LastModified; value.Headers = response.Headers; value.Cookies = response.Cookies; value.ResponseUri = response.ResponseUri; value.CharacterSet = response.CharacterSet; value.Server = response.Server; value.StatusCode = response.StatusCode; value.ContentEncoding = response.ContentEncoding; value.ContentType = response.ContentType; value.StatusDescription = response.StatusDescription; return(true); }
public static bool TryUploadAsync(string url, IEnumerable <HttpPostValue> blobs, HttpClientOptions options, HttpClientResponse response, HttpClientAsyncCallback callback) { if (options == null || response == null) { return(false); } response.AsynchronousMode = true; return(HttpClient.InternalTryUpload(url, blobs, options, response, callback)); }
private static bool InternalTryUpload(string url, IEnumerable <HttpPostValue> blobs, HttpClientOptions options, HttpClientResponse response, HttpClientAsyncCallback callback) { if (options == null || response == null) { return(false); } HttpWebRequest request = null; bool success = false; try { request = HttpClient.Create(url, options); ParameterizedThreadStart copyto = delegate(object state) { HttpWebResponse wr = null; Stream rs = null; try { if (!HttpClient.PreparationUpload(request, blobs)) { callback?.Invoke(HttpClientError.UnableToUploadBLOB, null, -1); } else { using (wr = (HttpWebResponse)request.GetResponse()) { HttpClient.Fill(wr, response); using (rs = wr.GetResponseStream()) { Func <byte[], int, bool> callbackt = null; if (callback != null) { callbackt = (buffer, len) => { HttpClientError error = HttpClientError.Success; if (len < 0) { error = HttpClientError.ReadStreamInterruption; } return(callback(error, buffer, len)); }; } success = HttpClient.CopyTo(rs, response, callbackt); } } } request.Abort(); } catch (Exception) { if (wr != null && rs == null) { callback?.Invoke(HttpClientError.UnableToSendRequest, null, -1); } else if (rs != null) { callback?.Invoke(HttpClientError.UnableToGetResponseStream, null, -1); } else if (wr == null) { callback?.Invoke(HttpClientError.UnableOpenURL, null, -1); } if (rs != null) { rs.Close(); } if (wr != null) { wr.Close(); } if (request != null) { request.Abort(); } } }; if (!response.AsynchronousMode) { copyto(response); } else { (new Thread(copyto) { IsBackground = true, Priority = ThreadPriority.Lowest }).Start(response); } return(success); } catch (Exception) { if (request != null) { request.Abort(); } return(false); } }