java-org.hwo/src/org/hwo/net/http/MessageHeaders.java

106 lines
2.2 KiB
Java

package org.hwo.net.http;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;
import org.hwo.StringHelper;
import org.hwo.io.StreamReader;
public class MessageHeaders {
private Hashtable<String, List<String>> headers;
public MessageHeaders()
{
headers = new Hashtable<String, List<String>>();
}
public void read(StreamReader reader) throws IOException
{
String line;
String headerName = null;
List<String> values = new ArrayList<String>();
while (true)
{
line = reader.readLine();
if ((line == null) || (line.length() == 0))
{
break;
} else if (line.charAt(0) <= 32)
{
String stripped = line.trim();
if (stripped.length() > 0)
{
values.add(stripped);
}
} else
{
int p = line.indexOf(':');
headerName = line.substring(0,p);
values = getHeaderValueList(headerName);
values.add(line.substring(p+1).trim());
}
}
}
private List<String> getHeaderValueList(String headerName)
{
List<String> values;
if (!headers.containsKey(headerName))
{
values = new ArrayList<String>();
headers.put(headerName, values);
System.err.println("New Header: " + headerName);
} else
{
values = headers.get(headerName);
System.err.println("Appending Header: " + headerName);
}
return values;
}
public void addHeader(String headerName,String headerValue)
{
}
public String getHeaderValue(String headerName)
{
String[] values = getHeaderValues(headerName);
if (values.length > 0)
return StringHelper.join(values, " ");
return null;
}
public String[] getHeaderValues(String headerName)
{
if (headers.containsKey(headerName))
{
return headers.get(headerName).toArray(new String[0]);
}
return new String[0];
}
public String[] getHeaderNames()
{
return headers.keySet().toArray(new String[0]);
}
public void setHeaderValue(String headerName,String headerValue)
{
List<String> values = new ArrayList<String>();
values.add(headerValue);
headers.put(headerName, values);
}
public void addHeaderValue(String headerName,String headerValue)
{
getHeaderValueList(headerName).add(headerValue);
}
}