Beispiel #1
0
/*!
 * \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;
}
Beispiel #2
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;
}
Beispiel #3
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;
}