<div dir="ltr"><div dir="ltr">Hi Alex,</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Oct 13, 2022 at 3:48 PM Alex Balashov <<a href="mailto:abalashov@evaristesys.com">abalashov@evaristesys.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Since on the topic of tsilo:<br>
<br>
1. I watched Federico’s presentation on it from 2015, and his examples insinuate that it is necessary to store the index and label of a suspended transaction in some external vehicle, e.g. htable, for use with ts_append_to(). Why would one do this when it is possible to call ts_append() based on R-URI alone?<br></blockquote><div>I don't remember why exactly I used t_append_to in the presentation's example, probably because at the time the http_async_client module didn't exist and tsilo was used in conjunction with t_suspend/t_resume (which needs the transaction's index and label). Definitely ts_append() could have been used.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
2. The appropriate pattern of interaction between tsilo and http_async_client — which I imagine to be a rather common use-case — is rather unclear. <br>
<br>
If I use http_async_query() to call out to a PN service, with $http_req(suspend) = 1, what should happen to the current instance of SIP request processing?<br>
<br>
That is to say:<br>
<br>
request_route {<br>
   . . . <br>
<br>
   t_check_trans();<br>
<br>
   if(is_method(“REGISTER”)) {<br>
      . . . <br>
<br>
      save(“location”, “0x06”);<br>
<br>
      if(ts_append(“location”, “$tu”)) {<br>
         xlog(“success”);<br>
      }<br>
      return; <br>
   }<br>
<br>
   else if(is_method(“INVITE”)) {<br>
      # PN stuff.<br>
<br>
      ts_store(“$var(uri)”);<br>
<br>
      http_async_query(“<a href="http://url" rel="noreferrer" target="_blank">http://url</a>”, “PUSH_REPLY”);<br>
<br>
      return; # <— ???<br>
   }<br>
}<br>
<br>
route[HTTP_PUSH_REPLY] {<br>
   . . . <br>
<br>
    if(!t_relay()) <br>
       sl_reply_error();<br>
}</blockquote><div><br></div><div>I'm not sure I understand the question here :)</div><div>The transaction will be suspended (so the return won't be hit) and would be resumed in the http reply route.</div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"> <br></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
I should add that this proxy front-ends a registrar, but is not in itself a registrar. It contains a shadow registrar - hence the save() calls - in order to be able to take advantage of the ’tsilo’ module, given its dependency on registrar/usrloc. <br>
<br>
This leads to the difference that the gateway receives requests with RURIs that have already been resolved to a contact binding elsewhere, so there are no lookup() calls. How should this play into the http_async_client workflow?<br>
<br></blockquote><div><br></div><div>Again, I'm not sure to fully understand the scenario here but wouldn't calling ts_store("$tu") and then ts_append("location", "$tu") work for you?</div><div><br></div><div>Cheers,</div><div><br></div><div>Federico</div></div></div>