code: public void add(String name,String value)
          throws IllegalArgumentException
      {
          if (value==null)
              throw new IllegalArgumentException("null value");
          
          FieldInfo info=getFieldInfo(name);
          Field field=getField(info,false);
          Field last=null;
          if (field!=null)
          {
              while(field!=null && field._version==_version)
              {
                  last=field;
                  field=field._next;
              }
          }
  
          if (field!=null)    
              field.reset(value,_version);
          else
          {
              // create the field
              field=new Field(info,value,_version);
              
              // look for chain to add too
              if(last!=null)
              {
                  field._prev=last;
                  last._next=field;    
              }
              else if (info.hashCode()<_index.length)
                  _index[info.hashCode()]=_fields.size();
              
              _fields.add(field);
          }
      }
docs: Add to or set a field.
  If the field is allowed to have multiple values, add will add
  multiple headers of the same name.
  @param name the name of the field
  @param value the value of the field.
  @exception IllegalArgumentException If the name is a single
  valued field and already has a value.