major revamp due to new Message constructors
[org.ibex.mail.git] / src / org / ibex / mail / Headers.java
index 2d2f2ba..c7813eb 100644 (file)
@@ -23,7 +23,9 @@ public class Headers extends JS.Immutable implements Fountain {
      *  values -- a null value deletes, non-null value replaces
      */
     public Headers(Headers old, String[] keyval) { this(old.updateHeaders(keyval), false); }
+    public Headers(String[] keyval)              { this(new Headers(), keyval); }
 
+    public Headers() { this(new String[0]); }
     public Headers(Fountain fountain) throws Malformed { this(fountain, false); }
     public Headers(Fountain fountain, boolean assumeMime) throws Malformed { this(extractEntries(fountain), assumeMime); }
 
@@ -76,6 +78,7 @@ public class Headers extends JS.Immutable implements Fountain {
         for(Entry e : entries) {
             String val = (String)head.get(e.key.toLowerCase());
             val = val==null ? e.val.trim() : val+" "+e.val.trim();  // introduce folding whitespace =(
+            // FEATURE
             //if (mime) k = Encode.RFC2047.decode(k);
             //if (mime) v = Encode.RFC2047.decode(v);
             head.put(e.key.toLowerCase(), val);
@@ -105,15 +108,15 @@ public class Headers extends JS.Immutable implements Fountain {
         ArrayList<Entry> entries = new ArrayList<Entry>();
         for(int i=0; i<this.entries.length; i++)
             entries.add(this.entries[i]);
-        for(int i=0; i<keyval.length; i+=2) {
+        OUTER: for(int i=0; i<keyval.length; i+=2) {
             for(int j=0; j<entries.size(); j++) {
                 Entry e = entries.get(j);
-                if (!e.key.toLowerCase().equals(keyval[i])) continue;
+                if (!e.key.toLowerCase().equals(keyval[i].toLowerCase())) continue;
                 if (keyval[i+1]==null)
                     entries.remove(j);
                 else
                     entries.set(j, new Entry(keyval[i], keyval[i+1]+"\r\n"));
-                break;
+                continue OUTER;
             }
             if (keyval[i+1]!=null)
                 entries.add(0, new Entry(keyval[i], keyval[i+1]+"\r\n"));
@@ -124,7 +127,8 @@ public class Headers extends JS.Immutable implements Fountain {
     // Helpers //////////////////////////////////////////////////////////////////////////////
 
     public static Stream skip(Stream stream) {
-        for(String s = stream.readln(); s!=null && s.length() > 0;) s = stream.readln();
+        for(String s = stream.readln(); s!=null && s.trim().length() > 0;)
+            s = stream.readln();
         return stream;
     }