Module: kamailio
Branch: master
Commit: 0cfb2224cbca5cfcf125ad46593573f1e4b94e36
URL:
https://github.com/kamailio/kamailio/commit/0cfb2224cbca5cfcf125ad46593573f…
Author: Carsten Bock <carsten(a)ng-voice.com>
Committer: Carsten Bock <carsten(a)ng-voice.com>
Date: 2016-10-25T17:37:36+02:00
dmq_usrloc: Use ruid for saving/updating contacts
---
Modified: modules/dmq_usrloc/usrloc_sync.c
---
Diff:
https://github.com/kamailio/kamailio/commit/0cfb2224cbca5cfcf125ad46593573f…
Patch:
https://github.com/kamailio/kamailio/commit/0cfb2224cbca5cfcf125ad46593573f…
---
diff --git a/modules/dmq_usrloc/usrloc_sync.c b/modules/dmq_usrloc/usrloc_sync.c
index c256af4..9fd6322 100644
--- a/modules/dmq_usrloc/usrloc_sync.c
+++ b/modules/dmq_usrloc/usrloc_sync.c
@@ -51,9 +51,9 @@ extern str _dmq_usrloc_domain;
static int add_contact(str aor, ucontact_info_t* ci)
{
- urecord_t* r;
+ urecord_t* r = NULL;
udomain_t* _d;
- ucontact_t* c;
+ ucontact_t* c = NULL;
str contact;
int res;
@@ -64,35 +64,52 @@ static int add_contact(str aor, ucontact_info_t* ci)
dmq_ul.lock_udomain(_d, &aor);
- res = dmq_ul.get_urecord(_d, &aor, &r);
- if (res < 0) {
- LM_ERR("failed to retrieve record from usrloc\n");
- goto error;
- } else if ( res == 0) {
- LM_DBG("'%.*s' found in usrloc\n", aor.len, ZSW(aor.s));
- res = dmq_ul.get_ucontact(r, ci->c, ci->callid, ci->path, ci->cseq,
&c);
- LM_DBG("get_ucontact = %d\n", res);
- if (res==-1) {
- LM_ERR("Invalid cseq\n");
+ LM_DBG("aor: %.*s\n", aor.len, aor.s);
+ LM_DBG("ci->ruid: %.*s\n", ci->ruid.len, ci->ruid.s);
+ LM_DBG("aorhash: %i\n", dmq_ul.get_aorhash(&aor));
+
+ if (ci->ruid.len > 0) {
+ // Search by ruid, if possible
+ res = dmq_ul.get_urecord_by_ruid(_d, dmq_ul.get_aorhash(&aor), &ci->ruid,
&r, &c);
+ if (res == 0) {
+ LM_DBG("Found contact\n");
+ dmq_ul.update_ucontact(r, c, ci);
+ LM_DBG("Release record\n");
+ dmq_ul.release_urecord(r);
+ LM_DBG("Unlock udomain\n");
+ dmq_ul.unlock_udomain(_d, &aor);
+ return 0;
+ }
+ }
+ res = dmq_ul.get_urecord(_d, &aor, &r);
+ if (res < 0) {
+ LM_ERR("failed to retrieve record from usrloc\n");
goto error;
- } else if (res > 0 ) {
- LM_DBG("Not found contact\n");
+ } else if ( res == 0) {
+ LM_DBG("'%.*s' found in usrloc\n", aor.len, ZSW(aor.s));
+ res = dmq_ul.get_ucontact(r, ci->c, ci->callid, ci->path, ci->cseq,
&c);
+ LM_DBG("get_ucontact = %d\n", res);
+ if (res==-1) {
+ LM_ERR("Invalid cseq\n");
+ goto error;
+ } else if (res > 0 ) {
+ LM_DBG("Not found contact\n");
+ contact.s = ci->c->s;
+ contact.len = ci->c->len;
+ dmq_ul.insert_ucontact(r, &contact, ci, &c);
+ } else if (res == 0) {
+ LM_DBG("Found contact\n");
+ dmq_ul.update_ucontact(r, c, ci);
+ }
+ } else {
+ LM_DBG("'%.*s' Not found in usrloc\n", aor.len, ZSW(aor.s));
+ dmq_ul.insert_urecord(_d, &aor, &r);
+ LM_DBG("Insert record\n");
contact.s = ci->c->s;
contact.len = ci->c->len;
dmq_ul.insert_ucontact(r, &contact, ci, &c);
- } else if (res == 0) {
- LM_DBG("Found contact\n");
- dmq_ul.update_ucontact(r, c, ci);
+ LM_DBG("Insert ucontact\n");
}
- } else {
- LM_DBG("'%.*s' Not found in usrloc\n", aor.len, ZSW(aor.s));
- dmq_ul.insert_urecord(_d, &aor, &r);
- LM_DBG("Insert record\n");
- contact.s = ci->c->s;
- contact.len = ci->c->len;
- dmq_ul.insert_ucontact(r, &contact, ci, &c);
- LM_DBG("Insert ucontact\n");
- }
LM_DBG("Release record\n");
dmq_ul.release_urecord(r);