From 17f6c28c7dde3966f6ca4f5771df38d27b160b57 Mon Sep 17 00:00:00 2001 From: Greg Wilkins Date: Tue, 6 Jun 2017 17:07:14 +0200 Subject: [PATCH] Issue #1503 Optionally strip IPv6. Default true --- .../org/eclipse/jetty/server/Request.java | 87 +++++++++++++++++++ .../org/eclipse/jetty/server/Response.java | 50 ++++++++++- .../java/org/eclipse/jetty/util/HostPort.java | 4 +- .../jetty/websocket/tests/LocalFuzzer.java | 4 +- .../tests/server/WebSocketCloseTest.java | 14 ++- .../test/resources/jetty-logging.properties | 2 +- pom.xml | 1 + 7 files changed, 153 insertions(+), 9 deletions(-) diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/Request.java b/jetty-server/src/main/java/org/eclipse/jetty/server/Request.java index d84f7e5713e8..01cf04436bc1 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/Request.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/Request.java @@ -60,6 +60,8 @@ import javax.servlet.http.HttpSession; import javax.servlet.http.HttpUpgradeHandler; import javax.servlet.http.Part; +import javax.servlet.http.PushBuilder; +import javax.servlet.http.HttpServletMapping; import org.eclipse.jetty.http.BadMessageException; import org.eclipse.jetty.http.HostPortHttpField; @@ -2462,4 +2464,89 @@ public T upgrade(Class handlerClass) throws IO { throw new ServletException("HttpServletRequest.upgrade() not supported in Jetty"); } + + + public void setPathSpec(PathSpec pathSpec) + { + _pathSpec = pathSpec; + } + + public PathSpec getPathSpec() + { + return _pathSpec; + } + + + // TODO replace with overriden version from API + public HttpServletMapping getMapping() + { + final PathSpec pathSpec = _pathSpec; + final MappingMatch match; + final String mapping; + if (pathSpec instanceof ServletPathSpec) + { + switch(((ServletPathSpec)pathSpec).getGroup()) + { + case ROOT: + match = MappingMatch.CONTEXT_ROOT; + mapping = ""; + break; + case DEFAULT: + match = MappingMatch.DEFAULT; + mapping = "/"; + break; + case EXACT: + match = MappingMatch.EXACT; + mapping = _servletPath; + break; + case SUFFIX_GLOB: + match = MappingMatch.EXTENSION; + int dot = _servletPath.lastIndexOf('.'); + mapping = _servletPath.substring(0,dot); + break; + case PREFIX_GLOB: + match = MappingMatch.PATH; + mapping = _servletPath; + break; + default: + match = null; + mapping = _servletPath; + break; + } + } + else + { + match = null; + mapping = _servletPath; + } + + return new HttpServletMapping() + { + @Override + public String getMatchValue() + { + return mapping; + } + + @Override + public String getPattern() + { + if (pathSpec!=null) + pathSpec.toString(); + return null; + } + + @Override + public String getServletName() + { + return Request.this.getServletName(); + } + + @Override + public MappingMatch getMappingMatch() + { + return match; + } + }; + } } diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/Response.java b/jetty-server/src/main/java/org/eclipse/jetty/server/Response.java index 357499546f1a..2439935c8234 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/Response.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/Response.java @@ -108,7 +108,7 @@ public enum OutputType private OutputType _outputType = OutputType.NONE; private ResponseWriter _writer; private long _contentLength = -1; - private Supplier trailers; + private Supplier _trailers; private enum EncodingFrom { NOT_SET, INFERRED, SET_LOCALE, SET_CONTENT_TYPE, SET_CHARACTER_ENCODING } private static final EnumSet __localeOverride = EnumSet.of(EncodingFrom.NOT_SET,EncodingFrom.INFERRED); @@ -1314,12 +1314,27 @@ public void resetBuffer() public void setTrailers(Supplier trailers) { - this.trailers = trailers; + this._trailers = trailers; + } + + @Override + public void setTrailerFields(Supplier> trailers) + { + // TODO new for 4.0 - avoid transient supplier? + this._trailers = new HttpFieldsSupplier(trailers); } public Supplier getTrailers() { - return trailers; + return _trailers; + } + + @Override + public Supplier> getTrailerFields() + { + if (_trailers instanceof HttpFieldsSupplier) + ((HttpFieldsSupplier)_trailers).getSupplier(); + return null; } protected MetaData.Response newResponseMetaData() @@ -1487,4 +1502,33 @@ public static void putHeaders(HttpServletResponse response, HttpContent content, response.setHeader(HttpHeader.ETAG.asString(),et); } } + + private static class HttpFieldsSupplier implements Supplier + { + private final Supplier> _supplier; + + public HttpFieldsSupplier(Supplier> trailers) + { + _supplier = trailers; + } + + @Override + public HttpFields get() + { + Map t = _supplier.get(); + if (t==null) + return null; + HttpFields fields = new HttpFields(); + for (Map.Entry e : t.entrySet()) + { + fields.add(e.getKey(),e.getValue()); + } + return fields; + } + + public Supplier> getSupplier() + { + return _supplier; + } + } } diff --git a/jetty-util/src/main/java/org/eclipse/jetty/util/HostPort.java b/jetty-util/src/main/java/org/eclipse/jetty/util/HostPort.java index 250c296fae3a..761f2bcc8067 100644 --- a/jetty-util/src/main/java/org/eclipse/jetty/util/HostPort.java +++ b/jetty-util/src/main/java/org/eclipse/jetty/util/HostPort.java @@ -23,11 +23,11 @@ *

Parse a string in the form "host:port", handling IPv4 an IPv6 hosts

* *

The System property "org.eclipse.jetty.util.HostPort.STRIP_IPV6" can be set to a boolean - * value to control of the square brackets are stripped off IPv6 addresses (default false).

+ * value to control of the square brackets are stripped off IPv6 addresses (default true).

*/ public class HostPort { - private final static boolean STRIP_IPV6 = Boolean.parseBoolean(System.getProperty("org.eclipse.jetty.util.HostPort.STRIP_IPV6","false")); + private final static boolean STRIP_IPV6 = Boolean.parseBoolean(System.getProperty("org.eclipse.jetty.util.HostPort.STRIP_IPV6","true")); private final String _host; private final int _port; diff --git a/jetty-websocket/websocket-tests/src/main/java/org/eclipse/jetty/websocket/tests/LocalFuzzer.java b/jetty-websocket/websocket-tests/src/main/java/org/eclipse/jetty/websocket/tests/LocalFuzzer.java index 0c8560008e65..7674239cc90b 100644 --- a/jetty-websocket/websocket-tests/src/main/java/org/eclipse/jetty/websocket/tests/LocalFuzzer.java +++ b/jetty-websocket/websocket-tests/src/main/java/org/eclipse/jetty/websocket/tests/LocalFuzzer.java @@ -131,7 +131,7 @@ public void assertExpected(BlockingQueue framesQueue, List1.2 1.1.3.v20160715 8.5.9.1 + 4.0.0-b07 undefined