Hi Masoud,
transactions in kamailio are either implicitly created when calling
t_relay() or explicitly created in the routing script calling t_newtran().
http_async_query() won't create the transaction if it doesn't already exist.

Cheers,

Federico

On Thu, May 2, 2024 at 8:58 AM Muborakshohi Masoud <masou...@mail.ru> wrote:

> Hello Federico!  thank you for your detailed answer!  Yes, I was already
> able to configure it and everything works fine.  The only thing that was
> not clear was why it is necessary to do t_newtran() before calling the
> http_async_query() method?  otherwise t_suspend() would throw an error.
>
> --
> Отправлено из Mail.ru для Android
> четверг, 02 мая 2024г., 11:08 +05:00 от Federico Cabiddu via sr-users
> sr-users@lists.kamailio.org:
>
> Hi,
> the presentation is from before http_async_client module was written so
> the example configuration does not apply straight once you add the http
> async request.
>
>
> if (is_method("INVITE")) {
> #Push notification
> route(SUSPEND);
> }
>
> You don't have to suspend the transaction here, http_async_query will do
> it for you if you have to send the push.
> I would rather do
> if (is_method("INVITE")) {
>     #Push notification
>     route(SENDPUSH);
> }
>
> In the SENDPUSH route suspend the transaction
> $http_req(suspend) = 1;
> Then in the HTTP_REPLY route process the return code and either suspend
> again the transaction or reply an error message:
>
> route[HTTP_REPLY] {
>    if ($http_ok && $http_rs == 200) {
>         route(SUSPEND);
>    } else if($http_rs == 415) {
>         send_reply("415", "The other party does not support video
> calling!");
>    } else {
>         xlog("L_ALERT", "route[HTTP_REPLY]: error $http_err)\n");
>         send_reply("500", "Server Error");
>    }
> }
>
> Hope this helps.
>
> Cheers,
>
> Federico
>
>
> On Sat, Apr 27, 2024 at 6:38PM Masud Muborakshohi via sr-users <
> sr-users@lists.kamailio.org> wrote:
>
> Thank you for quick response!
> But when I leave suspending enabled ($http_req(suspend) = 1, default) the
> call logic does not work, when after receiving a register (with id_index
> and id_label) from party B, the call should continue. I built this
> functionality based on your presentation
> https://www.voztovoice.org/sites/default/files/KamilioWorld2015%20-Federico.Cabiddu-TSILO.pdf
> .
> I’ll give you my routes so that the picture is complete:
> request_route {
>         ...
>         if (is_method("INVITE")) {
>                 #Push notification
>                 route(SUSPEND);
>         }
>     ...
> }
>
> # Handle SIP registrations
> route[REGISTRAR] {
>         if (!is_method("REGISTER")) return;
>         ...
>         if (!save("location")) {
>                 sl_reply_error();
>         }
>         ...
>         #Push notification
>         if ( (is_method("REGISTER")) && (($hdr(Expires) != "0") ||
> !(($hdr(Contact) =~ "expires=0"))) && ($hdr(id_index) != "" &&
> $hdr(id_label) != "") ) {
>                 xlog("L_INFO", "New $rm ru=$ru tu=$tu \n");
>                 route(JOIN);
>         }
>
>         exit;
> }
>
> #Push notification
> route[SUSPEND] {
>         if(!t_is_set("failure_route")) t_on_failure("MANAGE_FAILURE");
>         send_reply("100", "Suspending");
>         if ( !t_suspend() )
>         {
>                 xlog("L_ERROR","[SUSPEND]  failed suspending trasaction
> [$T(id_index):$T(id_label)]\n");
>                 send_reply("501", "Suspending error");
>                 exit;
>         }
>         xlog("L_INFO","[SUSPEND]  suspended transaction
> [$T(id_index):$T(id_label)] $fU=> $rU\n");
>         $sht(vtp=>join::$rU) = "" + $T(id_index) + ":" + $T(id_label);
>         route(SENDPUSH);
>         exit;
>
> }
>
> route[SENDPUSH] {
>         sl_send_reply("100", "Pushing");
>         $http_req(suspend) = 0;
>         $http_req(body) = '{ "caller": "' + $fU + '", "phone": "' + $rU +
> '", "id_index": "' + $T(id_index) + '", "id_label": "' + $T(id_label)+ '",
> "call_type": "'+ $var(calltype) +'" }';
>         #for apple sandbox test.
>         if (is_user_in("Request-URI", "test")) {
>                 http_async_query("http://127.0.0.1:9996/notification/";,
> "HTTP_REPLY");
>         }
>         http_async_query("http://127.0.0.1:9999/notification/";,
> "HTTP_REPLY");
> }
>
> #Resuming transaction.
> route[JOIN] {
>         xlog("L_INFO","[JOIN] from REGISTER key value [$hdr(id_index)
>  --   $hdr(id_label)]\n");
>         $var(hjoin) = 0;
>         lock("$tU");
>         $var(hjoin) = $sht(vtp=>join::$tU);
>         $var(hstored) = $sht(vtp=>stored::$tU);
>         $sht(vtp=>join::$tU) = $null;
>         $var(id_index) = $(var(hjoin){s.select,0,:}{s.int});
>         $var(id_label) = $(var(hjoin){s.select,1,:}{s.int});
>         unlock("$tU");
>         if($var(id_index)!=$null){
>                 if ($var(hjoin)==0)
>                 {
>                         xlog("L_INFO","do ts_append_to() for $tu and
> hstored = $var(hstored)\n");
>                         if ($var(hstored))
>                         {
>                                 ts_append_to("$(hdr(id_index){s.int})",
> "$(hdr(id_label){s.int})", "location");
>                                 xlog("L_INFO","do ts_append_to() for $tu
> end \n");
>                         }
>                         return;
>                 }
>                 xlog("L_INFO","resuming trasaction [$(hdr(id_index){s.int
> }):$(hdr(id_label){s.int})] $tU ($var(hjoin))\n");
>                 if ( !t_continue("$(hdr(id_index){s.int})",
> "$(hdr(id_label){s.int})", "LOCATION") ){
>                         send_reply("404", "CALL NOT FOUND");
>                 }
>         }
> }
>
> #processing HTTP responses
> route[HTTP_REPLY] {
>     if ($http_ok && $http_rs == 200) {
>         xlog("L_INFO", "route[HTTP_REPLY]: status $http_rs\n");
>         xlog("L_INFO", "route[HTTP_REPLY]: body   $http_rb\n");
>     } else if($http_rs == 415 || $http_rs == "415") {
>         xlog("L_ERR", "route[HTTP_REPLY]: caller: $fU phone: $ru error:
> $http_err)\n");
>                 sl_send_reply("415", "The other party does not support
> video calling!");
>     } else {
>                 xlog("L_ALERT", "route[HTTP_REPLY]: error  $http_err)\n");
>         }
>     #exit;
> }
> __________________________________________________________
> Kamailio - Users Mailing List - Non Commercial Discussions
> To unsubscribe send an email to sr-users-le...@lists.kamailio.org
> Important: keep the mailing list in the recipients, do not reply only to
> the sender!
> Edit mailing list options or unsubscribe:
>
> __________________________________________________________
> Kamailio - Users Mailing List - Non Commercial Discussions
> To unsubscribe send an email to sr-users-le...@lists.kamailio.org
> Important: keep the mailing list in the recipients, do not reply only to
> the sender!
> Edit mailing list options or unsubscribe:
>
>
__________________________________________________________
Kamailio - Users Mailing List - Non Commercial Discussions
To unsubscribe send an email to sr-users-le...@lists.kamailio.org
Important: keep the mailing list in the recipients, do not reply only to the 
sender!
Edit mailing list options or unsubscribe:

Reply via email to