[SR-Users] REGISTER with http_async_client?

Cyril Ramière cyril.ramiere at gmail.com
Mon Jan 31 09:40:43 CET 2022


Hi there,

Does anyone have a clue? I ran out of things to try and I'm stuck.

I tried the http client (non-async) with no luck, it does almost the same
thing (tmx module spitting a critical error), which is super weird.
If I remove the HTTP request everything works fine.

There should be a way to make the async http client work during a REGISTER
processing, has anyone successfully done that?

Regards

Le jeu. 27 janv. 2022 à 14:50, Cyril Ramière <cyril.ramiere at gmail.com> a
écrit :

> Hi there,
>
> I have a weird issue with kamailio (latest docker
> image kamailio-ci:5.5.2-alpine) and http_async_client.
>
> Before posting a lot of logs, let me describe what I want to achieve.
>
> I have a Kamailio and a SIP Phone.
>
> The SIP phone sends a REGISTER to kamailio, then in my routing block, I
> check if I have an Authorization header.
>
> Since I don't have an Authorization (first message), I
> use "www_challenge()".
> This replies to the SIP phone, and then the SIP phone sends a new REGISTER
> with the correct Authorization header.
>
> So far so good.
>
> Now, when I get the REGISTER with Authorization header, I want to ask an
> HTTP endpoint if this user is allowed to connect and check the password
> using http_async_query().
>
> The problem is that when the transaction resumes, the tmx module is
> unhappy and throws this error :
>
> 30(36) CRITICAL: tmx [t_var.c:546]: pv_get_tm_reply_code(): no picked
> branch (-1) for a final response in MODE_ONFAILURE
>
> And a 500 error is sent back to the sip phone.
> The AUTH_REPLY route is still called and I can use the $http* values.
>
> It seems that my AUTH_REPLY route is called but considered as a
> "failure_route"
>
> 19(27) exec: *** cfgtrace:dbg_cfg_trace(): failure_route=[AUTH_REPLY]
> c=[/etc/kamailio/kamailio.cfg] l=665 a=16 n=if
>
> 17(23) NOTICE: <script>: [AUTH_REPLY] FAILURE ROUTE
>
> If I remove the http_async_client and try with route(AUTH_REPLY) then it
> is considered as request_route (but this is not a solution since I need to
> do this http request)
>
> Do you see something that I am doing wrong or missing in my logic?
> Is pausing/resuming to use the async http client is allowed if I'm
> handling a REGISTER transaction?
>
> Here's a simplified version of my routing block (not far from reality):
>
> ##### SNIP
>
> request_route{
>
> route(AUTH);
>
>
> route[AUTH]{
>
>     if (is_method("REGISTER"){
>
>         if(no_auth_header){
>
>             www_challenge("$td","1");
>
>             exit;
>
>         }
>
>         else{
>
>             t_newtran();
>
>             http_async_query("http://xxx.xxx.xxx.xxx:9000/auth?foo=bar", "AUTH_REPLY");
>
>         }
>
>     }
>
> }
>
>
> route[AUTH_REPLY]{
>
>     xlog("L_INFO", "route[HTTP_REPLY]: status $http_rs\n");
>
>     if(t_is_failure_route()) {
>
>          xlog("L_NOTICE", "[AUTH_REPLY] FAILURE ROUTE \n\n");
>      }
>
> }
>
>
> }
>
> ##### END SNIP
>
>
> Best regards!
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.kamailio.org/pipermail/sr-users/attachments/20220131/2fab715b/attachment.htm>


More information about the sr-users mailing list