@Ben Kaufman :  thanks, I will try that!

@Nick Digalaks : isn't that necessary to have a correct http async
transaction? the async_http module does make/need the TM module to be
loaded....and all examples I got for the async_http module had t_newtran()
method added prior to executing http request....

*Sérgio Charrua*



On Mon, Apr 8, 2024 at 6:20 PM Nick Digalakis <[email protected]> wrote:

> I didn't test this, but why are you calling t_newtran(); if you only want
> to send the 300 response?
>
> On Apr 8, 2024 18:12, Sergio Charrua via sr-users <
> [email protected]> wrote:
>
> Hi all!
>
>
> For testing purposes, while I am waiting for the ST/SH REST API to be
> available from other teams, I developed a small python REST API that
> returns a mockup of a JSON object with some of the required values.
> The kamailio script, completely stateless as I do not need to keep track
> of the sessions, iterates through one of the JSON branches and adds the
> destination URLs to the Contact header and replies a SIP 300 Multiple
> Choices.
> This works: the UAC does receive the SIP response with the Contacts , but
> it also receives a SIP 500 error message right after, and I can't figure
> out why. And i bet this is simple to solve....
> Any clue? I'm aware I'm not processing ACK messages, but the sl_send_reply
> 403 should do the trick right? ... at least while testing....
>
> Also, as this is a stateless script, is there another way of using async
> http or making http requests to a REST API without having to use TM Module?
>
> Thanks in advance.
>
> The kamailio script is has follows:
>
> #!KAMAILIO
> /* add API http timeout */
> #!define HTTP_API_TIMEOUT 5000
> #!define HTTP_API_ROUTING_ENDPOINT "http://some_python_rest_api/get_route";
> ### LOG Levels: 3=DBG, 2=INFO, 1=NOTICE, 0=WARN, -1=ERR
> debug=4
> log_stderror=no
> memdbg=5
> memlog=5
> log_facility=LOG_LOCAL0
> log_prefix="{$mt $hdr(CSeq) $ci} "
> /* number of SIP routing processes */
> children=2
> /* set paths to location of modules */
> loadmodule "tm.so"
> loadmodule "jsonrpcs.so"
> loadmodule "kex.so"
> loadmodule "corex.so"
> loadmodule "sl.so"
> loadmodule "db_mysql.so"
> loadmodule "rr.so"
> loadmodule "pv.so"
> loadmodule "maxfwd.so"
> loadmodule "ipops.so"
> loadmodule "textops.so"
> loadmodule "siputils.so"
> loadmodule "xlog.so"
> loadmodule "sanity.so"
> loadmodule "ctl.so"
> loadmodule "cfg_rpc.so"
> loadmodule "uac.so"
> loadmodule "counters.so"
> loadmodule "http_async_client.so"
> loadmodule "jansson.so"
> loadmodule "usrloc.so"
> /* listen addresses */
> listen=udp:10.20.0.2:5060
> listen=udp:10.20.0.2:5062
> advertised_address="10.20.0.2";
> # ----- http_async_client params -----
> modparam("http_async_client", "workers", HTTP_ASYNC_CLIENT_WORKERS)
> modparam("http_async_client", "connection_timeout", 2000)
> request_route {
>   #route(HANDLE_DMQ);
>   route(HANDLE_OPTIONS);
>   if (is_method("INVITE"))
>   {
>     xlog("L_INFO","MAIN - calling TO_CARRIER");
>     route(TO_CARRIER);
>     exit;
>   }
>   else{
>         sl_send_reply("401","UNAUTHORIZED");
>   }
> }
> route[TO_CARRIER]{
>         xlog("L_INFO","TO_CARRIER - calling RELAY_API");
>         route(RELAY_API);                   #Route relay
>         xlog("L_INFO","TO_CARRIER - return");
>         return;
> }
> # Relay request using the API (response)
> route[RELAY_API_RESPONSE] {
>     xlog("L_INFO","RELAY_API_RESPONSE - got response from REST API");
>         if ($http_ok==1 && $http_rs==200)
>         {
>                 xlog("L_INFO","RELAY_API_RESPONSE - HTTP RESPONSE:
> $http_rb\n");
>                 if (jansson_get("json", $http_rb, "$var(json)")) {
>                         xlog("L_INFO","RELAY_API_RESPONSE - JSON =
> $var(json)");
>                         $var(count) = 0;
>                         jansson_array_size("routes", $var(json),
> "$var(size)");
>                         xlog("L_INFO","RELAY_API_RESPONSE -
> jansson_array_size");
>
>
>                     while ( $var(count) < $var(size) ){
>
>
> jansson_get("routes[$var(count)].headers.to.uri", $var(rtjson), "$var(v)");
>
>                                 xlog("L_INFO","JSON - routes[$var(count)]
> - $var(v)");
>
>                                 #$(avp(mycontacts)[$var(count)]) =
> $avp(mycontacts) + $var(v) + "\r\n";
>
>                                 $avp(mycontacts) = $avp(mycontacts) +
> $var(v) + ";";
>
>
>
>                                 *append_to_reply("Contact: <" + $var(v)
> +">"+ "\r\n"); /*   ----  IS THERE A BETTER ?? ..... */*
>
>
>
>                                 $var(count) = $var(count) + 1;
>
>                         }
>
>
>                         xlog("L_INFO","RELAY_API_RESPONSE - RELAY");
>                         xlog("L_INFO","MAIN - calling REPLY_302");
>                         route(REPLY_302);
>                         return;
>                 }
>         }
>         send_reply(500, "API Not Available - http response = $http_rs
> $http_ok");
>         exit;
> }
> route[RELAY_API] {
>
>         xlog("L_INFO","RELAY_API - from_ip $si:$sp from_number $fU
> to_number $ru");
>         $http_req(all) = $null;
>         $http_req(suspend) = 1;
>         $http_req(timeout) = HTTP_API_TIMEOUT;
>         $http_req(method) = "POST";
>         $http_req(hdr) = "Content-Type: application/json";
>         jansson_set("string","from_ip",$si, "$var(http_routing_query)");
>         jansson_set("string","from_port",$sp, "$var(http_routing_query)");
>         jansson_set("string","from_number",$fU,
> "$var(http_routing_query)");
>         jansson_set("string","to_number",$ru , "$var(http_routing_query)");
>
>         xlog("L_INFO","RELAY_API - API ASYNC ROUTING REQUEST:
> $var(http_routing_query)\n");
>         $http_req(body) = $var(http_routing_query);
>         t_newtran();
>         http_async_query(HTTP_API_ROUTING_ENDPOINT, "RELAY_API_RESPONSE");
>         xlog("L_INFO","RELAY_API - Waiting for Response");
> }
> route[REPLY_302] {
>   # Sends a 300 Multiple Choices back to the proxy that requested the
> routing lookup
>   xlog("L_INFO","REPLY_302 - send reply");
>   sl_send_reply("300", "Multiple Choices");
>   xlog("L_INFO","REPLY_302 - exit");
>   exit;
> }
> route[HANDLE_OPTIONS]{
>         if(is_method("OPTIONS"))
>         {
>            sl_send_reply(200, "OK");
>            exit;
>         }
>         if ($fU=="ping")
>         {
>                 sl_send_reply("200","OK");
>                 exit;
>         }
> }
>
>
> SNGrep output:
> 1 - INVITE from UAC to Kamailio
>
> INVITE sip:[email protected] SIP/2.0
> Via: SIP/2.0/UDP 10.20.0.1:5063;branch=z9hG4bK58aa83f4
> Max-Forwards: 70
> From: "Anonymous" <sip:[email protected]:5063>;tag=as192b8891
> To: <sip:[email protected]>
> Contact: <sip:[email protected]:5063>
> Call-ID: [email protected]:5063
> CSeq: 102 INVITE
> User-Agent: SIPp
> Date: Mon, 08 Apr 2024 15:09:51 GMT
> Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO,
> PUBLISH, MESSAGE
> Supported: replaces, timer
> Content-Type: application/sdp
> Content-Length: 270
> v=0
> o=root 2021555890 2021555890 IN IP4 10.20.0.1
> s=SIPp
> c=IN IP4 10.20.0.1
> t=0 0
> m=audio 18422 RTP/AVP 8 0 101
> a=rtpmap:8 PCMA/8000
> a=rtpmap:0 PCMU/8000
> a=rtpmap:101 telephone-event/8000
> a=fmtp:101 0-16
> a=ptime:20
> a=maxptime:150
> a=sendrecv
>
>
> 2 - Reply from Kamailio to UAC
>
> SIP/2.0 100 trying -- your call is important to us
> Via: SIP/2.0/UDP 10.20.0.1:5063;branch=z9hG4bK58aa83f4
> From: "Anonymous" <sip:[email protected]:5063>;tag=as192b8891
> To: <sip:[email protected]>
> Call-ID: [email protected]:5063
> CSeq: 102 INVITE
> Server: kamailio (5.7.4 (x86_64/linux))
> Content-Length: 0
>
>
> 3 - SIP 300 Multiple Choices from Kamailio to UAC
>
> SIP/2.0 300 Multiple Choices
> Via: SIP/2.0/UDP 10.20.0.1:5063;branch=z9hG4bK58aa83f4
> From: "Anonymous" <sip:[email protected]:5063>;tag=as192b8891
> To: <sip:[email protected]
> >;tag=57c593265e21c2b70aea50cb414df9cd.32679ccd
> Call-ID: [email protected]:5063
> CSeq: 102 INVITE
> Contact: <sip:sip:[email protected][email protected]>
> Contact: <sip:+351sip:[email protected]@10.20.0.3>
> Server: kamailio (5.7.4 (x86_64/linux))
> Content-Length: 0
>
>
> 4 - SIP 500 from Kamailio to UAC
>
> SIP/2.0 500 I'm terribly sorry, server error occurred (1/TM)
> Via: SIP/2.0/UDP 10.20.0.1:5063;branch=z9hG4bK58aa83f4
> From: "Anonymous" <sip:[email protected]:5063>;tag=as192b8891
> To: <sip:[email protected]
> >;tag=4eb2322b7d2b68e6fc3168f503344c21-32679ccd
> Call-ID: [email protected]:5063
> CSeq: 102 INVITE
> Server: kamailio (5.7.4 (x86_64/linux))
> Content-Length: 0
>
>
> 5 - ACK from UAC to Kamailio
>
> ACK sip:[email protected] SIP/2.0
> Via: SIP/2.0/UDP 10.20.0.1:5063;branch=z9hG4bK58aa83f4
> Max-Forwards: 70
> From: "Anonymous" <sip:[email protected]:5063>;tag=as192b8891
> To: <sip:[email protected]
> >;tag=57c593265e21c2b70aea50cb414df9cd.32679ccd
> Contact: <sip:[email protected]:5063>
> Call-ID: [email protected]:5063
> CSeq: 102 ACK
> User-Agent: SIPp
> Content-Length: 0
>
>
> and continues with ACK and repeating SIP 500 above....
>
>
>
>
>
> *Sérgio Charrua*
>
> .
>
>
>
>
>
>
>
>
__________________________________________________________
Kamailio - Users Mailing List - Non Commercial Discussions
To unsubscribe send an email to [email protected]
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