So, my final configuration is:

One domain with AWS Route53 same weight configuration: 50% server1 and 50% server2

The user register over the domain.

Two Kamailio Servers with DMQ and DMQ_USRLOC modules configured; 1.2.3.4 first server IP and 5.6.7.8 second server IP

Most important configurations *Server1*:

/*listen=udp:1.2.3.4:5060
listen=udp:1.2.3.4:5222*/

/*# ---- dmq params ----
modparam("dmq", "server_address", "sip:1.2.3.4")
modparam("dmq", "notification_address", "sip:5.6.7.8")
modparam("dmq", "multi_notify", 0)
modparam("dmq", "num_workers", 4)
modparam("dmq", "ping_interval", 30)

# ---- dmq_usrloc params ----
modparam("dmq_usrloc", "enable", 1)
modparam("dmq_usrloc", "sync", 1)
modparam("dmq_usrloc", "batch_size", 10)
modparam("dmq_usrloc", "batch_usleep", 1000)
modparam("dmq_usrloc", "batch_msg_size", 60000)
modparam("dmq_usrloc", "batch_msg_contacts", 50)
modparam("dmq_usrloc", "usrloc_domain", "location")
modparam("dmq_usrloc", "replicate_socket_info", 0)
modparam("dmq_usrloc", "usrloc_delete", 1)*/

before the block begin with:

/*$avp(oexten) = $rU;
        if (!lookup("location")) {*/

I put

/*if (!dmq_is_from_node()) {*//*
*//*if(reg_fetch_contacts("location", "$ru", "contacto")) {*//*
*//*if($(ulc(contacto=>socket))) == 0 {*//*
*//*rewritehost("5.6.7.8");*//*
*//*                        }*//*
*//*                        route(RELAY);*//*
*//*                }*//*
*//*        }*/

If the socket value is null (0) means the user is registered on the second Kamailio so send INVITE to second Kamailio

/*route[AUTH] {*//*
*//*#!ifdef WITH_AUTH*//*
*//*
*//*if (dmq_is_from_node()) {*//*
*//*        $ru = $tu;*//*
*//*return;*//*
*//*}*/

If INVITE comes from other DMQ node don't need authentication but I have to change RURI with To URI because I work in a multidomain setting and I'm  using the does_uri_exist function to know if the request is local or not.

*Server2*:

/*listen=udp:5.6.7.8:5060
listen=udp:5.6.7.8:5222*/

/**/

/*# ---- dmq params ----
modparam("dmq", "server_address", "sip:5.6.7.8")
modparam("dmq", "notification_address", "sip:1.2.3.4")
modparam("dmq", "multi_notify", 0)
modparam("dmq", "num_workers", 4)
modparam("dmq", "ping_interval", 30)

# ---- dmq_usrloc params ----
modparam("dmq_usrloc", "enable", 1)
modparam("dmq_usrloc", "sync", 1)
modparam("dmq_usrloc", "batch_size", 10)
modparam("dmq_usrloc", "batch_usleep", 1000)
modparam("dmq_usrloc", "batch_msg_size", 60000)
modparam("dmq_usrloc", "batch_msg_contacts", 50)
modparam("dmq_usrloc", "usrloc_domain", "location")
modparam("dmq_usrloc", "replicate_socket_info", 0)
modparam("dmq_usrloc", "usrloc_delete", 1)*/

before the block begin with:

/*$avp(oexten) = $rU;
        if (!lookup("location")) {*/

/**/

/*if (!dmq_is_from_node()) {*//*
*//*                if(reg_fetch_contacts("location", "$ru", "contacto")) {*//*
*//*                        if($(ulc(contacto=>socket))) == 0 {*//*
*//*                                rewritehost("1.2.3.4");*//*
*//*                        }*//*
*//*                        route(RELAY);*//*
*//*                }*//*
*//*        }*/

If the socket value is null (0) means the user is registered on the first Kamailio so send INVITE to first Kamailio

/*route[AUTH] {
#!ifdef WITH_AUTH

if (dmq_is_from_node()) {
        $ru = $tu;
return;
}*/

If INVITE comes from other DMQ node don't need authentication but I have to change RURI with To URI because I work in a multidomain setting and I'm  using the does_uri_exist function to know if the request is local or not.

