@@ -1943,7 +1943,7 @@ public void handle(final ChannelHandlerContext ctx, final MessageEvent e) throws
1943
1943
}
1944
1944
1945
1945
HttpRequest nettyRequest = future .getNettyRequest ();
1946
- AsyncHandler <?> handler = future .getAsyncHandler ();
1946
+ AsyncHandler handler = future .getAsyncHandler ();
1947
1947
Request request = future .getRequest ();
1948
1948
HttpResponse response = null ;
1949
1949
try {
@@ -1964,7 +1964,7 @@ public void handle(final ChannelHandlerContext ctx, final MessageEvent e) throws
1964
1964
Realm realm = request .getRealm () != null ? request .getRealm () : config .getRealm ();
1965
1965
1966
1966
HttpResponseStatus status = new ResponseStatus (future .getURI (), response , NettyAsyncHttpProvider .this );
1967
- FilterContext <?> fc = new FilterContext .FilterContextBuilder ().asyncHandler (handler ).request (request ).responseStatus (status ).build ();
1967
+ FilterContext fc = new FilterContext .FilterContextBuilder ().asyncHandler (handler ).request (request ).responseStatus (status ).build ();
1968
1968
for (ResponseFilter asyncFilter : config .getResponseFilters ()) {
1969
1969
try {
1970
1970
fc = asyncFilter .filter (fc );
@@ -1976,6 +1976,10 @@ public void handle(final ChannelHandlerContext ctx, final MessageEvent e) throws
1976
1976
}
1977
1977
}
1978
1978
1979
+ // The handler may have been wrapped.
1980
+ handler = fc .getAsyncHandler ();
1981
+ future .setAsyncHandler (handler );
1982
+
1979
1983
// The request has changed
1980
1984
if (fc .replayRequest ()) {
1981
1985
replayRequest (future , fc , response , ctx );
@@ -2220,20 +2224,43 @@ private final class WebSocketProtocol implements Protocol {
2220
2224
2221
2225
@ Override
2222
2226
public void handle (ChannelHandlerContext ctx , MessageEvent e ) throws Exception {
2223
- final NettyResponseFuture <?> future = ( NettyResponseFuture <?>) ctx .getAttachment ();
2224
- NettyResponseFuture <?> nettyResponse = NettyResponseFuture .class .cast (ctx . getAttachment ());
2225
- WebSocketUpgradeHandler h = WebSocketUpgradeHandler . class . cast ( nettyResponse . getAsyncHandler () );
2227
+ NettyResponseFuture future = NettyResponseFuture . class . cast ( ctx .getAttachment () );
2228
+ WebSocketUpgradeHandler h = WebSocketUpgradeHandler .class .cast (future . getAsyncHandler ());
2229
+ Request request = future . getRequest ( );
2226
2230
2227
2231
if (e .getMessage () instanceof HttpResponse ) {
2228
2232
HttpResponse response = (HttpResponse ) e .getMessage ();
2233
+
2234
+ HttpResponseStatus s = new ResponseStatus (future .getURI (), response , NettyAsyncHttpProvider .this );
2235
+ FilterContext <?> fc = new FilterContext .FilterContextBuilder ().asyncHandler (h ).request (request ).responseStatus (s ).build ();
2236
+ for (ResponseFilter asyncFilter : config .getResponseFilters ()) {
2237
+ try {
2238
+ fc = asyncFilter .filter (fc );
2239
+ if (fc == null ) {
2240
+ throw new NullPointerException ("FilterContext is null" );
2241
+ }
2242
+ } catch (FilterException efe ) {
2243
+ abort (future , efe );
2244
+ }
2245
+ }
2246
+
2247
+ // The handler may have been wrapped.
2248
+ future .setAsyncHandler (fc .getAsyncHandler ());
2249
+
2250
+ // The request has changed
2251
+ if (fc .replayRequest ()) {
2252
+ replayRequest (future , fc , response , ctx );
2253
+ return ;
2254
+ }
2255
+
2229
2256
final org .jboss .netty .handler .codec .http .HttpResponseStatus status =
2230
2257
new org .jboss .netty .handler .codec .http .HttpResponseStatus (101 , "Web Socket Protocol Handshake" );
2231
2258
2232
2259
final boolean validStatus = response .getStatus ().equals (status );
2233
2260
final boolean validUpgrade = response .getHeader (HttpHeaders .Names .UPGRADE ) != null ;
2234
2261
final boolean validConnection = response .getHeader (HttpHeaders .Names .CONNECTION ).equals (HttpHeaders .Values .UPGRADE );
2235
2262
2236
- HttpResponseStatus s = new ResponseStatus (future .getURI (), response , NettyAsyncHttpProvider .this );
2263
+ s = new ResponseStatus (future .getURI (), response , NettyAsyncHttpProvider .this );
2237
2264
final boolean statusReceived = h .onStatusReceived (s ) == STATE .UPGRADE ;
2238
2265
2239
2266
if (!validStatus || !validUpgrade || !validConnection || !statusReceived ) {
0 commit comments