Module: sip-router Branch: master Commit: 7b7754a41711aa09d63d219c3930dc5090eaf326 URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=7b7754a4...
Author: Carsten Bock carsten@ng-voice.com Committer: Carsten Bock carsten@ng-voice.com Date: Tue Aug 5 17:21:06 2014 +0200
ims_usrloc_scscf: In case the contact_id after insert_update is 0, do the old query again (last_inserted_id is only set, if there was really an UPDATE or INSERT, not if nothing was changed)
---
modules/ims_usrloc_scscf/usrloc_db.c | 23 +++++++++++++++++++++++ 1 files changed, 23 insertions(+), 0 deletions(-)
diff --git a/modules/ims_usrloc_scscf/usrloc_db.c b/modules/ims_usrloc_scscf/usrloc_db.c index 49b551b..c25e89c 100644 --- a/modules/ims_usrloc_scscf/usrloc_db.c +++ b/modules/ims_usrloc_scscf/usrloc_db.c @@ -252,6 +252,29 @@ int db_insert_ucontact(impurecord_t* _r, ucontact_t* _c) { return -1; } contact_id = ul_dbf.last_inserted_id(ul_dbh); + if (contact_id <= 0) { + /* search for the ID if the contact just entered */ + if (ul_dbf.query(ul_dbh, key, 0, val, key_return, 1, 1, NULL, &_rs) != 0) { + LM_ERR("Unable to find contact [%.*s] in DB to complete IMPU-contact mapping\n", _c->c.len, _c->c.s); + ul_dbf.free_result(ul_dbh, _rs); + return -1; + } + + if (RES_ROW_N(_rs) == 0) { + LM_DBG("Contact %.*s not found in DB\n",_c->c.len, _c->c.s); + ul_dbf.free_result(ul_dbh, _rs); + return -1; + } + + if (RES_ROW_N(_rs) > 1) { + LM_WARN("more than one contact found in DB for contact [%.*s] - this should not happen... proceeding with first entry\n", + _c->c.len, _c->c.s); + } + + ret_val = ROW_VALUES(RES_ROWS(_rs)); + contact_id = ret_val[0].val.int_val; + ul_dbf.free_result(ul_dbh, _rs); + } LM_DBG("contact ID is %d\n", contact_id);
/* search for ID of the associated IMPU */