[OpenSIPS-Users] 3.1 - Mid_Registrar - AOR throttling with WebRTC failing

Stas Kobzar staskobzar at gmail.com
Fri Aug 21 13:56:42 EST 2020


Hello Mark,

In my case I do have a path in the location record. Here is my example from
"ul show" (I changed my real domain and IPs):
AOR:: 9170 at example.com
                Contact:: sip:suvp4v56 at 1p6pc0g6m3ml.invalid;transport=ws Q=
                        Expires:: 494
                        Callid:: i1tmiaipa3l2nvvhmairvu
                        Cseq:: 28
                        User-agent:: JsSIP 3.5.3
                        Path:: <sip:10.0.0.186:8060
;r2=on;lr>,<sip:10.0.0.186:8061;transport=wss;r2=on;lr;received=sip:
10.0.0.213:47326>
                        State:: CS_SYNC
                        Flags:: 0
                        Cflags::
                        Socket:: udp:10.0.0.185:5060
                        Methods:: 5503
                        SIP_instance::
<urn:uuid:6d815278-4885-4468-b07b-eca6ab80e2d4>

And here is my mysql location record:

mysql> select contact, path from locations where username =9170;
+------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------+
| contact                                        | path

                    |
+------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------+
| sip:suvp4v56 at 1p6pc0g6m3ml.invalid;transport=ws | <sip:199.182.135.186:8060
;r2=on;lr>,<sip:199.182.135.186:8061;transport=wss;r2=on;lr;received=sip:
107.179.246.213:47364> |
+------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------+

If you do not have "path" set in your case the problem is probably there.
My lookup is not mid_register but it is close to what you have. I only use
parameter "m" to lookup in memory.

On Fri, Aug 21, 2020 at 9:19 AM Mark Allen <mark at allenclan.co.uk> wrote:

