anchor.diff:  %%--------------------------------------------------------------------
   
   %%
  -%% Time to quit, send a final response to server transaction and
  -%% cancel any running client transaction.
  +%% Time to quit.
   %%
   tick(State, Now) when is_record(State, state), Now >= State#state.endtime ->
  -    case client_transaction_alive(State) of
  -	true ->
  -	    gen_server:cast(State#state.clienthandler, {cancel, "sippipe decided to quit (timeout)"});
  -	_ -> true
  -    end,
  -    case transactionlayer:is_good_transaction(State#state.serverhandler) of
  -	true ->
  -	    transactionlayer:send_response_handler(State#state.serverhandler, 500, "No reachable destination");
  -	_ -> ok
  -    end,
  -    logger:log(error, "sippipe: Reached end time after ~p seconds", [State#state.timeout]),
  -    {quit, State#state{clienthandler=none, serverhandler=none, branch=none, dstlist=[]}};
  +    logger:log(error, "sippipe: Reached end time after ~p seconds, exiting.", [State#state.timeout]),
  +    {quit, State};
   
   %%
   %% Time to warn
   %%
   tick(State, Now) when is_record(State, state), Now >= State#state.warntime ->
       logger:log(error, "sippipe: Warning: pipe process still alive!~nClient handler : ~p, Server handler : ~p",
  -	       [State#state.clienthandler, State#state.serverhandler]),
  +	       [State#state.clienttransaction_pid, State#state.serverhandler]),
       {ok, State#state{warntime=Now + 60}};
   
   tick(State, _Now) ->
  
positive.code: %%--------------------------------------------------------------------
  %% Records
  %%--------------------------------------------------------------------
  -record(state, {branch,
  		serverhandler,
  		clienthandler,
  		request,
  		dstlist,
  		timeout,
  		starttime,
  		endtime,
  		warntime,
  		approxmsgsize
  	       }).
  
  %%====================================================================
  
negative.code: 		    logger:log(error, "sippipe: Failed resolving URI ~s : ~p", [sipurl:print(URI), Unknown]),
  		    resolve_if_necessary(T, ApproxMsgSize)
  	    end;
  	false ->
  	    logger:log(error, "sippipe: Skipping destination with invalid URI : ~p", [URI]),
  	    resolve_if_necessary(T, ApproxMsgSize)
      end;
  resolve_if_necessary([Dst | T], _ApproxMsgSize) when is_record(Dst, sipdst) ->
      [Dst | T].
  
  %%--------------------------------------------------------------------
  %% Function: cancel_transaction(State, Reason)
  %%           State  = state record()
  %%           Reason = string()
  %% Descrip.: Our server transaction has been cancelled. Signal the
  %%           client transaction. 
  %% Returns : NewState = state record()
  %%--------------------------------------------------------------------
  cancel_transaction(#state{cancelled=false}=State, Reason) when is_list(Reason) ->
      logger:log(debug, "sippipe: Original request has been cancelled, asking current "
  	       "client transaction handler (~p) to cancel, and answering "
  	       "'487 Request Cancelled' to original request",
  	       [State#state.clienttransaction_pid]),
      gen_server:cast(State#state.clienttransaction_pid, {cancel, Reason, []}),
      transactionlayer:send_response_handler(State#state.serverhandler, 487, "Request Cancelled"),
      State#state{cancelled=true};
  cancel_transaction(#state{cancelled=true}=State, Reason) when is_list(Reason) ->
      %% already cancelled
      State.
  
  %%====================================================================
  %% Startup functions
  