diff --git a/jetty-http/src/main/java/org/eclipse/jetty/http/HttpFields.java b/jetty-http/src/main/java/org/eclipse/jetty/http/HttpFields.java index b9031cdb276..98327caea2d 100644 --- a/jetty-http/src/main/java/org/eclipse/jetty/http/HttpFields.java +++ b/jetty-http/src/main/java/org/eclipse/jetty/http/HttpFields.java @@ -24,6 +24,7 @@ import java.util.Collections; import java.util.Enumeration; import java.util.HashMap; import java.util.HashSet; +import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.NoSuchElementException; @@ -48,17 +49,19 @@ import org.eclipse.jetty.util.log.Logger; *

The cookie handling provided by this class is guided by the Servlet specification and RFC6265. * */ -public class HttpFields extends ArrayList +public class HttpFields implements Iterable { - private static final long serialVersionUID = 1L; private static final Logger LOG = Log.getLogger(HttpFields.class); public final static String __separators = ", \t"; + final List _fields; + /** * Constructor. */ public HttpFields() { + _fields=new ArrayList<>(); } /** @@ -66,7 +69,18 @@ public class HttpFields extends ArrayList */ public HttpFields(int capacity) { - super(capacity); + _fields=new ArrayList<>(capacity); + } + + public int size() + { + return _fields.size(); + } + + @Override + public Iterator iterator() + { + return _fields.iterator(); } /** @@ -74,7 +88,7 @@ public class HttpFields extends ArrayList */ public Collection getFieldNamesCollection() { - final Set list = new HashSet<>(size()); + final Set list = new HashSet<>(_fields.size()); for (HttpField f : this) { if (f!=null) @@ -99,14 +113,14 @@ public class HttpFields extends ArrayList */ public HttpField getField(int i) { - return get(i); + return _fields.get(i); } public HttpField getField(HttpHeader header) { - for (int i=0;i public HttpField getField(String name) { - for (int i=0;i0;) + { + if (_fields.get(i).equals(field)) + return true; + } + return false; + } + public boolean contains(HttpHeader header, String value) { - for (int i=0;i0;) { - HttpField f=get(i); + HttpField f=_fields.get(i); if (f.getHeader()==header && f.contains(value)) return true; } @@ -137,9 +161,9 @@ public class HttpFields extends ArrayList public boolean contains(String name, String value) { - for (int i=0;i0;) { - HttpField f=get(i); + HttpField f=_fields.get(i); if (f.getName().equalsIgnoreCase(name) && f.contains(value)) return true; } @@ -149,9 +173,9 @@ public class HttpFields extends ArrayList public boolean containsKey(String name) { - for (int i=0;i0;) { - HttpField f=get(i); + HttpField f=_fields.get(i); if (f.getName().equalsIgnoreCase(name)) return true; } @@ -207,9 +231,9 @@ public class HttpFields extends ArrayList */ public Enumeration getValues(final String name) { - for (int i=0;i { if (field==null) { - while (i public void put(HttpField field) { boolean put=false; - for (int i=size();i-->0;) + for (int i=_fields.size();i-->0;) { - HttpField f=get(i); + HttpField f=_fields.get(i); if (f.isSameName(field)) { if (put) - remove(i); + _fields.remove(i); else { - set(i,field); + _fields.set(i,field); put=true; } } } if (!put) - add(field); + _fields.add(field); } /** @@ -385,7 +409,7 @@ public class HttpFields extends ArrayList return; HttpField field = new HttpField(name, value); - add(field); + _fields.add(field); } public void add(HttpHeader header, HttpHeaderValue value) throws IllegalArgumentException @@ -406,7 +430,7 @@ public class HttpFields extends ArrayList if (value == null) throw new IllegalArgumentException("null value"); HttpField field = new HttpField(header, value); - add(field); + _fields.add(field); } /** @@ -416,11 +440,11 @@ public class HttpFields extends ArrayList */ public HttpField remove(HttpHeader name) { - for (int i=size();i-->0;) + for (int i=_fields.size();i-->0;) { - HttpField f=get(i); + HttpField f=_fields.get(i); if (f.getHeader()==name) - return remove(i); + return _fields.remove(i); } return null; } @@ -432,11 +456,11 @@ public class HttpFields extends ArrayList */ public HttpField remove(String name) { - for (int i=size();i-->0;) + for (int i=_fields.size();i-->0;) { - HttpField f=get(i); + HttpField f=_fields.get(i); if (f.getName().equalsIgnoreCase(name)) - return remove(i); + return _fields.remove(i); } return null; } @@ -566,6 +590,16 @@ public class HttpFields extends ArrayList return e.toString(); } } + + public void clear() + { + _fields.clear(); + } + + public void add(HttpField field) + { + _fields.add(field); + } /** * Add fields from another HttpFields instance. Single valued fields are replaced, while all diff --git a/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/MetaData.java b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/MetaData.java index 1006d3a9740..be41545a11a 100644 --- a/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/MetaData.java +++ b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/MetaData.java @@ -67,7 +67,7 @@ public class MetaData implements Iterable return false; MetaData m = (MetaData)o; - List lm=m.getFields(); + HttpFields lm=m.getFields(); int s=0; for (HttpField field: this) { diff --git a/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HttpChannelOverHTTP2.java b/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HttpChannelOverHTTP2.java index bd23ace1fd6..9e74e4b6345 100644 --- a/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HttpChannelOverHTTP2.java +++ b/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HttpChannelOverHTTP2.java @@ -22,6 +22,7 @@ import java.nio.ByteBuffer; import java.util.List; import org.eclipse.jetty.http.HttpField; +import org.eclipse.jetty.http.HttpFields; import org.eclipse.jetty.http.HttpScheme; import org.eclipse.jetty.http.HttpURI; import org.eclipse.jetty.http.HttpVersion; @@ -77,10 +78,10 @@ public class HttpChannelOverHTTP2 extends HttpChannel parsedHostHeader(requestMetaData.getHost(), requestMetaData.getPort()); - List fields = requestMetaData.getFields(); + HttpFields fields = requestMetaData.getFields(); for (int i = 0; i < fields.size(); ++i) { - HttpField field = fields.get(i); + HttpField field = fields.getField(i); parsedHeader(field); }