Ejemplo n.º 1
0
        public void ReceiveResponseEntity(HttpResponse response)
        {
            if (!this.IsConnected())
            {
                throw new HttpNetworkException("Socket is closed or not ready");
            }

            string chunkedHeader = EntityUtils.GetTransferEncoding(response.Headers);

            if (chunkedHeader != null &&
                chunkedHeader.ToLower().Equals(HTTP.CHUNK_CODING))
            {
                List <byte>     byteBuffer = new List <byte>();
                BasicHttpEntity httpEntity = new BasicHttpEntity();
                httpEntity.ContentLength = 0;
                httpEntity.ContentType   = EntityUtils.GetContentType(response.Headers);
                response.Entity          = httpEntity;

                int chunkSize = EntityUtils.ConvertHexToInt(ReceiveLine());
                while (chunkSize > 0)
                {
                    // for each chunk...
                    byteBuffer.AddRange(ReceiveBytes(chunkSize));
                    httpEntity.ContentLength += chunkSize;
                    string test = ReceiveLine();
                    chunkSize = EntityUtils.ConvertHexToInt(ReceiveLine());
                }

                httpEntity.Content = byteBuffer.ToArray();
            }
            else
            {
                // TODO: support "Transfer-Encoding: chunked"
                int length = EntityUtils.GetContentLength(response.Headers);
                if (length > 0)
                {
                    BasicHttpEntity httpEntity = new BasicHttpEntity();
                    httpEntity.ContentLength = length;
                    httpEntity.Content       = ReceiveBytes(length).ToArray();
                    httpEntity.ContentType   = EntityUtils.GetContentType(response.Headers);
                    response.Entity          = httpEntity;
                }
                else
                {
                    byte[] content = ReceiveToEnd();
                    length = content.Length;
                    if (length > 0)
                    {
                        BasicHttpEntity httpEntity = new BasicHttpEntity();
                        httpEntity.ContentLength = length;
                        httpEntity.Content       = content;
                        httpEntity.ContentType   = EntityUtils.GetContentType(response.Headers);
                        response.Entity          = httpEntity;
                    }
                }
            }

            return;
        }
        /// <exception cref="Org.Apache.Http.HttpException"></exception>
        protected internal virtual HttpEntity PrepareInput(HttpMessage message)
        {
            BasicHttpEntity entity   = new BasicHttpEntity();
            long            len      = this.incomingContentStrategy.DetermineLength(message);
            InputStream     instream = CreateInputStream(len, this.inbuffer);

            if (len == ContentLengthStrategy.Chunked)
            {
                entity.SetChunked(true);
                entity.SetContentLength(-1);
                entity.SetContent(instream);
            }
            else
            {
                if (len == ContentLengthStrategy.Identity)
                {
                    entity.SetChunked(false);
                    entity.SetContentLength(-1);
                    entity.SetContent(instream);
                }
                else
                {
                    entity.SetChunked(false);
                    entity.SetContentLength(len);
                    entity.SetContent(instream);
                }
            }
            Header contentTypeHeader = message.GetFirstHeader(HTTP.ContentType);

            if (contentTypeHeader != null)
            {
                entity.SetContentType(contentTypeHeader);
            }
            Header contentEncodingHeader = message.GetFirstHeader(HTTP.ContentEncoding);

            if (contentEncodingHeader != null)
            {
                entity.SetContentEncoding(contentEncodingHeader);
            }
            return(entity);
        }
Ejemplo n.º 3
0
		public override void ReceiveResponseEntity(HttpResponse response)
		{
			if (!this.IsConnected())
			{
				throw new HttpNetworkException("Tls client is closed or not ready (ReceiveResponseEntity)");
			}

			string chunkedHeader = EntityUtils.GetTransferEncoding(response.Headers);
			if (chunkedHeader != null
				&& chunkedHeader.ToLower().Equals(HTTP.CHUNK_CODING))
			{
				List<byte> byteBuffer = new List<byte>();
				BasicHttpEntity httpEntity = new BasicHttpEntity();
				httpEntity.ContentLength = 0;
				httpEntity.ContentType = EntityUtils.GetContentType(response.Headers);
				response.Entity = httpEntity;

				int chunkSize = EntityUtils.ConvertHexToInt(ReceiveLine());
				while (chunkSize > 0)
				{
					// for each chunk...
					byteBuffer.AddRange(ReceiveBytes(chunkSize));
					httpEntity.ContentLength += chunkSize;
					string test = ReceiveLine();
					chunkSize = EntityUtils.ConvertHexToInt(ReceiveLine());
				}

				httpEntity.Content = byteBuffer.ToArray();
			}
			else
			{
				// TODO: support "Transfer-Encoding: chunked"
				int length = EntityUtils.GetContentLength(response.Headers);
				if (length > 0)
				{
					BasicHttpEntity httpEntity = new BasicHttpEntity();
					httpEntity.ContentLength = length;
					httpEntity.Content = ReceiveBytes(length).ToArray();
					httpEntity.ContentType = EntityUtils.GetContentType(response.Headers);
					response.Entity = httpEntity;
				}
			}

			return;
		}
Ejemplo n.º 4
0
        /// <summary>
        /// Creates new instance of
        /// <see cref="Apache.Http.HttpEntity">Apache.Http.HttpEntity</see>
        /// based on the current state.
        /// </summary>
        public virtual HttpEntity Build()
        {
            AbstractHttpEntity e;

            if (this.text != null)
            {
                e = new StringEntity(this.text, GetContentOrDefault(ContentType.DefaultText));
            }
            else
            {
                if (this.binary != null)
                {
                    e = new ByteArrayEntity(this.binary, GetContentOrDefault(ContentType.DefaultBinary
                                                                             ));
                }
                else
                {
                    if (this.stream != null)
                    {
                        e = new InputStreamEntity(this.stream, 1, GetContentOrDefault(ContentType.DefaultBinary
                                                                                      ));
                    }
                    else
                    {
                        if (this.parameters != null)
                        {
                            e = new UrlEncodedFormEntity(this.parameters, this.contentType != null ? this.contentType
                                                         .GetCharset() : null);
                        }
                        else
                        {
                            if (this.serializable != null)
                            {
                                e = new SerializableEntity(this.serializable);
                                e.SetContentType(ContentType.DefaultBinary.ToString());
                            }
                            else
                            {
                                if (this.file != null)
                                {
                                    e = new FileEntity(this.file, GetContentOrDefault(ContentType.DefaultBinary));
                                }
                                else
                                {
                                    e = new BasicHttpEntity();
                                }
                            }
                        }
                    }
                }
            }
            if (e.GetContentType() != null && this.contentType != null)
            {
                e.SetContentType(this.contentType.ToString());
            }
            e.SetContentEncoding(this.contentEncoding);
            e.SetChunked(this.chunked);
            if (this.gzipCompress)
            {
                return(new GzipCompressingEntity(e));
            }
            return(e);
        }