<div><div dir="auto">Hello,</div><div dir="auto"><br></div><div dir="auto">I totally misunderstood your question, then.</div><div dir="auto"><br></div><div dir="auto">Still dialplan should be useful. Instead of matching the domain, match the $ru and send it where it is supposed to be registered based on the dispatcher id. </div><div dir="auto"><br></div><div dir="auto">If the user can only register on one fs, then you’re good for registers and conferences.</div><div dir="auto"><br></div><div dir="auto">If the user is allowed to use multiple fs, you need to devise some way of figuring out where the conference is taking place (maybe send the invite to all the fs The user is allowed to, if you get a not found for the dialed number (conference), send it to next one, eventually it will find the conference, if it exists.</div><div dir="auto"><br></div><div dir="auto">How I do it is I create the conference on fs with the first user, and instruct the second user (via wss and jsip as the user is logged into our web page) to call into the conference number and adding a header specifying the server id, so that the proxy doesn’t need to do any lookups. The proxy looks into the header, translates the header value into a IP address, and forward it to the fs server.</div><div dir="auto"><br></div><div dir="auto">Having the user register on fs when you have OpenSIPS/kamailio only complicates things, not to mention OpenSIPS can take A LOT more registers than fs ( on another setup I had around 8k users and eventually moved to Kamailio/OpenSIPS as a registrar, this increased considerably and OS/K was just fine, barely CPU usage). Your best bet is to create your necessary logic for registers on OS/K and use fs only for conferences.</div><div dir="auto"><br></div><div dir="auto">Hope that helps!</div><div dir="auto"><br></div><div dir="auto">David</div></div><div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, 6 Dec 2019 at 07:17, Matthias Kneer via Users <<a href="mailto:users@lists.opensips.org">users@lists.opensips.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;padding-left:1ex;border-left-color:rgb(204,204,204)">Thanks for your reply and the example, David.<br>
<br>
If I did understand your example correct, it basically solves the issue <br>
only for internal calls because of the match for ".*domain*"<br>
<br>
My main issue is the scenario where I do get a call from the PSTN. Those <br>
calls do not contain the corresponding FreeSWITCH domain of an <br>
extension, they do only contain the floating IP of my openSIPS systems <br>
and the external number which has being called. This means, that I can't <br>
match for the domain. This is how an INVITE from the PSTN looks like for me:<br>
<br>
INVITE <a href="http://sip:+49691234567@1.2.3.4:5060" rel="noreferrer" target="_blank">sip:+49691234567@1.2.3.4:5060</a> SIP/2.0<br>
Via: SIP/2.0/UDP 1.2.3.5:5060;branch=z9hG4bK06Ba5515bda5556f434<br>
From: <<a href="mailto:sip%3A%2B491751231231@1.2.3.5" target="_blank">sip:+491751231231@1.2.3.5</a>>;tag=gK06634aaa<br>
To: <<a href="mailto:sip%3A%2B49691234567@1.2.3.4" target="_blank">sip:+49691234567@1.2.3.4</a>><br>
Call-ID: <a href="mailto:1931912619_117228776@1.2.3.5" target="_blank">1931912619_117228776@1.2.3.5</a><br>
CSeq: 590408 INVITE<br>
[...]<br>
<br>
and this is how an internal INVITE looks for me:<br>
<br>
INVITE <a href="mailto:sip%3A567@customer1.sip.example.org" target="_blank">sip:567@customer1.sip.example.org</a>;transport=TCP SIP/2.0<br>
Via: SIP/2.0/TCP <br>
192.168.1.168:32396;branch=z9hG4bK-524287-1---62375638a60d1cee;rport<br>
Max-Forwards: 70<br>
Contact: <<a href="http://sip:789@1.2.2.3:34511" target="_blank">sip:789@1.2.2.3:34511</a>;transport=TCP><br>
To: <<a href="mailto:sip%3A567@customer1.sip.example.org" target="_blank">sip:567@customer1.sip.example.org</a>><br>
From: <<a href="mailto:sip%3A789@customer1.sip.example.org" target="_blank">sip:789@customer1.sip.example.org</a>;transport=TCP>;tag=1b546d48<br>
Call-ID: Yr7uhzwS-LFx5hKjB8In7g..<br>
CSeq: 1 INVITE<br>
[...]<br>
<br>
What I would need is the related domain within FreeSWITCH of the number <br>
+49691234567 so that it will then be sent to the same FS where this <br>
device has been registered with its internal extension / where the other <br>
conference calls have been sent to. But since the device registers with <br>
e.g. <a href="mailto:567@customer1.sip.example.org" target="_blank">567@customer1.sip.example.org</a> which does not directly relate to <br>
+<a href="mailto:49691234567@1.2.3.4" target="_blank">49691234567@1.2.3.4</a>, openSIPS is not aware of the FreeSWITCH where this <br>
device was registered / the other conference calls where sent to.<br>
<br>
A simple logic I was thinking about was something like this:<br>
<br>
$var(customdom) = $fd<br>
<br>
if ($rU=~"\+49691234.*") {<br>
   $var(customdom) = "<a href="http://customer1.sip.example.org" rel="noreferrer" target="_blank">customer1.sip.example.org</a>"<br>
}<br>
<br>
later backed by a database so that we not have to hardcode this into the <br>
routing logic. Would this also be something for the dialplan?<br>
<br>
Thanks,<br>
Matthias<br>
<br>
<br>
Am 05.12.2019 18:02, schrieb David Villasmil:<br>
> Hello<br>
> <br>
> Dialplan is perfect for this.<br>
> I did this on kamailio, but it's probably doable porting it.<br>
> <br>
> It would be something like:<br>
> <br>
> modparam("dialplan", "db_url", DBURL)<br>
> <br>
> ...<br>
> <br>
> route[DISPATCH] {<br>
> ...<br>
> # Get the attrs field for the matching domain, will store the result<br>
> in $var(dispatcher_id)<br>
>     dp_translate( "1", "$ru", "$var(dispatcher_id)" )<br>
> <br>
> # Select the group of fs nodes that we want this call to be sent to.<br>
>     if(!ds_select_dst("$var(dispatcher_id)", "4"))<br>
>     {<br>
>         xlog("[DISPATCH]: ds_select_dst FAILED!'\n");<br>
>         send_reply("404", "No destination");<br>
>         exit;<br>
>     }<br>
> <br>
>     xlog("L_DBG", "[DISPATCH]: going to <$ru> via <$du>\n");<br>
>     t_on_failure("RTF_DISPATCH");<br>
>     route(RELAY);<br>
> }<br>
> <br>
> Your dialplan table would look like this:<br>
> <br>
> +----+------+-----+----------+---------------------------+-----------+-----------+----------+-------+<br>
> | id | dpid | pr  | match_op | match_exp                 | match_len |<br>
> subst_exp | repl_exp | attrs |<br>
> +----+------+-----+----------+---------------------------+-----------+-----------+----------+-------+<br>
> | 37 |    1 | 100 |        1 | .*domain1*                |         0 |<br>
>           |          | 10    |<br>
> | 55 |    1 | 100 |        1 | .*domain2*                |         0 |<br>
>           |          | 30    |<br>
> | 56 |    1 | 100 |        1 | .*domain3*                |         0 |<br>
>           |          | 30    |<br>
> <br>
> and your dispatcher would look like you want to distribute your<br>
> traffic:<br>
> <br>
> +------+-------+-------------------------+-------+----------+----------------------------------+------------------+<br>
> | id   | setid | destination             | flags | priority | attrs<br>
>                         | description      |<br>
> +------+-------+-------------------------+-------+----------+----------------------------------+------------------+<br>
> | 3097 |    10 | sip:<a href="http://1.2.3.1:5080" rel="noreferrer" target="_blank">1.2.3.1:5080</a> [1]        |     0 |       10 |<br>
>  | server-01        |<br>
> | 3098 |    10 | sip:<a href="http://1.2.3.2:5080" rel="noreferrer" target="_blank">1.2.3.2:5080</a> [2]        |     0 |       10 |<br>
>  | server-02        |<br>
> | 3110 |    20 | sip:<a href="http://1.2.3.1:5080" rel="noreferrer" target="_blank">1.2.3.1:5080</a> [1]        |     0 |       10 |<br>
>  | server-01        |<br>
> | 3109 |    20 | sip:<a href="http://1.2.3.2:5080" rel="noreferrer" target="_blank">1.2.3.2:5080</a> [2]        |     0 |       10 |<br>
>  | server-02        |<br>
> | 3108 |    30 | sip:<a href="http://1.2.3.3:5080" rel="noreferrer" target="_blank">1.2.3.3:5080</a> [3]        |     0 |       10 |<br>
>  | server-03        |<br>
> <br>
> I hope that helps!<br>
> <br>
> David<br>
> <br>
> On Thu, 5 Dec 2019 at 15:01, Matthias Kneer via Users<br>
> <<a href="mailto:users@lists.opensips.org" target="_blank">users@lists.opensips.org</a>> wrote:<br>
> <br>
>> Hi list,<br>
>> <br>
>> I'm currently building a HA setup with 2 openSIPS 2.4 instances<br>
>> which do share a floating IP through keepalived. They are working as<br>
>> 1:1 mid_registrar, gateway to the PSTN and dispatcher for multiple<br>
>> FreeSWITCH instances. Those FreeSWITCH instances hold all accounts,<br>
>> domains and media services, they also do the RTP part.<br>
>> <br>
>> Since we are hosting multiple customers on the same FreeSWITCH<br>
>> instances, sperated through domains, we'd like to ensure that all<br>
>> registrations of a domain stay on the same FreeSWITCH as long this<br>
>> instance is reachable. We want this to ensure that conferences, call<br>
>> pickups and so on work reliable. It's not very important for us to<br>
>> distribute the load evenly since we have no high call / conference<br>
>> volume, the goal is more to have the setup as available as possible<br>
>> with some sort of loadbalancing and without having to take manual<br>
>> action if one of the FreeSWITCHes dies.<br>
>> <br>
>> To achieve this, our idea was to set modparam("dispatcher",<br>
>> "hash_pvar", "$fd") to use the from domain as source for hashing and<br>
>> call ds_select_dst with the alg "7":<br>
>> <br>
>> if (!ds_select_dst("2", "7"))<br>
>> {<br>
>> xlog("L_ERR", "$ci|end|no servers avaliable");<br>
>> sl_send_reply("480", "Temporarily Unavailable");<br>
>> exit;<br>
>> }<br>
>> <br>
>> This approach works fine as long as we use it for internal calls<br>
>> since those have the from / to domain part properly set. If a call<br>
>> arrives from the PSTN openSIPS has no knowledge about the relation<br>
>> of the external numbers and internal numbers / domains. Is there a<br>
>> smart way to properly route those external calls to the correct<br>
>> FreeSWITCH wihtout having openSIPS to access the FreeSWITCH database<br>
>> / duplicating the data into the openSIPS database or to run<br>
>> FreeSWITCH in active/standby mode?<br>
>> <br>
>> Best regards,<br>
>> Matthias<br>
>> _______________________________________________<br>
>> Users mailing list<br>
>> <a href="mailto:Users@lists.opensips.org" target="_blank">Users@lists.opensips.org</a><br>
>> <a href="http://lists.opensips.org/cgi-bin/mailman/listinfo/users" rel="noreferrer" target="_blank">http://lists.opensips.org/cgi-bin/mailman/listinfo/users</a><br>
> <br>
> <br>
> Links:<br>
> ------<br>
> [1] <a href="http://1.2.3.1:5080" rel="noreferrer" target="_blank">http://1.2.3.1:5080</a><br>
> [2] <a href="http://1.2.3.2:5080" rel="noreferrer" target="_blank">http://1.2.3.2:5080</a><br>
> [3] <a href="http://1.2.3.3:5080" rel="noreferrer" target="_blank">http://1.2.3.3:5080</a><br>
> _______________________________________________<br>
> Users mailing list<br>
> <a href="mailto:Users@lists.opensips.org" target="_blank">Users@lists.opensips.org</a><br>
> <a href="http://lists.opensips.org/cgi-bin/mailman/listinfo/users" rel="noreferrer" target="_blank">http://lists.opensips.org/cgi-bin/mailman/listinfo/users</a><br>
<br>
_______________________________________________<br>
Users mailing list<br>
<a href="mailto:Users@lists.opensips.org" target="_blank">Users@lists.opensips.org</a><br>
<a href="http://lists.opensips.org/cgi-bin/mailman/listinfo/users" rel="noreferrer" target="_blank">http://lists.opensips.org/cgi-bin/mailman/listinfo/users</a><br>
</blockquote></div></div>-- <br><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div>Regards,</div><div><br></div>David Villasmil<div>email: <a href="mailto:david.villasmil.work@gmail.com" target="_blank">david.villasmil.work@gmail.com</a></div><div>phone: +34669448337</div></div></div>