Пример #1
0
        public override IAsyncResult BeginGetRequestStream(AsyncCallback callback, object state)
        {
            if (method != WebRequestMethods.Ftp.UploadFile && method != WebRequestMethods.Ftp.UploadFileWithUniqueName &&
                method != WebRequestMethods.Ftp.AppendFile)
            {
                throw new ProtocolViolationException();
            }

            lock (locker) {
                CheckIfAborted();

                if (State != RequestState.Before)
                {
                    throw new InvalidOperationException("Cannot re-call BeginGetRequestStream/BeginGetResponse while a previous call is still in progress");
                }

                State = RequestState.Scheduled;
            }

            asyncResult = new FtpAsyncResult(callback, state);
            Thread thread = new Thread(ProcessRequest);

            thread.Start();

            return(asyncResult);
        }
Пример #2
0
        public override WebResponse EndGetResponse(IAsyncResult asyncResult)
        {
            if (asyncResult == null)
            {
                throw new ArgumentNullException("AsyncResult cannot be null!");
            }

            if (!(asyncResult is FtpAsyncResult) || asyncResult != this.asyncResult)
            {
                throw new ArgumentException("AsyncResult is from another request!");
            }

            FtpAsyncResult asyncFtpResult = (FtpAsyncResult)asyncResult;

            if (!asyncFtpResult.WaitUntilComplete(timeout, false))
            {
                Abort();
                throw new WebException("Transfer timed out.", WebExceptionStatus.Timeout);
            }

            CheckIfAborted();

            asyncResult = null;

            if (asyncFtpResult.GotException)
            {
                throw asyncFtpResult.Exception;
            }

            return(asyncFtpResult.Response);
        }
Пример #3
0
        public override IAsyncResult BeginGetResponse(AsyncCallback callback, object state)
        {
            if (asyncResult != null && !asyncResult.IsCompleted)
            {
                throw new InvalidOperationException("Cannot re-call BeginGetRequestStream/BeginGetResponse while a previous call is still in progress");
            }

            CheckIfAborted();

            asyncResult = new FtpAsyncResult(callback, state);

            lock (locker) {
                if (InFinalState())
                {
                    asyncResult.SetCompleted(true, ftpResponse);
                }
                else
                {
                    if (State == RequestState.Before)
                    {
                        State = RequestState.Scheduled;
                    }

                    Thread thread = new Thread(ProcessRequest);
                    thread.Start();
                }
            }

            return(asyncResult);
        }
Пример #4
0
        public override Stream EndGetRequestStream(IAsyncResult asyncResult)
        {
            if (asyncResult == null)
            {
                throw new ArgumentNullException("asyncResult");
            }

            if (!(asyncResult is FtpAsyncResult))
            {
                throw new ArgumentException("asyncResult");
            }

            if (State == RequestState.Aborted)
            {
                throw new WebException("Request aborted", WebExceptionStatus.RequestCanceled);
            }

            if (asyncResult != this.asyncResult)
            {
                throw new ArgumentException("AsyncResult is from another request!");
            }

            FtpAsyncResult res = (FtpAsyncResult)asyncResult;

            if (!res.WaitUntilComplete(timeout, false))
            {
                Abort();
                throw new WebException("Request timed out");
            }

            if (res.GotException)
            {
                throw res.Exception;
            }

            return(res.Stream);
        }
Пример #5
0
		public override IAsyncResult BeginGetRequestStream (AsyncCallback callback, object state) {
			if (method != WebRequestMethods.Ftp.UploadFile && method != WebRequestMethods.Ftp.UploadFileWithUniqueName &&
					method != WebRequestMethods.Ftp.AppendFile)
				throw new ProtocolViolationException ();

			lock (locker) {
				CheckIfAborted ();

				if (State != RequestState.Before)
					throw new InvalidOperationException ("Cannot re-call BeginGetRequestStream/BeginGetResponse while a previous call is still in progress");

				State = RequestState.Scheduled;
			}

			asyncResult = new FtpAsyncResult (callback, state);
			Thread thread = new Thread (ProcessRequest);
			thread.Start ();

			return asyncResult;
		}
Пример #6
0
		public override WebResponse EndGetResponse (IAsyncResult asyncResult) {
			if (asyncResult == null)
				throw new ArgumentNullException ("AsyncResult cannot be null!");

			if (!(asyncResult is FtpAsyncResult) || asyncResult != this.asyncResult)
				throw new ArgumentException ("AsyncResult is from another request!");

			FtpAsyncResult asyncFtpResult = (FtpAsyncResult) asyncResult;
			if (!asyncFtpResult.WaitUntilComplete (timeout, false)) {
				Abort ();
				throw new WebException ("Transfer timed out.", WebExceptionStatus.Timeout);
			}

			CheckIfAborted ();

			asyncResult = null;

			if (asyncFtpResult.GotException)
				throw asyncFtpResult.Exception;

			return asyncFtpResult.Response;
		}
Пример #7
0
		public override IAsyncResult BeginGetResponse (AsyncCallback callback, object state) {
			if (asyncResult != null && !asyncResult.IsCompleted) {
				throw new InvalidOperationException ("Cannot re-call BeginGetRequestStream/BeginGetResponse while a previous call is still in progress");
			}

			CheckIfAborted ();
			
			asyncResult = new FtpAsyncResult (callback, state);

			lock (locker) {
				if (InFinalState ())
					asyncResult.SetCompleted (true, ftpResponse);
				else {
					if (State == RequestState.Before)
						State = RequestState.Scheduled;

					Thread thread = new Thread (ProcessRequest);
					thread.Start ();
				}
			}

			return asyncResult;
		}