Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse McConnell2012-06-21 15:50:06 +0000
committerJesse McConnell2012-06-21 15:50:06 +0000
commit9b2d7bb9bf6c052fa80169f91bfd1d9e1b6f9343 (patch)
tree461d3b3e052031242d1128575beceacbe57b6bf1 /jetty-server/src/main/java/org/eclipse/jetty/server/handler/ConnectHandler.java
parentd40dc43e36dbd4a3c6de514d37a335ef3f219208 (diff)
downloadorg.eclipse.jetty.project-9b2d7bb9bf6c052fa80169f91bfd1d9e1b6f9343.tar.gz
org.eclipse.jetty.project-9b2d7bb9bf6c052fa80169f91bfd1d9e1b6f9343.tar.xz
org.eclipse.jetty.project-9b2d7bb9bf6c052fa80169f91bfd1d9e1b6f9343.zip
[Bug 383251] resolve npe and return 500 when remote server is unaccessible
Diffstat (limited to 'jetty-server/src/main/java/org/eclipse/jetty/server/handler/ConnectHandler.java')
-rw-r--r--jetty-server/src/main/java/org/eclipse/jetty/server/handler/ConnectHandler.java21
1 files changed, 20 insertions, 1 deletions
diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ConnectHandler.java b/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ConnectHandler.java
index cef2c5cc97..9fef840cf9 100644
--- a/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ConnectHandler.java
+++ b/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ConnectHandler.java
@@ -223,8 +223,21 @@ public class ConnectHandler extends HandlerWrapper
return;
}
- SocketChannel channel = connectToServer(request, host, port);
+ SocketChannel channel;
+ try
+ {
+ channel = connectToServer(request, host, port);
+ }
+ catch ( IOException ioe )
+ {
+ LOG.info("ConnectHandler: " + ioe.getMessage());
+ response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ baseRequest.setHandled(true);
+ return;
+ }
+
+
// Transfer unread data from old connection to new connection
// We need to copy the data to avoid races:
// 1. when this unread data is written and the server replies before the clientToProxy
@@ -304,9 +317,15 @@ public class ConnectHandler extends HandlerWrapper
return new ProxyToServerConnection(context, buffer);
}
+ // may return null
private SocketChannel connectToServer(HttpServletRequest request, String host, int port) throws IOException
{
SocketChannel channel = connect(request, host, port);
+ if ( channel == null )
+ {
+ throw new IOException("unable to connector to " + host + ":" + port);
+ }
+
channel.configureBlocking(false);
return channel;
}

Back to the top