}
// FIXME
- public abstract String getString();
-
+ //public abstract String getString();
+ public abstract String[] getHeaderNames();
public abstract String get(String s);
- public abstract java.util.Enumeration names();
public Headers set(String[] keyval) {
Headers ret = this;
return ret;
}
public Headers remove(String key) { return set(key, null); /* FIXME */ }
-
- public String getLowerCaseTrimmed(String s) {
- String ret = get(s);
- return ret==null ? null : ret.toLowerCase();
- }
-
+
public static class Original extends Headers {
private final Hash head = new Hash();
- private final Hash headModified = new Hash();
public int lines;
public final boolean mime;
private String raw;
- private StringFountain fountain;
+ private Fountain fountain;
+
+ //public String getString() { return raw; }
- public String getString() { return raw; }
public Stream getStream() { return fountain.getStream(); }
- public int getLength() { return fountain.getLength(); }
+ public long getLength() { return fountain.getLength(); }
public int getNumLines() { return fountain.getNumLines(); }
- public Stream getStreamWithCRLF() { return new Stream(raw+"\r\n"); }
+
public JS get(JS s) throws JSExn { return JSU.S(get(JSU.toString(s).toLowerCase())); }
- public java.util.Enumeration names() { return head.enumerateKeys(); }
-
+
+ public String[] getHeaderNames() { return (String[])head.dumpkeys(new String[head.size()]); }
public String get(String s) { return (String)head.get(s.toLowerCase()); }
+
public Original(Stream stream) throws Malformed { this(stream, false); }
public Original(Stream stream, boolean assumeMime) throws Malformed {
StringBuffer all = new StringBuffer();
if (s.indexOf(':') == -1) throw new Malformed("Header line does not contain colon: " + s);
key = s.substring(0, s.indexOf(':')).toLowerCase();
for(int i=0; i<key.length(); i++)
- if (key.charAt(i) < 33 || key.charAt(i) > 126)
- throw new Malformed("Header key \""+key+"\" contains invalid character \"" + key.charAt(i) + "\"");
+ if (key.charAt(i) < 33 || key.charAt(i) > 126) {
+ Log.error(null,all);
+ throw new Malformed("Header key \""+key+"\" contains invalid character \"" +
+ key.charAt(i) + "\" (0x"+Integer.toString(key.charAt(i), 16) +")");
+ }
String val = s.substring(s.indexOf(':') + 1).trim();
if (get(key) != null) val = get(key) + " " + val; // just append it to the previous one;
head.put(key, val);
}
this.raw = all.toString();
+ // FIXME: be more efficient here?
this.fountain = new Fountain.StringFountain(this.raw);
this.lines = lines;
this.mime = assumeMime | (get("mime-version") != null && get("mime-version").trim().equals("1.0"));