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
28 package org.apache.http.nio.integration;
29
30 import java.io.IOException;
31
32 import org.apache.http.HttpEntity;
33 import org.apache.http.HttpEntityEnclosingRequest;
34 import org.apache.http.HttpException;
35 import org.apache.http.HttpRequest;
36 import org.apache.http.HttpResponse;
37 import org.apache.http.HttpStatus;
38 import org.apache.http.entity.ContentType;
39 import org.apache.http.nio.entity.NStringEntity;
40 import org.apache.http.protocol.HttpContext;
41 import org.apache.http.protocol.HttpRequestHandler;
42 import org.apache.http.util.EntityUtils;
43
44 final class SimpleRequestHandler implements HttpRequestHandler {
45
46 private final boolean chunking;
47
48 SimpleRequestHandler() {
49 this(false);
50 }
51
52 SimpleRequestHandler(final boolean chunking) {
53 super();
54 this.chunking = chunking;
55 }
56
57 @Override
58 public void handle(
59 final HttpRequest request,
60 final HttpResponse response,
61 final HttpContext context) throws HttpException, IOException {
62
63 final String s = request.getRequestLine().getUri();
64 final int idx = s.indexOf('x');
65 if (idx == -1) {
66 throw new HttpException("Unexpected request-URI format");
67 }
68 final String pattern = s.substring(0, idx);
69 final int count = Integer.parseInt(s.substring(idx + 1, s.length()));
70 response.addHeader("Pattern", pattern);
71
72 final String content;
73 if (request instanceof HttpEntityEnclosingRequest) {
74 final HttpEntity entity = ((HttpEntityEnclosingRequest) request).getEntity();
75 if (entity != null) {
76 content = EntityUtils.toString(entity);
77 } else {
78 response.setStatusCode(HttpStatus.SC_BAD_REQUEST);
79 content = "Request entity not available";
80 }
81 } else {
82 final StringBuilder buffer = new StringBuilder();
83 for (int i = 0; i < count; i++) {
84 buffer.append(pattern);
85 }
86 content = buffer.toString();
87 }
88 final NStringEntity entity = new NStringEntity(content, ContentType.DEFAULT_TEXT);
89 entity.setChunked(this.chunking);
90 response.setEntity(entity);
91 }
92
93 }