anchor.diff:  %%--------------------------------------------------------------------
   -export([
   	 split_fields/2,
  +	 split_quoted_string/1,
   	 parse_host/1,
   	 parse_hostport/1,
   	 is_alpha/1,
  
positive.code:     case catch sipparse_util:split_fields("@", $@) of
  	{error, _} -> ok;
  	_ -> throw({error, test_case_failed})
      end,
  
      %% parse_hostport/1
  
negative.code: %% still looking for separator
  split_fields([Char | FieldStrRest], Sep, FirstSegmentAcc) ->
      split_fields(FieldStrRest, Sep, [Char | FirstSegmentAcc]).
  
  %%--------------------------------------------------------------------
  %% Function: split_quoted_string(In)
  %%           In = string()
  %% Descrip.: Parse out a quoted string from In and return the quoted
  %%           part as First and the rest as Second.
  %% Returns : {ok, First, Second} | throw()
  %%           First = Second = string()
  %%--------------------------------------------------------------------
  split_quoted_string([34 | Rest]) ->	%% 34 is '"'
      split_quoted_string2(Rest, false, []);
  split_quoted_string(In) ->
      erlang:error(does_not_start_with_quote, [In]).
  
  split_quoted_string2([92 | T], _Escape=false, Res) ->	%% 92 is '\'
      %% escape-char, and Escape was false
      split_quoted_string2(T, true, [92 | Res]);	%% 92 is '\'
  split_quoted_string2([34 | T], _Escape=false, Res) ->	%% 34 is '"'
      %% found non-escaped quote, we are finished
      {ok, lists:reverse(Res), T};
  split_quoted_string2([H | T], _Escape, Res) ->
      %% not escape-char, and not end-quote
      split_quoted_string2(T, false, [H | Res]);
  split_quoted_string2([], Escape, Res) ->
      erlang:error(no_end_quote, [Escape, Res]).
  
  %%--------------------------------------------------------------------
  %% Function: parse_host(Host)
  