/*! * \brief Delete ucontact from urecord * \param _r record where the contact belongs to * \param _c deleted contact * \return 0 on success, -1 on failure */ int delete_ucontact(urecord_t* _r, struct ucontact* _c) { int ret = 0; if (exists_ulcb_type(UL_CONTACT_DELETE)) { run_ul_callbacks( UL_CONTACT_DELETE, _c); } if (st_delete_ucontact(_c) > 0) { if (db_mode == WRITE_THROUGH || db_mode==DB_ONLY) { if (db_delete_ucontact(_c) < 0) { LM_ERR("failed to remove contact from database\n"); ret = -1; } } mem_delete_ucontact(_r, _c); } return ret; }
/* * Delete ucontact from urecord */ int delete_ucontact(urecord_t* _r, struct ucontact* _c) { if (exists_ulcb_type(UL_CONTACT_DELETE)) { run_ul_callbacks( UL_CONTACT_DELETE, _c); } notify_watchers(_r, _c, PRES_OFFLINE); if (st_delete_ucontact(_c) > 0) { if (db_mode == WRITE_THROUGH) { if (db_delete_ucontact(_c) < 0) { LOG(L_ERR, "delete_ucontact(): Can't remove contact from " "database\n"); } } delete_reg_avps(_c); mem_delete_ucontact(_r, _c); } return 0; }
/* * Delete ucontact from urecord */ int delete_ucontact(urecord_t* _r, struct ucontact* _c) { struct ucontact* ptr; if (st_delete_ucontact(_c) > 0) { if (db_mode == WRITE_THROUGH) { if (db_delete_ucontact(_c) < 0) { LOG(L_ERR, "delete_ucontact(): Can't remove contact from " "database\n"); } } mem_delete_ucontact(_r, _c); } ptr = _r->contacts; while(ptr) { if (ptr->state < CS_ZOMBIE_N) return 0; ptr = ptr->next; } notify_watchers(_r, PRES_OFFLINE); return 0; }