Skip to content

Commit

Permalink
Merge pull request #1029 from jchavanton/4.4-dmqfix-backport
Browse files Browse the repository at this point in the history
4.4 dmqfix backport
  • Loading branch information
miconda committed Mar 14, 2017
2 parents 99c0c6e + 40cce57 commit b5427f8
Showing 1 changed file with 43 additions and 27 deletions.
70 changes: 43 additions & 27 deletions modules/dmq_usrloc/usrloc_sync.c
Expand Up @@ -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;

Expand All @@ -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);
Expand Down

0 comments on commit b5427f8

Please sign in to comment.