1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 package org.apache.http.nio.protocol;
28
29 import java.io.IOException;
30
31 import org.apache.http.ContentTooLongException;
32 import org.apache.http.HttpEntity;
33 import org.apache.http.HttpEntityEnclosingRequest;
34 import org.apache.http.HttpRequest;
35 import org.apache.http.annotation.ThreadSafe;
36 import org.apache.http.entity.ContentType;
37 import org.apache.http.nio.ContentDecoder;
38 import org.apache.http.nio.IOControl;
39 import org.apache.http.nio.entity.ContentBufferEntity;
40 import org.apache.http.nio.util.HeapByteBufferAllocator;
41 import org.apache.http.nio.util.SimpleInputBuffer;
42 import org.apache.http.protocol.HttpContext;
43 import org.apache.http.util.Asserts;
44
45
46
47
48
49
50
51
52 @ThreadSafe
53 public class BasicAsyncRequestConsumer extends AbstractAsyncRequestConsumer<HttpRequest> {
54
55 private volatile HttpRequest request;
56 private volatile SimpleInputBuffer buf;
57
58 public BasicAsyncRequestConsumer() {
59 super();
60 }
61
62 @Override
63 protected void onRequestReceived(final HttpRequest request) throws IOException {
64 this.request = request;
65 }
66
67 @Override
68 protected void onEntityEnclosed(
69 final HttpEntity entity, final ContentType contentType) throws IOException {
70 long len = entity.getContentLength();
71 if (len > Integer.MAX_VALUE) {
72 throw new ContentTooLongException("Entity content is too long: " + len);
73 }
74 if (len < 0) {
75 len = 4096;
76 }
77 this.buf = new SimpleInputBuffer((int) len, new HeapByteBufferAllocator());
78 ((HttpEntityEnclosingRequest) this.request).setEntity(
79 new ContentBufferEntity(entity, this.buf));
80 }
81
82 @Override
83 protected void onContentReceived(
84 final ContentDecoder decoder, final IOControl ioctrl) throws IOException {
85 Asserts.notNull(this.buf, "Content buffer");
86 this.buf.consumeContent(decoder);
87 }
88
89 @Override
90 protected void releaseResources() {
91 this.request = null;
92 this.buf = null;
93 }
94
95 @Override
96 protected HttpRequest buildResult(final HttpContext context) {
97 return this.request;
98 }
99
100 }