LIMITATIONS:

 * works only with a device for user. If a user registered from two o
   more devices I don't know how achieve the same behavior
 * works with Two Kamailio due to rewritehost function...
 * maybe the routing can be better

Regards

---
I'm SoCIaL, MayBe

El 31/07/2021 a las 5:23 a. m., Henning Westerholt escribió:

Great, thanks for the confirmation.

Henning

*From:* sr-users <sr-users-boun...@lists.kamailio.org> *On Behalf Of *Social Boh
*Sent:* Friday, July 30, 2021 8:36 PM
*To:* Kamailio (SER) - Users Mailing List <sr-users@lists.kamailio.org>
*Subject:* Re: [SR-Users] Access via script to location data in the memory

Works!

I can access location data presents only in the memory. Now, next step is using $(ulc(contacto=>socket)) to decide which Kamailio have to process the call.

Thank you

---
I'm SoCIaL, MayBe

El 30/07/2021 a las 11:51 a. m., Henning Westerholt escribió:

    Hi,

    just quickly looked in the registrar code, it uses the standard
    usrloc functions to get data from memory or database.

    Maybe just give it a try, I think it should work also in
    in-memory/dmq mode.

    Cheers,

    Henning

    *From:* sr-users <sr-users-boun...@lists.kamailio.org>
    <mailto:sr-users-boun...@lists.kamailio.org> *On Behalf Of *Social Boh
    *Sent:* Friday, July 30, 2021 6:42 PM
    *To:* Kamailio (SER) - Users Mailing List
    <sr-users@lists.kamailio.org> <mailto:sr-users@lists.kamailio.org>
    *Subject:* Re: [SR-Users] Access via script to location data in
    the memory

    Hello,

    reg_fetch_contacts use a table (I understood) to looking for data
    about a user.

    I'm using USRLOC module without database.

    Regards

    ---

    I'm SoCIaL, MayBe

    El 30/07/2021 a las 11:18 a. m., Henning Westerholt escribió:

        Hello,

        have you looked to the reg_fetch_contact as already pointed
        out? Then you can access e.g. the socket with the $ulc PV, see
        the end of the registrar docs for an example.

        Cheers,

        Henning

--
        Henning Westerholt – https://skalatan.de/blog/
        <https://skalatan.de/blog/>

        Kamailio services – https://gilawa.com <https://gilawa.com/>

        *From:* sr-users <sr-users-boun...@lists.kamailio.org>
        <mailto:sr-users-boun...@lists.kamailio.org> *On Behalf Of
        *Social Boh
        *Sent:* Friday, July 30, 2021 6:11 PM
        *To:* Kamailio (SER) - Users Mailing List
        <sr-users@lists.kamailio.org> <mailto:sr-users@lists.kamailio.org>
        *Subject:* Re: [SR-Users] Access via script to location data
        in the memory

        Hello,

        maybe is better I explain what I'd like to achieve:

        I have two Kamailio using DMQ and DMQ_USRLOC modules so each
        REGISTER is replicate on each Kamailio. I'm using DNS weight
        to distribute the REGISTERs between the 2 Kamailios.

        The only difference I have seen in the location data, with
        *kamctl ul show* command, is the Kamailio receives REGISTER
        have socket parameter with transport, ip, y port like
        udp:1.2.3.4:5060 where 1.2.3.4 is Kamailio public IP; the
        other Kamailio have this field empty.

        When a call arrive to one Kamailio, querying the Socket field
        I can known if I have to send the INVITE locally or forward
        the INVITE to second Kamailio.

        I don't know if there is other way to achieve this goal.

        I think PATH protocol not apply here because If I reply the
        REGISTER to the second Kamailio adding path header, I don't
        need DMQ_USRLOC.

        The idea is to take advantage of using these DMQ related modules.

        Regards

        ---

        I'm SoCIaL, MayBe

        El 29/07/2021 a las 5:16 p. m., Henning Westerholt escribió:

            Hello,

            There are different functions in the registrar module, check them 
out:https://kamailio.org/docs/modules/devel/modules/registrar.html#idm576  
<https://kamailio.org/docs/modules/devel/modules/registrar.html#idm576>

            reg_fetch_contacts(..) might be something you could use.

            Cheers,

            Henning

__________________________________________________________
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

Reply via email to