revert httpfields

This commit is contained in:
Greg Wilkins 2014-06-11 17:41:52 +02:00
parent f258ff1565
commit 1666f54b50
3 changed files with 71 additions and 36 deletions

View File

@ -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;
* <p>The cookie handling provided by this class is guided by the Servlet specification and RFC6265.
*
*/
public class HttpFields extends ArrayList<HttpField>
public class HttpFields implements Iterable<HttpField>
{
private static final long serialVersionUID = 1L;
private static final Logger LOG = Log.getLogger(HttpFields.class);
public final static String __separators = ", \t";
final List<HttpField> _fields;
/**
* Constructor.
*/
public HttpFields()
{
_fields=new ArrayList<>();
}
/**
@ -66,7 +69,18 @@ public class HttpFields extends ArrayList<HttpField>
*/
public HttpFields(int capacity)
{
super(capacity);
_fields=new ArrayList<>(capacity);
}
public int size()
{
return _fields.size();
}
@Override
public Iterator<HttpField> iterator()
{
return _fields.iterator();
}
/**
@ -74,7 +88,7 @@ public class HttpFields extends ArrayList<HttpField>
*/
public Collection<String> getFieldNamesCollection()
{
final Set<String> list = new HashSet<>(size());
final Set<String> list = new HashSet<>(_fields.size());
for (HttpField f : this)
{
if (f!=null)
@ -99,14 +113,14 @@ public class HttpFields extends ArrayList<HttpField>
*/
public HttpField getField(int i)
{
return get(i);
return _fields.get(i);
}
public HttpField getField(HttpHeader header)
{
for (int i=0;i<size();i++)
for (int i=0;i<_fields.size();i++)
{
HttpField f=get(i);
HttpField f=_fields.get(i);
if (f.getHeader()==header)
return f;
}
@ -115,20 +129,30 @@ public class HttpFields extends ArrayList<HttpField>
public HttpField getField(String name)
{
for (int i=0;i<size();i++)
for (int i=0;i<_fields.size();i++)
{
HttpField f=get(i);
HttpField f=_fields.get(i);
if (f.getName().equalsIgnoreCase(name))
return f;
}
return null;
}
public boolean contains(HttpField field)
{
for (int i=_fields.size();i-->0;)
{
if (_fields.get(i).equals(field))
return true;
}
return false;
}
public boolean contains(HttpHeader header, String value)
{
for (int i=0;i<size();i++)
for (int i=_fields.size();i-->0;)
{
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<HttpField>
public boolean contains(String name, String value)
{
for (int i=0;i<size();i++)
for (int i=_fields.size();i-->0;)
{
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<HttpField>
public boolean containsKey(String name)
{
for (int i=0;i<size();i++)
for (int i=_fields.size();i-->0;)
{
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<HttpField>
*/
public Enumeration<String> getValues(final String name)
{
for (int i=0;i<size();i++)
for (int i=0;i<_fields.size();i++)
{
final HttpField f = get(i);
final HttpField f = _fields.get(i);
if (f.getName().equalsIgnoreCase(name) && f.getValue()!=null)
{
@ -224,9 +248,9 @@ public class HttpFields extends ArrayList<HttpField>
{
if (field==null)
{
while (i<size())
while (i<_fields.size())
{
field=get(i++);
field=_fields.get(i++);
if (field.getName().equalsIgnoreCase(name) && field.getValue()!=null)
return true;
}
@ -305,22 +329,22 @@ public class HttpFields extends ArrayList<HttpField>
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<HttpField>
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<HttpField>
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<HttpField>
*/
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<HttpField>
*/
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<HttpField>
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

View File

@ -67,7 +67,7 @@ public class MetaData implements Iterable<HttpField>
return false;
MetaData m = (MetaData)o;
List<HttpField> lm=m.getFields();
HttpFields lm=m.getFields();
int s=0;
for (HttpField field: this)
{

View File

@ -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<ByteBufferCallback>
parsedHostHeader(requestMetaData.getHost(), requestMetaData.getPort());
List<HttpField> 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);
}