Skip to content

Commit a07ce4e

Browse files
committed
undertow integration WIP
1 parent 236addc commit a07ce4e

1 file changed

Lines changed: 77 additions & 0 deletions

File tree

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
package org.osgl.oms.xio.undertow;
2+
3+
import io.undertow.io.BlockingSenderImpl;
4+
import io.undertow.io.Sender;
5+
import io.undertow.server.BlockingHttpExchange;
6+
import io.undertow.server.HttpServerExchange;
7+
import io.undertow.servlet.core.BlockingWriterSenderImpl;
8+
import io.undertow.servlet.handlers.ServletRequestContext;
9+
import io.undertow.servlet.spec.HttpServletRequestImpl;
10+
import io.undertow.servlet.spec.HttpServletResponseImpl;
11+
import io.undertow.util.AttachmentKey;
12+
import org.osgl.http.H;
13+
import org.osgl.oms.app.AppContext;
14+
15+
import javax.servlet.ServletResponse;
16+
import java.io.IOException;
17+
import java.io.InputStream;
18+
import java.io.OutputStream;
19+
20+
public class OmsBlockingExchange implements BlockingHttpExchange {
21+
22+
public static final AttachmentKey<AppContext> KEY_APP_CTX = AttachmentKey.create(AppContext.class);
23+
24+
private final HttpServerExchange exchange;
25+
26+
public OmsBlockingExchange(final HttpServerExchange exchange) {
27+
this.exchange = exchange;
28+
}
29+
30+
@Override
31+
public InputStream getInputStream() {
32+
H.Request request = ctx().req();
33+
return request.inputStream();
34+
}
35+
36+
@Override
37+
public OutputStream getOutputStream() {
38+
H.Response response = ctx().resp();
39+
return response.outputStream();
40+
}
41+
42+
@Override
43+
public Sender getSender() {
44+
H.Response response = ctx().resp();
45+
if (response.writerCreated()) {
46+
return new BlockingWriterSenderImpl(exchange, response.writer(), response.characterEncoding());
47+
} else {
48+
return new BlockingSenderImpl(exchange, response.outputStream());
49+
}
50+
}
51+
52+
@Override
53+
public void close() throws IOException {
54+
AppContext ctx = ctx();
55+
if (!exchange.isComplete()) {
56+
try {
57+
HttpServletRequestImpl request = servletRequestContext.getOriginalRequest();
58+
request.closeAndDrainRequest();
59+
} finally {
60+
HttpServletResponseImpl response = servletRequestContext.getOriginalResponse();
61+
response.closeStreamAndWriter();
62+
}
63+
} else {
64+
try {
65+
HttpServletRequestImpl request = servletRequestContext.getOriginalRequest();
66+
request.freeResources();
67+
} finally {
68+
HttpServletResponseImpl response = servletRequestContext.getOriginalResponse();
69+
response.freeResources();
70+
}
71+
}
72+
}
73+
74+
private AppContext ctx() {
75+
return exchange.getAttachment(KEY_APP_CTX);
76+
}
77+
}

0 commit comments

Comments
 (0)