[OpenSIPS-Users] Parallel forking - use mid_registrar module question
John Doe
xxxxxxxx at gmail.com
Mon Feb 26 05:17:41 EST 2018
In addition to this last email, this is now working.
Changes made:
- upgraded to Opensips 2.4-dev
The mid_registrar module now works as expected with parallel forking.
A bit more work yet, but much better result.
Thank you
On Fri, Feb 23, 2018 at 9:35 AM, John Doe <xxxxxxx at gmail.com> wrote:
> I have been using Opensips now for a few years, and in the last month or
> so I needed to use Opensips for another application.
>
>
> We need to put Opensips in front of our Asterisk servers to handle better
> the register, notify, invite and subscribe messages (basically the SIP
> messaging).
>
> My goal initially, is to have Opensips as a transparent SIP proxy for
> this.
>
> I have already got this working mostly using the mid_registrar module -
> just been looking at it further.
>
> I can send and receive calls from a device that is using the proxy and the
> SIP is sent to the main registrar (the asterisk).
>
> The audio works fine since at this stage I am using the RTP on the
> asterisk.
>
>
> The issue I need to solve is multiple registered devices being able to be
> called when a user on asterisk makes a call. Outbound calls from the
> extension via the proxy work with no issue. Also the notify (BLF) works ok.
>
> I am working on how to get the branch/forking working correctly and the
> single call to ring all the contacts in that have "registered" via the
> mid_registrar.
> I have been trying the AOR for in the mid_registrar request, and then
> using mid_registrar_lookup but not having much success.
> I am using opensips 2.3.3. After some reading yesterday, there was
> suggestion to move to opensips 2.4 branch
> I thought I would post here before proceeding too much further in case I
> am missing something else.
>
>
>
> What is working:
>
> - I can make a call from a phone that is registered to the main registrar
> fyi the proxy to an external number (handled by the main registrar)
>
> - I can make a call between phones that are registered to the main
> registrar fyi the proxy or that are registered directly to the main
> registrar
>
> - I can see the BLF/Notify and subscribe messages working from the main
> registrar correctly
>
>
> Questions:
>
> - Some of the registered devices may be behind NAT and some may be on
> Public IPs. How do I best cater for this?
>
>
> What I need to work:
>
> - When a phone, or incoming call from the main registrar to the proxy
> occurs, I need the proxy to ring all phones that are registered through it.
>
>
> Here are some technical details:
>
> version: opensips 2.3.3 (x86_64/linux)
> flags: STATS: On, DISABLE_NAGLE, USE_MCAST, SHM_MMAP, PKG_MALLOC,
> F_MALLOC, FAST_LOCK-ADAPTIVE_WAIT
> ADAPTIVE_WAIT_LOOPS=1024, MAX_RECV_BUFFER_SIZE 262144, MAX_LISTEN 16,
> MAX_URI_SIZE 1024, BUF_SIZE 65535
> poll method support: poll, epoll_lt, epoll_et, sigio_rt, select.
> main.c compiled on 00:04:06 Jan 19 2018 with gcc 4.4.7
>
>
> From my opensips.cfg
>
>
> I have some other modules loaded -but here is the mid_registrar section:
>
> loadmodule "mid_registrar.so"
> modparam("mid_registrar", "mode", 1) /* 0 = mirror / 1 = ct / 2 = AoR */
> modparam("mid_registrar", "outgoing_expires", 900)
> modparam("mid_registrar", "insertion_mode", 1) /* 0 = contact; 1 = path */
> modparam("mid_registrar", "received_avp", "$avp(rcv)")
> modparam("mid_registrar", "contact_match_param", "regid")
> modparam("mid_registrar", "max_contacts", 4)
> modparam("mid_registrar", "tcp_persistent_flag", 10)
> modparam("mid_registrar", "outgoing_expires", 900)
>
>
> Snippet from my routing section:
>
> if (is_method("REGISTER")) {
> #fix_nated_register();
> xlog("L_INFO","Saving location to mid_registrar");
> mid_registrar_save("location");
> switch ($retcode) {
> case 1:
> xlog("forwarding REGISTER to main registrar ($$ci=$ci)\n");
> $ru = "sip:x.x.x.x:5060";
> t_relay();
> break;
> case 2:
> xlog("absorbing REGISTER! ($$ci=$ci)\n");
> break;
> default:
> xlog("failed to save registration! ($$ci=$ci)\n");
> }
> exit;
> }
>
>
> remove_hf("Route");
> # record routing
> if (is_method("INVITE|REFER|SUBSCRIBE|NOTIFY"))
> record_route();
>
> # account only INVITEs
> if (is_method("INVITE")) {
> do_accounting("log");
> xlog("L_INFO", "[LOG] INVITE PACKET [rm:$rm] [fu:$fu] [ou:$ou]
> [ru:$ru] [si:$si]");
> }
>
>
> # initial requests from main registrar, need to look them up!
> if (is_method("INVITE|MESSAGE") && $si == "<proxy server public IP>"
> && $sp == 5060) {
> xlog("looking up $ru!\n");
> fix_nated_register();
> if (!mid_registrar_lookup("location")) {
> xlog("looked up main registrar - not found");
> t_reply("404", "Not Found");
> exit;
> }
> xlog("L_INFO","MYLOG INVITE mid_registrar after looking up $ru
> $ci");
> t_relay();
> exit;
> }
>
>
>
>
> route[relay] {
>
> # for INVITEs enable some additional helper routes
> if (is_method("INVITE|NOTIFY|SUBSCRIBE|PUBLISH")) {
> fix_nated_contact();
> t_on_branch("per_branch_ops");
> t_on_reply("handle_nat");
> t_on_failure("missed_call");
> }
>
> if (!t_relay()) {
> send_reply("500","Internal Error");
> };
> exit;
> }
>
>
> branch_route[per_branch_ops] {
> xlog("new branch at $ru\n");
> }
>
>
> onreply_route[handle_nat] {
> if (nat_uac_test("1")) {
> xlog("FIXING THE NAT!");
> fix_nated_contact();
> }
> xlog("incoming reply\n");
> }
>
>
> failure_route[missed_call] {
> if (t_was_cancelled()) {
> exit;
> }
>
> # uncomment the following lines if you want to block client
> # redirect based on 3xx replies.
> ##if (t_check_status("3[0-9][0-9]")) {
> ##t_reply("404","Not found");
> ## exit;
> ##}
>
> }
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.opensips.org/pipermail/users/attachments/20180226/90b58351/attachment-0001.html>
More information about the Users
mailing list