Module: kamailio
Branch: 4.4
Commit: b5427f85590bd9e5111669cbd665ca7b5181797c
URL:
https://github.com/kamailio/kamailio/commit/b5427f85590bd9e5111669cbd665ca7…
Author: Daniel-Constantin Mierla <miconda(a)gmail.com>
Committer: GitHub <noreply(a)github.com>
Date: 2017-03-14T20:12:29+01:00
Merge pull request #1029 from jchavanton/4.4-dmqfix-backport
4.4 dmqfix backport
---
Modified: modules/dmq_usrloc/usrloc_sync.c
---
Diff:
https://github.com/kamailio/kamailio/commit/b5427f85590bd9e5111669cbd665ca7…
Patch:
https://github.com/kamailio/kamailio/commit/b5427f85590bd9e5111669cbd665ca7…
---
diff --git a/modules/dmq_usrloc/usrloc_sync.c b/modules/dmq_usrloc/usrloc_sync.c
index 1c78e71..c9c02bf 100644
--- a/modules/dmq_usrloc/usrloc_sync.c
+++ b/modules/dmq_usrloc/usrloc_sync.c
@@ -50,9 +50,9 @@ extern int _dmq_usrloc_batch_usleep;
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;
@@ -61,37 +61,53 @@ static int add_contact(str aor, ucontact_info_t* ci)
return -1;
}
- dmq_ul.lock_udomain(_d, &aor);
+ 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));
- 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");
+ 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;
+ }
+ }
+ 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("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);