RemObjects.InternetPack.Http.AsyncHttpWorker.ResponseBodyCallback C# (CSharp) Method

ResponseBodyCallback() private method

private ResponseBodyCallback ( IAsyncResult ar ) : void
ar IAsyncResult
return void
		private void ResponseBodyCallback(IAsyncResult ar)
		{
			try
			{
				DataConnection.EndWrite(ar);

				if (ar.AsyncState is Stream)
				{
					Stream lData = (Stream)ar.AsyncState;
					Int32 lLen = lData.Read(fBodyBuffer, 0, fBodyBuffer.Length);
					if (lLen != 0)
					{
						DataConnection.BeginWrite(fBodyBuffer, 0, lLen, ResponseBodyCallback, lData);
						return;
					}
				}
				else if (ar.AsyncState is Byte[])
				{
					Byte[] lData = (Byte[])ar.AsyncState;
					Int32 lLen = fBodyBuffer.Length;
					if (fBodyOffset + lLen > lData.Length)
						lLen = lData.Length - fBodyOffset;
					if (lLen != 0)
					{
						Array.Copy(lData, fBodyOffset, fBodyBuffer, 0, lLen);
						fBodyOffset += lLen;
						DataConnection.BeginWrite(fBodyBuffer, 0, lLen, ResponseBodyCallback, lData);
						return;
					}
				}
			}
			catch (ConnectionClosedException)
			{
				this.fOwner.TriggerHttpResponseFailed(new AsyncHttpRequestEventArgs(this.DataConnection, this.fContext));
				Done();
				return;
			}
			catch (SocketException)
			{
				this.fOwner.TriggerHttpResponseFailed(new AsyncHttpRequestEventArgs(this.DataConnection, this.fContext));
				Done();
				return;
			}
			catch (ObjectDisposedException)
			{
				this.fOwner.TriggerHttpResponseFailed(new AsyncHttpRequestEventArgs(this.DataConnection, this.fContext));
				Done();
				return;
			}

			//AsyncHttpContext lOldContext = fContext;

			fContext = this.fOwner.NewContext(this);
			try
			{
				DataConnection.BeginReadLine(HeaderFirstLineCallback, null);
			}
			catch (SocketException)
			{
				this.fOwner.TriggerHttpResponseFailed(new AsyncHttpRequestEventArgs(this.DataConnection, this.fContext));
				Done();
				return;
			}

			catch (ObjectDisposedException)
			{
				this.fOwner.TriggerHttpResponseFailed(new AsyncHttpRequestEventArgs(this.DataConnection, this.fContext));
				Done();
				return;
			}
			this.fOwner.TriggerHttpResponseSent(new AsyncHttpRequestEventArgs(this.DataConnection, this.fContext));
		}
	}