Skip to content

Commit 0c5b8f4

Browse files
committed
Implemented Undertow
1 parent b65bfa3 commit 0c5b8f4

File tree

4 files changed

+166
-1
lines changed

4 files changed

+166
-1
lines changed

pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,11 @@
6868
<artifactId>junit-jupiter-api</artifactId>
6969
<version>5.8.2</version>
7070
</dependency>
71+
<dependency>
72+
<groupId>io.undertow</groupId>
73+
<artifactId>undertow-core</artifactId>
74+
<version>2.2.13.Final</version>
75+
</dependency>
7176
<dependency>
7277
<groupId>org.junit.jupiter</groupId>
7378
<artifactId>junit-jupiter-engine</artifactId>

src/main/java/org/javawebstack/httpserver/HTTPServer.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import org.javawebstack.abstractdata.NamingPolicy;
55
import org.javawebstack.httpserver.adapter.IHTTPSocketServer;
66
import org.javawebstack.httpserver.adapter.jetty.JettyHTTPSocketServer;
7-
import org.javawebstack.httpserver.adapter.simple.SimpleHTTPSocketServer;
87
import org.javawebstack.httpserver.handler.*;
98
import org.javawebstack.httpserver.router.DefaultRouteAutoInjector;
109
import org.javawebstack.httpserver.router.Route;
Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
package org.javawebstack.httpserver.adapter.untertow;
2+
3+
import io.undertow.server.HttpServerExchange;
4+
import io.undertow.util.HeaderValues;
5+
import io.undertow.util.HttpString;
6+
import org.javawebstack.httpserver.HTTPMethod;
7+
import org.javawebstack.httpserver.HTTPStatus;
8+
import org.javawebstack.httpserver.adapter.IHTTPSocket;
9+
10+
import java.io.IOException;
11+
import java.io.InputStream;
12+
import java.io.OutputStream;
13+
import java.util.*;
14+
import java.util.stream.Collectors;
15+
16+
public class UndertowHTTPSocket implements IHTTPSocket {
17+
18+
private final HttpServerExchange exchange;
19+
20+
public UndertowHTTPSocket(HttpServerExchange exchange) {
21+
this.exchange = exchange;
22+
}
23+
24+
public InputStream getInputStream() throws IOException {
25+
return exchange.getInputStream();
26+
}
27+
28+
public OutputStream getOutputStream() throws IOException {
29+
return exchange.getOutputStream();
30+
}
31+
32+
public void close() throws IOException {
33+
exchange.endExchange();
34+
}
35+
36+
public boolean isClosed() {
37+
return exchange.isComplete();
38+
}
39+
40+
public IHTTPSocket setResponseStatus(int status, String message) {
41+
exchange.setStatusCode(status);
42+
return this;
43+
}
44+
45+
public IHTTPSocket setResponseHeader(String name, String value) {
46+
exchange.getResponseHeaders().put(new HttpString(name), value);
47+
return this;
48+
}
49+
50+
public IHTTPSocket addResponseHeader(String name, String value) {
51+
exchange.getResponseHeaders().add(new HttpString(name), value);
52+
return this;
53+
}
54+
55+
public HTTPMethod getRequestMethod() {
56+
return HTTPMethod.valueOf(exchange.getRequestMethod().toString());
57+
}
58+
59+
public String getRequestPath() {
60+
return exchange.getRequestPath();
61+
}
62+
63+
public String getRequestQuery() {
64+
return exchange.getQueryString();
65+
}
66+
67+
public String getRequestVersion() {
68+
return exchange.getProtocol().toString();
69+
}
70+
71+
public Set<String> getRequestHeaderNames() {
72+
return exchange.getRequestHeaders().getHeaderNames().stream().map(HttpString::toString).collect(Collectors.toSet());
73+
}
74+
75+
public String getRequestHeader(String name) {
76+
HeaderValues values = exchange.getRequestHeaders().get(name);
77+
if(values == null)
78+
return null;
79+
return values.getFirst();
80+
}
81+
82+
public List<String> getRequestHeaders(String name) {
83+
HeaderValues values = exchange.getRequestHeaders().get(name);
84+
if(values == null)
85+
return Collections.emptyList();
86+
return new ArrayList<>(values);
87+
}
88+
89+
public int getResponseStatus() {
90+
return exchange.getStatusCode();
91+
}
92+
93+
public String getResponseStatusMessage() {
94+
HTTPStatus status = HTTPStatus.byStatus(getResponseStatus());
95+
if(status == null)
96+
return null;
97+
return status.getMessage();
98+
}
99+
100+
public void writeHeaders() throws IOException {
101+
exchange.getResponseSender().send("");
102+
}
103+
104+
public String getRemoteAddress() {
105+
return exchange.getSourceAddress().getAddress().getHostAddress();
106+
}
107+
108+
public HttpServerExchange getExchange() {
109+
return exchange;
110+
}
111+
112+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package org.javawebstack.httpserver.adapter.untertow;
2+
3+
import io.undertow.Undertow;
4+
import org.javawebstack.httpserver.adapter.IHTTPSocketHandler;
5+
import org.javawebstack.httpserver.adapter.IHTTPSocketServer;
6+
7+
import java.io.IOException;
8+
9+
public class UndertowHTTPSocketServer implements IHTTPSocketServer {
10+
11+
private int port = 80;
12+
private Undertow server;
13+
private IHTTPSocketHandler handler;
14+
15+
public void setPort(int port) {
16+
this.port = port;
17+
}
18+
19+
public int getPort() {
20+
return port;
21+
}
22+
23+
public void start() throws IOException {
24+
server = Undertow.builder()
25+
.addHttpListener(port, "0.0.0.0")
26+
.setHandler(httpServerExchange -> handler.handle(new UndertowHTTPSocket(httpServerExchange)))
27+
.build();
28+
server.start();
29+
}
30+
31+
public void stop() {
32+
server.stop();
33+
}
34+
35+
public void join() {
36+
try {
37+
server.getWorker().awaitTermination();
38+
} catch (InterruptedException e) {}
39+
}
40+
41+
public void setHandler(IHTTPSocketHandler handler) {
42+
this.handler = handler;
43+
}
44+
45+
public boolean isWebSocketSupported() {
46+
return false;
47+
}
48+
49+
}

0 commit comments

Comments
 (0)