Module: kamailio Branch: 4.4 Commit: b5427f85590bd9e5111669cbd665ca7b5181797c URL: https://github.com/kamailio/kamailio/commit/b5427f85590bd9e5111669cbd665ca7b...
Author: Daniel-Constantin Mierla miconda@gmail.com Committer: GitHub noreply@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/b5427f85590bd9e5111669cbd665ca7b... Patch: https://github.com/kamailio/kamailio/commit/b5427f85590bd9e5111669cbd665ca7b...
---
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);