anchor.diff:  
   %% Internal functions
   
  +
  +%% @doc Get callback module from the process registry
  +%% Fail if callback is not set (wrong process is used)
  +%% @end
  +callback() ->
  +    case erlang:get(?CALLBACK) of
  +        undefined ->
  +            erlang:exit(wrong_process);
  +        Callback ->
  +            Callback
  +    end.
  +
  
positive.code: -spec handle_info(_, state()) -> {noreply, state()}.
  handle_info({response, #sip_response{} = Response, TxPid}, State) when is_pid(TxPid) ->
      % pass responses to UAC
      Callback = erlang:get(?CALLBACK),
      sip_ua_client:handle_response(Response, TxPid, Callback, State);
  
  handle_info({request, #sip_request{} = Request, _TxPid}, State) ->
      % this must be ACK (see RFC 6026), pass it to UAS
      Callback = erlang:get(?CALLBACK),
      sip_ua_server:handle_request(Request, Callback, State);
  handle_info({request, #sip_request{} = Request}, State) ->
      % pass requests to UAS
      Callback = erlang:get(?CALLBACK),
      sip_ua_server:handle_request(Request, Callback, State);
  
  handle_info({tx, TxPid, {error, Reason}}, State) ->
      % Transport error is reported by server transaction, pass to UAS
      Callback = erlang:get(?CALLBACK),
      sip_ua_server:handle_error(Reason, TxPid, Callback, State);
  
  handle_info({cancel_request, Id}, State) when is_reference(Id) ->
  
negative.code:     {noreply, State};
  
  handle_info(Info, State) ->
      Callback = callback(),
      Callback:handle_info(Info, State).
  
  %% @private
  