anchor.diff:  
       io:format("test: parse/1 request - 9~n"),
       %% verify that we don't mess with line breaks in body
  -    {request, "INVITE", _, _,  Body9} = parse(Message9, none),
  +    BinBody9 = list_to_binary(Body9),
  +    {request, "INVITE", _, _, BinBody9} = parse(Message9, none),
   
       Message10 =
   	"INVITE sip:a@example.org SIP/2.0\n"
  
positive.code: 		       _ ->
  			   ""
  		   end,
  	    logger:log(debug, "Packet from ~s ~s:~n~s", [S, RStr, Packet])
      end,
      Packetfixed = siputil:linefix(Packet),
      case string:str(Packetfixed, "\n\n") of
  	0 ->
  	    {Packetfixed, ""};
  	Headerlen ->
  	    HeaderStr = string:substr(Packetfixed, 1, Headerlen),
  	    BodyStr = string:substr(Packetfixed, Headerlen + 2),
  	    {HeaderStr, BodyStr}
      end.
  
  %%--------------------------------------------------------------------
  %% Function: parseheader(Message)
  %%           Message = string()
  %% Descrip.: Parse from the start of a SIP message up to the header-
  %%           body separator. Return the first line as it was given to
  %%           us, and a created keylist of all the headers.
  %% Returns : {FirstLine, Header}
  %%           FirstLine = string()
  %%           Header    = keylist record()
  %%--------------------------------------------------------------------
  parseheader(Message) ->
      [FirstLine | Rest] = string:tokens(Message, "\n"),
      Parseheader = fun(Line) ->
  			  Index = string:chr(Line, $:),
  			  Name = string:strip(string:substr(Line, 1, Index - 1), right),
  			  Value = string:strip(string:substr(Line, Index + 1),
  					       left),
  			  Key = keylist:normalize(Name),
  			  {Key, Name, split_header_value(Key, Value)}
  		  end,
      Headerlist = lists:map(Parseheader, Rest),
      Header = keylist:from_list(Headerlist),
      {FirstLine, Header}.
  
  %%====================================================================
  %% Internal functions
  %%====================================================================
  
  %%--------------------------------------------------------------------
  %% Function: split_header_value(Key, Value)
  %%           Key   = string()
  %%           Value = string()
  %% Descrip.: Look at Key and decide whether Value is a header that
  %%           should be splitted on comma, or if it is in fact just a
  %%           single value that should be returned as a single list
  %%           element.
  %% Returns : ValueList, list() of string() or just [Value]
  %%--------------------------------------------------------------------
  split_header_value(_Key, []) ->
      [];
  split_header_value(Key, Value) ->
      case lists:member(Key, ['www-authenticate', authorization,
  			    'proxy-authenticate', 'proxy-authorization',
  			    date]) of
  	true ->
  	    %% Except the headers listed in RFC3261 7.3.1 and some other that needs
  	    %% to be excepted from standard header comma splitting
  	    [Value];
  	_ ->
  	    Res = sipheader:comma(Value),
  	    %% Remove leading and trailing white space
  	    lists:map(fun(V) ->
  			      string:strip(V)
  		      end, Res)
      end.
  
  %%--------------------------------------------------------------------
  %% Function: parse_firstline(FirstLine)
  
negative.code:     %% Verify Via's
      ["SIP/2.0/TCP two.example.org", "SIP/2.0/UDP one.example.org"] = keylist:fetch('via', Header2),
  
      Message3 = "INVITE sip:test@example.org   SIP/2.0\r\n",
  
      io:format("test: parse/1 request - 3~n"),
      %% Make sure we throw the right exception on extra spaces in Request-Line
      {error, invalid_sip_version} = (catch parse(Message3, none)),
  
      Message4 =
  	"INVITE sip:test@example.org SIP/2.0\r\n"
  	"Via:SIP/2.0/TLS four.example.org\r\n"
  	"Via     :     SIP/2.0/TCP three.example.org\r\n"
  	"Via     :SIP/2.0/TCP two.example.org,SIP/2.0/UDP one.example.org  \r\n"
  	"\r\n",
  
      %% Extra spaces and missing spaces
      io:format("test: parse/1 request - 4.1~n"),
      {request, "INVITE" , _, Header4, <<>>} = parse(Message4, none),
  
      %% verify the Via's
      io:format("test: parse/1 request - 4.2~n"),
      ["SIP/2.0/TLS four.example.org", "SIP/2.0/TCP three.example.org", "SIP/2.0/TCP two.example.org",
       "SIP/2.0/UDP one.example.org"] = keylist:fetch('via', Header4),
  
      Message5 =
  	"INVITE sip:test@example.org SIP/2.0\r\n"
  	"Via: SIP/2.0/TLS three.example.org,\r\n"
  	"	SIP/2.0/TCP two.example.org\r\n"
  	"v: SIP/2.0/UDP one.example.org\r\n"
  	"\r\n",
      io:format("test: parse/1 request - 5.1~n"),
      %% multiline Via
      {request, "INVITE" , _, Header5, <<>>} = parse(Message5, none),
  
      io:format("test: parse/1 request - 5.2~n"),
      %% verify the three Via's
      ["SIP/2.0/TLS three.example.org", "SIP/2.0/TCP two.example.org", "SIP/2.0/UDP one.example.org"] =
  	keylist:fetch('via', Header5),
  
      %% This is the '3.1.1.1  A short tortuous INVITE' from draft-ietf-sipping-torture-tests-04.txt,
      %% except the body which wasn't very special
      Message6 =
  	"INVITE sip:vivekg@chair-dnrc.example.com;unknownparam SIP/2.0\r\n"
  	"TO :\r\n"
  	" sip:vivekg@chair-dnrc.example.com ;   tag    = 1918181833n\r\n"
  