|
19 | 19 | import io.netty.channel.Channel;
|
20 | 20 | import io.netty.handler.codec.http.HttpHeaderNames;
|
21 | 21 | import io.netty.handler.codec.http.HttpHeaderValues;
|
| 22 | +import io.netty.handler.codec.http.HttpRequest; |
22 | 23 | import io.netty.handler.codec.http.HttpResponse;
|
23 | 24 | import io.netty.handler.codec.http.websocketx.BinaryWebSocketFrame;
|
24 | 25 | import io.netty.handler.codec.http.websocketx.CloseWebSocketFrame;
|
@@ -69,29 +70,22 @@ private class UpgradeCallback extends Callback {
|
69 | 70 |
|
70 | 71 | private final Channel channel;
|
71 | 72 | private final HttpResponse response;
|
| 73 | + private final WebSocketUpgradeHandler handler; |
| 74 | + private final HttpResponseStatus status; |
| 75 | + private final HttpResponseHeaders responseHeaders; |
72 | 76 |
|
73 |
| - public UpgradeCallback(NettyResponseFuture<?> future, Channel channel, HttpResponse response) { |
| 77 | + public UpgradeCallback(NettyResponseFuture<?> future, Channel channel, HttpResponse response, WebSocketUpgradeHandler handler, HttpResponseStatus status, HttpResponseHeaders responseHeaders) { |
74 | 78 | super(future);
|
75 | 79 | this.channel = channel;
|
76 | 80 | this.response = response;
|
| 81 | + this.handler = handler; |
| 82 | + this.status = status; |
| 83 | + this.responseHeaders = responseHeaders; |
77 | 84 | }
|
78 | 85 |
|
79 | 86 | @Override
|
80 | 87 | public void call() throws Exception {
|
81 | 88 |
|
82 |
| - WebSocketUpgradeHandler handler = WebSocketUpgradeHandler.class.cast(future.getAsyncHandler()); |
83 |
| - Request request = future.getCurrentRequest(); |
84 |
| - |
85 |
| - HttpResponseStatus status = new NettyResponseStatus(future.getUri(), config, response, channel); |
86 |
| - HttpResponseHeaders responseHeaders = new HttpResponseHeaders(response.headers()); |
87 |
| - Realm realm = request.getRealm() != null ? request.getRealm() : config.getRealm(); |
88 |
| - |
89 |
| - if (exitAfterProcessingFilters(channel, future, handler, status, responseHeaders)) { |
90 |
| - return; |
91 |
| - } |
92 |
| - |
93 |
| - if (REDIRECT_STATUSES.contains(status.getStatusCode()) && exitAfterHandlingRedirect(channel, future, response, request, response.status().code(), realm)) |
94 |
| - return; |
95 | 89 |
|
96 | 90 | boolean validStatus = response.status().equals(SWITCHING_PROTOCOLS);
|
97 | 91 | boolean validUpgrade = response.headers().get(HttpHeaderNames.UPGRADE) != null;
|
@@ -137,7 +131,26 @@ public void handle(Channel channel, NettyResponseFuture<?> future, Object e) thr
|
137 | 131 |
|
138 | 132 | if (e instanceof HttpResponse) {
|
139 | 133 | HttpResponse response = (HttpResponse) e;
|
140 |
| - Channels.setAttribute(channel, new UpgradeCallback(future, channel, response)); |
| 134 | + if (logger.isDebugEnabled()) { |
| 135 | + HttpRequest httpRequest = future.getNettyRequest().getHttpRequest(); |
| 136 | + logger.debug("\n\nRequest {}\n\nResponse {}\n", httpRequest, response); |
| 137 | + } |
| 138 | + |
| 139 | + WebSocketUpgradeHandler handler = WebSocketUpgradeHandler.class.cast(future.getAsyncHandler()); |
| 140 | + HttpResponseStatus status = new NettyResponseStatus(future.getUri(), config, response, channel); |
| 141 | + HttpResponseHeaders responseHeaders = new HttpResponseHeaders(response.headers()); |
| 142 | + |
| 143 | + Request request = future.getCurrentRequest(); |
| 144 | + Realm realm = request.getRealm() != null ? request.getRealm() : config.getRealm(); |
| 145 | + |
| 146 | + if (exitAfterProcessingFilters(channel, future, handler, status, responseHeaders)) { |
| 147 | + return; |
| 148 | + } |
| 149 | + |
| 150 | + if (REDIRECT_STATUSES.contains(status.getStatusCode()) && exitAfterHandlingRedirect(channel, future, response, request, response.status().code(), realm)) |
| 151 | + return; |
| 152 | + |
| 153 | + Channels.setAttribute(channel, new UpgradeCallback(future, channel, response, handler, status, responseHeaders)); |
141 | 154 |
|
142 | 155 | } else if (e instanceof WebSocketFrame) {
|
143 | 156 |
|
|
0 commit comments