From dff9ab3384fb252c9ce43cf713c3202031b928ce Mon Sep 17 00:00:00 2001 From: adam Date: Sat, 17 Mar 2007 08:53:16 +0000 Subject: [PATCH] clean up Headers a bit darcs-hash:20070317085316-5007d-f97ecf7a16e9f471563ad660a3e7c049d406f1f0.gz --- src/org/ibex/mail/Headers.java | 35 +++++++++++++++++------------------ 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/src/org/ibex/mail/Headers.java b/src/org/ibex/mail/Headers.java index 6094c79..2225919 100644 --- a/src/org/ibex/mail/Headers.java +++ b/src/org/ibex/mail/Headers.java @@ -44,10 +44,9 @@ public abstract class Headers extends JS.Immutable implements Fountain { } // 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; @@ -56,29 +55,25 @@ public abstract class Headers extends JS.Immutable implements Fountain { 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(); @@ -96,13 +91,17 @@ public abstract class Headers extends JS.Immutable implements Fountain { 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 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")); -- 1.7.10.4