1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.mina.examples.http;
21
22 import java.net.InetSocketAddress;
23 import java.nio.ByteBuffer;
24 import java.util.ArrayList;
25 import java.util.HashMap;
26 import java.util.List;
27 import java.util.Map;
28
29 import org.apache.mina.api.AbstractIoFilter;
30 import org.apache.mina.api.IoSession;
31 import org.apache.mina.filter.codec.ProtocolCodecFilter;
32 import org.apache.mina.filter.logging.LoggingFilter;
33 import org.apache.mina.filterchain.ReadFilterChainController;
34 import org.apache.mina.http.DateUtil;
35 import org.apache.mina.http.HttpDecoderState;
36 import org.apache.mina.http.HttpServerDecoder;
37 import org.apache.mina.http.HttpServerEncoder;
38 import org.apache.mina.http.api.DefaultHttpResponse;
39 import org.apache.mina.http.api.HttpEndOfContent;
40 import org.apache.mina.http.api.HttpMethod;
41 import org.apache.mina.http.api.HttpPdu;
42 import org.apache.mina.http.api.HttpRequest;
43 import org.apache.mina.http.api.HttpStatus;
44 import org.apache.mina.http.api.HttpVersion;
45 import org.apache.mina.transport.nio.NioTcpServer;
46
47 public class HttpsTest {
48
49 public static void main(String[] args) throws Exception {
50
51 NioTcpServer httpServer = new NioTcpServer();
52
53 httpServer.setFilters(new LoggingFilter("INCOMING"),
54 new ProtocolCodecFilter<HttpPdu, ByteBuffer, Void, HttpDecoderState>(new HttpServerEncoder(),
55 new HttpServerDecoder()), new LoggingFilter("DECODED"), new DummyHttpSever());
56
57 httpServer.getSessionConfig().setTcpNoDelay(true);
58
59
60 httpServer.getSessionConfig().setSslContext(BogusSslContextFactory.getInstance(true));
61
62 httpServer.bind(new InetSocketAddress(8080));
63
64
65 Thread.sleep(20000);
66 httpServer.unbind();
67
68 }
69
70 private static class DummyHttpSever extends AbstractIoFilter {
71
72 private HttpRequest incomingRequest;
73
74 private List<ByteBuffer> body;
75
76 @Override
77 public void messageReceived(IoSession session, Object message, ReadFilterChainController controller) {
78 if (message instanceof HttpRequest) {
79 incomingRequest = (HttpRequest) message;
80 body = new ArrayList<ByteBuffer>();
81
82
83 if (incomingRequest.getMethod() != HttpMethod.POST && incomingRequest.getMethod() != HttpMethod.PUT) {
84 sendResponse(session, incomingRequest);
85 } else {
86
87 }
88 } else if (message instanceof ByteBuffer) {
89 body.add((ByteBuffer) message);
90 } else if (message instanceof HttpEndOfContent) {
91
92 sendResponse(session, incomingRequest);
93 }
94
95 }
96
97 public void sendResponse(IoSession session, HttpRequest request) {
98 Map<String, String> headers = new HashMap<String, String>();
99 headers.put("Server", "Apache MINA Dummy test server/0.0.");
100 headers.put("Date", DateUtil.getCurrentAsString());
101 headers.put("Connection", "Close");
102 String strContent = "Hello ! we reply to request !";
103 ByteBuffer content = ByteBuffer.wrap(strContent.getBytes());
104
105
106 headers.put("Content-Length", String.valueOf(content.remaining()));
107 session.write(new DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SUCCESS_OK, headers));
108 session.write(content);
109 session.write(new HttpEndOfContent());
110 }
111 }
112 }