> What am I looking for?
>
> INVITE from Asterisk to Opensips looks fine. Contact info from "location"
> matches that seen in console for web phone.
>
> Problem seems to be that the address is not recognised as a web socket
> rather than a host name. It's not NATed but tried fix_nated_register() and
> fix_nated_contact() but it made no difference.
>
> On Fri, 21 Aug 2020, 13:23 Slava Bendersky via Users, <
> users at lists.opensips.org> wrote:
>
>> Please check contact header.
>>
>> volga629
>>
>> ------------------------------
>> *From: *"Mark Allen" <mark at allenclan.co.uk>
>> *To: *"OpenSIPS users mailling list" <users at lists.opensips.org>
>> *Sent: *Friday, August 21, 2020 8:08:18 AM
>> *Subject: *Re: [OpenSIPS-Users] 3.1 - Mid_Registrar - AOR throttling
>> with        WebRTC failing
>>
>> I've not received any feedback on this regarding whether or not what I'm
>> doing should be working. Trying to find a workaround has just led to a
>> number of dead-ends. Can anyone please help me with this?
>> We are using mid-registrar with AOR Throttling talking to
>> Asterisk/FreePBX. We have OpenSIPS 3.1 running on Debian Buster. For SIP
>> phones, physical and softphones, connected on our LAN, all works fine.
>> Where we hit problems is with WebRTC phones.
>>
>> WebRTC phone registers via mid-registrar without a problem. However, a
>> call coming from Asterisk (e.g. extension --> extension) fails with an
>> error like:
>>
>>   476 Unresolvable destination
>>
>> ...and a syslog entry...
>>
>>   ERROR:core:sip_resolvehost: forced proto 6 not matching sips uri
>>   CRITICAL:core:mk_proxy: could not resolve hostname:
>> "cfdtugr3cntl.invalid"
>>   ERROR:tm:uri2proxy: bad host name in URI
>> <sips:11023 at cfdtugr3cntl.invalid;rtcweb-breaker=yes;transport=wss>
>>   ERROR:tm:t_forward_nonack: failure to add branches
>>
>> We can get calls to WebRTC from Asterisk working via OpenSIPS if we are
>> only using registration throttling. As this establishes a 1:1 relationship,
>> by using add_path_received() we get Asterisk to include a Route which
>> bypasses the resolvehost problem. However, with multiple endpoints
>> registered to a single OpenSIPS AOR with AOR throttling, this workaround
>> obviously won't work. How can I set up OpenSIPS so that we can have
>> multiple endpoints, including WebRTC ones, registered to a single OpenSIPS
>> AOR and have calls successfully reach the WebRTC phones?
>>
>>
>>
>>
>>
>>
>>
>>
>> On Mon, 3 Aug 2020 at 08:44, Mark Allen <mark at allenclan.co.uk> wrote:
>>
>>> I don't know if anyone has had a chance to look at my problem but I
>>> wonder if at least I could get an opinion on the following:
>>> 1 - Should I be seeing the path saved in the appropriate column in the
>>> "location" table?
>>> 2 - Am I using mid_registrar_save() and mid_registrar_lookup() with path
>>> support correctly in my script?
>>> 3 - have I correctly understood how to combine WebRTC with mid-registrar
>>> module, path, and AOR throttling so that it should work for calls
>>> originating from the main registrar?
>>>
>>> I'm stuck on how to move forward with this
>>>
>>> Cheers,
>>>
>>> Mark
>>>
>>> Relevant code snippets...
>>>
>>> loadmodule "mid_registrar.so"
>>> modparam("mid_registrar", "mode", 2) /* 0 = mirror / 1 = ct / 2 = AoR */
>>> modparam("mid_registrar", "outgoing_expires", 3600)
>>>
>>> add_path_received();
>>> $avp(returncode) = mid_registrar_save("location","p0v");
>>> switch ($avp(returncode)) {
>>>     case 1:
>>>         route(resolve_registrar);
>>>         $ru = "sip:" + $avp(main_registrar) + ":5060";
>>>         t_on_failure("1");
>>>         t_relay();
>>>         break;
>>>     case 2:
>>>         break;
>>>     default:
>>> }
>>>
>>> if (!mid_registrar_lookup("location")) {
>>>     t_reply(404, "Not Found");
>>>     exit;
>>> }
>>>
>>>
>>> NB - route(resolve_registrar) sets the variable $avp(main_registrar) to
>>> the IP address of the Asterisk server
>>>
>>> On Thu, 30 Jul 2020 at 09:16, Mark Allen <mark at allenclan.co.uk> wrote:
>>>
>>>> We are working on a test setup, hoping to move to a production system
>>>> in mid-August. We want to use mid-registrar AOR throttling. Users will
>>>> connect through OpenSIPS using a combination of SIP and WebRTC endpoints,
>>>> registering to an extension on an Asterisk main-registrar...
>>>>
>>>>               +----------+
>>>> <SIP>    ---> |          |      +----------+
>>>> <SIP>    ---> | OpenSIPS | ---> | Asterisk |
>>>> <WebRTC> ---> |          |      +----------+
>>>>               +----------+
>>>>
>>>> Multiple SIP phones (hardware or softphones) registering via an
>>>> OpenSIPS 3.1 mid_registration AOR is working fine. A call to the extension
>>>> number on Asterisk results in all mid-registered SIP extensions ringing and
>>>> when one answers, the other devices register a missed call. So far, so good.
>>>>
>>>> With 3.0 - we had a problem with WebRTC "phones" (even when just using
>>>> mid_registrar in "mirroring" mode). Webphone could register and call other
>>>> phones without a problem. However, calls to the WebPhone failed - there was
>>>> a problem with the WebSocket addressing giving "476 Unresolvable
>>>> destination" when the call originates from the main registrar - e.g. one
>>>> extension calling another. The /var/log/syslog entry said...
>>>>
>>>>   ERROR:core:sip_resolvehost: forced proto 6 not matching sips uri
>>>>   CRITICAL:core:mk_proxy: could not resolve hostname:
>>>> "4xp44jxl0qq0.invalid"
>>>>   ERROR:tm:uri2proxy: bad host name in URI <sips:11001 at
>>>> 4xp44jxl0qq0.invalid;rtcweb-breaker=yes;transport=wss>
>>>>   ERROR:tm:t_forward_nonack: failure to add branches
>>>>
>>>> Stas Kobar gave me a way to resolve this -
>>>> http://lists.opensips.org/pipermail/users/2020-July/043443.html  As we
>>>> were using 3.0, I used the "path" module and  "add_path_received()" to
>>>> handle this for WebRTC. This worked for a single device registered to an
>>>> address. However, as far as I could see, using "path" effectively bypassed
>>>> the "contact" address held in the OpenSIPS "location" table so it didn't
>>>> work for AOR throttling.
>>>>
>>>> I was hoping that, with mid_registrar on 3.1 baking in path support, I
>>>> could just use "mid_registrar_save('location','p0v')" to store the WebRTC
>>>> destination path in the "location" table. Then, with a call to the WebRTC
>>>> endpoint from the main registrar, "mid_registrar_lookup('location')" would
>>>> use the stored path from the "location" table to send traffic on to the
>>>> WebRTC phone and it would work fine with AOR throttling. However, that's
>>>> not happening, and looking at the "location" table, no path seems to
>>>> be being stored.
>>>>
>>>> If I register a WebRTC "phone" first, the path is included on the
>>>> registration SIP message sent from OpenSIPS to Asterisk. If I then register
>>>> additional SIP phones on OpenSIPS, AOR throttling works, because, when the
>>>> call originates from Asterisk it includes the "route" HF that points to the
>>>> WebRTC destination. However, if a SIP phone registers first, Asterisk
>>>> doesn't get the WebRTC path, so calls fail to reach the WebRTC destination
>>>> because it tries to use the first registered SIP phone's path.
>>>>
>>>> So - 2 questions really...
>>>>
>>>> 1 - Can I use AOR throttling with WebRTC (I can't guarantee that the
>>>> WebRTC endpoint will be the first to register or that there will only be
>>>> one WebRTC endpoint)
>>>>
>>>> 2 - If the answer to 1 is yes, what am I doing wrong?
>>>>
>>>> Relevant code snippets...
>>>>
>>>> loadmodule "mid_registrar.so"
>>>> modparam("mid_registrar", "mode", 2) /* 0 = mirror / 1 = ct / 2 = AoR */
>>>> modparam("mid_registrar", "outgoing_expires", 3600)
>>>>
>>>> add_path_received();
>>>> $avp(returncode) = mid_registrar_save("location","p0v");
>>>> switch ($avp(returncode)) {
>>>>     case 1:
>>>>         route(resolve_registrar);
>>>>         $ru = "sip:" + $avp(main_registrar) + ":5060";
>>>>         t_on_failure("1");
>>>>         t_relay();
>>>>         break;
>>>>     case 2:
>>>>         break;
>>>>     default:
>>>> }
>>>>
>>>> if (!mid_registrar_lookup("location")) {
>>>>     t_reply(404, "Not Found");
>>>>     exit;
>>>> }
>>>>
>>>>
>>>> NB - route(resolve_registrar) sets the variable $avp(main_registrar) to
>>>> the IP address of the Asterisk server
>>>>
>>>
>> _______________________________________________
>> Users mailing list
>> Users at lists.opensips.org
>> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>> _______________________________________________
>> Users mailing list
>> Users at lists.opensips.org
>> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>>
> _______________________________________________
> Users mailing list
> Users at lists.opensips.org
> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.opensips.org/pipermail/users/attachments/20200821/2d55ed1b/attachment-0001.html>


More information about the Users mailing list