/*! * \brief Delete a record from the database * \param _r deleted record * \return 0 on success, -1 on failure */ int db_delete_urecord(udomain_t* _d, urecord_t* _r) { db_key_t keys[2]; db_val_t vals[2]; char* dom; keys[0] = &user_col; keys[1] = &domain_col; vals[0].type = DB1_STR; vals[0].nul = 0; vals[0].val.str_val.s = _r->aor.s; vals[0].val.str_val.len = _r->aor.len; if (use_domain) { dom = memchr(_r->aor.s, '@', _r->aor.len); vals[0].val.str_val.len = dom - _r->aor.s; vals[1].type = DB1_STR; vals[1].nul = 0; vals[1].val.str_val.s = dom + 1; vals[1].val.str_val.len = _r->aor.s + _r->aor.len - dom - 1; } if (ul_db_layer_delete(_d, &vals[0].val.str_val, &vals[1].val.str_val, keys, 0, vals, (use_domain) ? (2) : (1)) < 0) { return -1; } return 0; }
/*! * \brief Delete contact from the database by address * \param _c deleted contact * \return 0 on success, -1 on failure */ int db_delete_ucontact_addr(ucontact_t* _c) { char* dom; db_key_t keys[4]; db_val_t vals[4]; int n; if (_c->flags & FL_MEM) { return 0; } struct udomain * _d; if(register_udomain(_c->domain->s, &_d) < 0){ return -1; } n = 0; keys[n] = &user_col; vals[n].type = DB1_STR; vals[n].nul = 0; vals[n].val.str_val = *_c->aor; n++; keys[n] = &contact_col; vals[n].type = DB1_STR; vals[n].nul = 0; vals[n].val.str_val = _c->c; n++; keys[n] = &callid_col; vals[n].type = DB1_STR; vals[n].nul = 0; vals[n].val.str_val = _c->callid; n++; if (use_domain) { keys[n] = &domain_col; vals[n].type = DB1_STR; vals[n].nul = 0; dom = memchr(_c->aor->s, '@', _c->aor->len); if (dom==0) { vals[0].val.str_val.len = 0; vals[n].val.str_val = *_c->aor; } else { vals[0].val.str_val.len = dom - _c->aor->s; vals[n].val.str_val.s = dom + 1; vals[n].val.str_val.len = _c->aor->s + _c->aor->len - dom - 1; } n++; } if (ul_db_layer_delete(_d, &vals[0].val.str_val, &vals[3].val.str_val, keys, 0, vals, (use_domain) ? (4) : (3)) < 0) { LM_ERR("deleting from database failed\n"); return -1; } return 0; }
/*! * \brief Delete contact from the database by ruid * \param _c deleted contact * \return 0 on success, -1 on failure */ int db_delete_ucontact_ruid(ucontact_t* _c) { db_key_t keys[1]; db_val_t vals[1]; int n; char * dom; str user, domain; if (_c->flags & FL_MEM) { return 0; } if(_c->ruid.len<=0) { LM_ERR("deleting from database failed - empty ruid\n"); return -1; } struct udomain * _d; if(register_udomain(_c->domain->s, &_d) < 0){ return -1; } n = 0; keys[n] = &ruid_col; vals[n].type = DB1_STR; vals[n].nul = 0; vals[n].val.str_val = _c->ruid; n++; user = *_c->aor; if (use_domain) { dom = memchr(_c->aor->s, '@', _c->aor->len); if (dom==0) { user.len = 0; domain = *_c->aor; } else { user.len = dom - _c->aor->s; domain.s = dom + 1; domain.len = _c->aor->s + _c->aor->len - dom - 1; } } if (ul_db_layer_delete(_d, &user, &domain, keys, 0, vals, n) < 0) { LM_ERR("deleting from database failed\n"); return -1; } return 0; }