anchor.diff:  parse_userinfo(Userinfo) ->
       case string:tokens(Userinfo, ":") of
   	[User, Pass] ->
  -	    {User, Pass};
  +	    {unescape_user(User), Pass};
   	[User] ->
  -	    {User, none};
  +	    {unescape_user(User), none};
   	[] ->
   	    {none, none}
       end.
  
positive.code: -module(sipurl).
  -export([parse/1, parse_hostport/1, print/1, print_hostport/2]).
  
  parse("sip:" ++ URL) ->
  %    logger:log(debug, "url: ~p", [URL]),
  
negative.code: print({wildcard, Parameters}) ->
      "*" ++ print_parameters(Parameters);
  
  print(URL) when record(URL, sipurl), URL#sipurl.proto == undefined ->
      print(URL#sipurl{proto="sip"});
  
  print(URL) when record(URL, sipurl), URL#sipurl.user == none, URL#sipurl.pass == none ->
      URL#sipurl.proto ++ ":" ++ print_hostport(URL#sipurl.host, URL#sipurl.port) ++ print_parameters(URL#sipurl.param);
  
  print(URL) when record(URL, sipurl) ->
      URL#sipurl.proto ++ ":" ++ print_userinfo(URL#sipurl.user, URL#sipurl.pass) ++ "@" ++
  	print_hostport(URL#sipurl.host, URL#sipurl.port) ++
  	print_parameters(URL#sipurl.param).
  
  print_userinfo(User, none) ->
      escape_user(User);
  
  print_userinfo(User, Pass) ->
      escape_user(User) ++ ":" ++ Pass.
  
  print_hostport(Host, none) ->
      Host;
  