public ReadBufferState(byte[] buffer, int offset, int count, HttpStreamAsyncResult ares)
 {
     Buffer       = buffer;
     Offset       = offset;
     Count        = count;
     InitialCount = count;
     Ares         = ares;
 }
Пример #2
0
 public ReadBufferState(byte[] buffer, int offset, int count, HttpStreamAsyncResult asyncResult)
 {
     _buffer       = buffer;
     _offset       = offset;
     _count        = count;
     _initialCount = count;
     _asyncResult  = asyncResult;
 }
Пример #3
0
			public ReadBufferState (
				byte [] buffer, int offset, int count, HttpStreamAsyncResult ares)
			{
				Buffer = buffer;
				Offset = offset;
				Count = count;
				InitialCount = count;
				Ares = ares;
			}
		public override IAsyncResult BeginRead (byte [] buffer, int offset, int count,
							AsyncCallback cback, object state)
		{
			if (disposed)
				throw new ObjectDisposedException (typeof (RequestStream).ToString ());

			int nread = FillFromBuffer (buffer, offset, count);
			if (nread > 0 || nread == -1) {
				HttpStreamAsyncResult ares = new HttpStreamAsyncResult ();
				ares.Buffer = buffer;
				ares.Offset = offset;
				ares.Count = count;
				ares.Callback = cback;
				ares.State = state;
				ares.SynchRead = System.Math.Max (0, nread);
				ares.Complete ();
				return ares;
			}

			// Avoid reading past the end of the request to allow
			// for HTTP pipelining
			if (remaining_body >= 0 && count > remaining_body)
				count = (int) System.Math.Min (Int32.MaxValue, remaining_body);
			return stream.BeginRead (buffer, offset, count, cback, state);
		}
Пример #5
0
		public override IAsyncResult BeginRead (
			byte [] buffer, int offset, int count, AsyncCallback cback, object state)
		{
			if (disposed)
				throw new ObjectDisposedException (GetType ().ToString ());

			if (buffer == null)
				throw new ArgumentNullException ("buffer");

			int len = buffer.Length;
			if (offset < 0 || offset > len)
				throw new ArgumentOutOfRangeException ("offset exceeds the size of buffer");

			if (count < 0 || offset > len - count)
				throw new ArgumentOutOfRangeException ("offset+size exceeds the size of buffer");

			HttpStreamAsyncResult ares = new HttpStreamAsyncResult ();
			ares.Callback = cback;
			ares.State = state;
			if (no_more_data) {
				ares.Complete ();
				return ares;
			}
			int nread = decoder.Read (buffer, offset, count);
			offset += nread;
			count -= nread;
			if (count == 0) {
				// got all we wanted, no need to bother the decoder yet
				ares.Count = nread;
				ares.Complete ();
				return ares;
			}
			if (!decoder.WantMore) {
				no_more_data = nread == 0;
				ares.Count = nread;
				ares.Complete ();
				return ares;
			}
			ares.Buffer = new byte [8192];
			ares.Offset = 0;
			ares.Count = 8192;
			ReadBufferState rb = new ReadBufferState (buffer, offset, count, ares);
			rb.InitialCount += nread;
			base.BeginRead (ares.Buffer, ares.Offset, ares.Count, OnRead, rb);
			return ares;
		}
Пример #6
0
        public new IAsyncResult BeginRead(byte[] buffer, int offset, int count,
                            AsyncCallback cback, object state)
        {
            if (_disposed)
                throw new ObjectDisposedException(typeof(RequestStream).ToString());

            var nread = FillFromBuffer(buffer, offset, count);
            if (nread > 0 || nread == -1)
            {
                var ares = new HttpStreamAsyncResult
                {
                    Buffer = buffer,
                    Offset = offset,
                    Count = count,
                    Callback = cback,
                    State = state,
                    SynchRead = Math.Max(0, nread)
                };

                ares.Complete();
                return ares;
            }

            // Avoid reading past the end of the request to allow
            // for HTTP pipelining
            if (_remainingBody >= 0 && count > _remainingBody)
                count = (int)Math.Min(int.MaxValue, _remainingBody);
            return _stream.BeginRead(buffer, offset, count, cback, state);
        }