You said to handle the registrations inside a background process, how do you achieve that?

In fact I already tried to use the async framework and it wasn't working too, got the same error.

Inside my REGISTER handling route I do : 

<check for digest, if not provided -> challenge, if provided then go:>
async_task_route("AUTH_DOQUERY");


My AUTH_DOQUERY is:


route[AUTH_DOQUERY]{
    xlog("L_NOTICE", "[AUTH_DOQUERY] INIT \n\n");
    #I will put the http_client here, but since it is not working there is no need atm.
    route(AUTH_REPLY);
}


And it still manages to produce the same critical error when entering my AUTH_REPLY route :(
 

16(23) CRITICAL: tmx [t_var.c:546]: pv_get_tm_reply_code(): no picked branch (-1) for a final response in MODE_ONFAILURE 



Le jeu. 3 févr. 2022 à 10:29, Olle E. Johansson <oej@edvina.net> a écrit :


On 3 Feb 2022, at 09:54, Cyril Ramière <cyril.ramiere@gmail.com> wrote:

Hi Olle, 

I prefer not to use it since you rightly pointed out that it will block the thread during the request
Depends of course of your HTTP server… And the number of UDP/TCP listeners. It won’t block all listeners.
Since registrations are less time-critical, you could handle the request asynchronously in a background process and thus not block the listener which would lead to more or less the same as using http_asynch. Just fire up a large amount of background processes :-)

/O

Since a lot of sip phones will register & interact with kamailio it could seriously hurt the performance.

I will implement caching for sure regardless of the async/non-async-non-optimal solution, but I still hope that this issue will be solved.

Cheers,

Cyril

Le jeu. 3 févr. 2022 à 07:57, Olle E. Johansson <oej@edvina.net> a écrit :


On 2 Feb 2022, at 23:58, Cyril Ramière <cyril.ramiere@gmail.com> wrote:

Hi Karsten,

Thanks for the clue, unfortunately I can't use this module because the clients are "dumb" sip phones.

The goal of my implementation is to use our application API to handle the login.

The plan was that a sip phone sends a REGISTER, I ask the API endpoint if this user/password is ok to connect and allow/deny based on the reply and informations provided by the API.

Everything is relying on the fact that I can make my HTTP call when handling the REGISTER, sadly for me, it doesn't work and I still can't figure why.
Try http_client. I’ve used it a lot of time for authentication. It will block your thread while waiting for response, but you can handle some of those issues by caching secrets for a short time with htable.

/O

Cheers,

Cyril

Le mer. 2 févr. 2022 à 19:49, Karsten Horsmann <khorsmann@gmail.com> a écrit :
Hi Cyril,

This Kamailio module could imho do the same 



Cyril Ramière <cyril.ramiere@gmail.com> schrieb am Do., 27. Jan. 2022, 08:04:
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.

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");
}

}
##### END SNIP


Best regards!
__________________________________________________________
Kamailio - Users Mailing List - Non Commercial Discussions
  * sr-users@lists.kamailio.org
Important: keep the mailing list in the recipients, do not reply only to the sender!
Edit mailing list options or unsubscribe:
  * https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users
__________________________________________________________
Kamailio - Users Mailing List - Non Commercial Discussions
  * sr-users@lists.kamailio.org
Important: keep the mailing list in the recipients, do not reply only to the sender!
Edit mailing list options or unsubscribe:
  * https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users
__________________________________________________________
Kamailio - Users Mailing List - Non Commercial Discussions
 * sr-users@lists.kamailio.org
Important: keep the mailing list in the recipients, do not reply only to the sender!
Edit mailing list options or unsubscribe:
 * https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users

__________________________________________________________
Kamailio - Users Mailing List - Non Commercial Discussions
  * sr-users@lists.kamailio.org
Important: keep the mailing list in the recipients, do not reply only to the sender!
Edit mailing list options or unsubscribe:
  * https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users
__________________________________________________________
Kamailio - Users Mailing List - Non Commercial Discussions
 * sr-users@lists.kamailio.org
Important: keep the mailing list in the recipients, do not reply only to the sender!
Edit mailing list options or unsubscribe:
 * https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users

__________________________________________________________
Kamailio - Users Mailing List - Non Commercial Discussions
  * sr-users@lists.kamailio.org
Important: keep the mailing list in the recipients, do not reply only to the sender!
Edit mailing list options or unsubscribe:
  * https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users