Esempio n. 1
0
        public static HttpWebResponse Execute(Uri uri, Stream requestData, IMutableProgressTracker progress, CancellationToken cancelToken)
        {
            // QUICK HACK

            var requestProgress = new MutableProgressTracker();
            var responseProgress = new MutableProgressTracker();

            var aggregateProgress = new AggregateProgressTracker(new ProgressTrackerCollection {
                { requestProgress,  TimeEstimates.LongOperation.ProgressWeight },
                { responseProgress, TimeEstimates.ShortOperation.ProgressWeight },
            });

            aggregateProgress.BindTo(progress);

            try {
                var request = CreateRequest(uri, @"POST");
                request.ContentLength = requestData.Length;

                using (var requestStream = request.GetRequestStream())
                using (var progressStream = new ProgressTrackingStreamWrapper(requestStream, request.ContentLength)) {
                    progressStream.BindTo(requestProgress);

                    requestData.CopyTo(progressStream, cancelToken);
                }

                bool canCancel = true;

                cancelToken.Register(() => {
                    if (canCancel) {
                        request.Abort();
                    }
                });

                var response = (HttpWebResponse) request.GetResponse();

                responseProgress.Progress = 1; // TODO HTTP download Progress

                canCancel = false;

                return response;
            } catch (WebException e) {
                if (e.Status == WebExceptionStatus.RequestCanceled) {
                    throw new OperationCanceledException(e.Message, e, cancelToken);
                }

                throw new OperationCanceledException(e.Message, e, cancelToken);
            }
        }
Esempio n. 2
0
        private void UploadData(Stream stream, string fileName, IMutableProgressTracker progress, CancellationToken cancelToken)
        {
            using (var client = new FTPSClient()) {
                try {
                    progress.Status = "Connecting to FTP";

                    client.Connect(Host, Port, new NetworkCredential(UserName, Password), 0, null, null, 0, 0, 0, Timeout);
                } catch (TimeoutException e) {
                    throw new CommandCanceledException(this, "Connection to FTP server timed out", e);
                } catch (IOException e) {
                    throw new CommandCanceledException(this, "Connection to FTP server failed", e);
                }

                using (var outStream = client.PutFile(GetRemotePathName(fileName)))
                using (var outStreamWrapper = new ProgressTrackingStreamWrapper(outStream, stream.Length)) {
                    outStreamWrapper.BindTo(progress);

                    progress.Status = "Uploading file to FTP";

                    stream.CopyTo(outStreamWrapper, cancelToken);
                }
            }
        }
Esempio n. 3
0
        private static void WritePostData(HttpWebRequest request, MultipartData data, IMutableProgressTracker progress, CancellationToken cancelToken)
        {
            var boundary = data.Boundary;

            request.ContentType = string.Format(@"multipart/form-data; {0}", MultipartHeader.KeyValuePair("boundary", boundary));
            request.ContentLength = Utility.GetBoundaryByteCount(boundary) + data.GetByteCount();

            using (var requestStream = request.GetRequestStream())
            using (var progressStream = new ProgressTrackingStreamWrapper(requestStream, request.ContentLength)) {
                progressStream.BindTo(progress);

                Utility.WriteBoundary(progressStream, boundary);
                data.Write(progressStream, cancelToken);
            }

            System.Diagnostics.Debug.Assert(progress.Progress == 1);
        }