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.hc.core5.testing.reactive;
29
30 import java.io.IOException;
31 import java.nio.ByteBuffer;
32
33 import org.apache.hc.core5.function.Callback;
34 import org.apache.hc.core5.http.ContentType;
35 import org.apache.hc.core5.http.EntityDetails;
36 import org.apache.hc.core5.http.HeaderElements;
37 import org.apache.hc.core5.http.HttpException;
38 import org.apache.hc.core5.http.HttpHeaders;
39 import org.apache.hc.core5.http.HttpRequest;
40 import org.apache.hc.core5.http.impl.BasicEntityDetails;
41 import org.apache.hc.core5.http.message.BasicHeader;
42 import org.apache.hc.core5.http.message.BasicHttpResponse;
43 import org.apache.hc.core5.http.nio.ResponseChannel;
44 import org.apache.hc.core5.http.protocol.HttpContext;
45 import org.apache.hc.core5.reactive.ReactiveRequestProcessor;
46 import org.reactivestreams.Publisher;
47
48 public final class ReactiveEchoProcessor implements ReactiveRequestProcessor {
49 public ReactiveEchoProcessor() {
50 }
51
52 @Override
53 public void processRequest(
54 final HttpRequest request,
55 final EntityDetails entityDetails,
56 final ResponseChannel responseChannel,
57 final HttpContext context,
58 final Publisher<ByteBuffer> requestBody,
59 final Callback<Publisher<ByteBuffer>> responseBodyFuture
60 ) throws HttpException, IOException {
61 if (new BasicHeader(HttpHeaders.EXPECT, HeaderElements.CONTINUE).equals(request.getHeader(HttpHeaders.EXPECT))) {
62 responseChannel.sendInformation(new BasicHttpResponse(100), context);
63 }
64
65 responseChannel.sendResponse(
66 new BasicHttpResponse(200),
67 new BasicEntityDetails(-1, ContentType.APPLICATION_OCTET_STREAM),
68 context);
69 responseBodyFuture.execute(requestBody);
70 }
71 }