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-bounces(a)lists.kamailio.org> *On Behalf Of
*Social Boh
*Sent:* Friday, July 30, 2021 8:36 PM
*To:* Kamailio (SER) - Users Mailing List <sr-users(a)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-bounces(a)lists.kamailio.org>
<mailto:sr-users-bounces@lists.kamailio.org> *On Behalf Of *Social Boh
*Sent:* Friday, July 30, 2021 6:42 PM
*To:* Kamailio (SER) - Users Mailing List
<sr-users(a)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-bounces(a)lists.kamailio.org>
<mailto:sr-users-bounces@lists.kamailio.org> *On Behalf Of
*Social Boh
*Sent:* Friday, July 30, 2021 6:11 PM
*To:* Kamailio (SER) - Users Mailing List
<sr-users(a)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