123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 |
- /*
- * $Id$
- *
- * Copyright (C) 2001-2003 FhG Fokus
- *
- * This file is part of Kamailio, a free SIP server.
- *
- * Kamailio is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version
- *
- * Kamailio is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
- /*! \file
- * \brief USRLOC - Usrloc record structure
- * \ingroup usrloc
- */
- #ifndef URECORD_H
- #define URECORD_H
- #include <stdio.h>
- #include <time.h>
- #include "hslot.h"
- #include "../../str.h"
- #include "../../qvalue.h"
- #include "ucontact.h"
- #include "usrloc.h"
- struct hslot; /*!< Hash table slot */
- /*!
- * \brief Create and initialize new record structure
- * \param _dom domain name
- * \param _aor address of record
- * \param _r pointer to the new record
- * \return 0 on success, negative on failure
- */
- int new_urecord(str* _dom, str* _aor, urecord_t** _r);
- /*!
- * \brief Free all memory used by the given structure
- *
- * Free all memory used by the given structure.
- * The structure must be removed from all linked
- * lists first
- * \param _r freed record list
- */
- void free_urecord(urecord_t* _r);
- /*!
- * \brief Print a record, useful for debugging
- * \param _f print output
- * \param _r printed record
- */
- void print_urecord(FILE* _f, urecord_t* _r);
- /*!
- * \brief Add a new contact in memory
- *
- * Add a new contact in memory, contacts are ordered by:
- * 1) q value, 2) descending modification time
- * \param _r record this contact belongs to
- * \param _c contact
- * \param _ci contact information
- * \return pointer to new created contact on success, 0 on failure
- */
- ucontact_t* mem_insert_ucontact(urecord_t* _r, str* _c, ucontact_info_t* _ci);
- /*!
- * \brief Remove the contact from lists in memory
- * \param _r record this contact belongs to
- * \param _c removed contact
- */
- void mem_remove_ucontact(urecord_t* _r, ucontact_t* _c);
- /*!
- * \brief Remove contact in memory from the list and delete it
- * \param _r record this contact belongs to
- * \param _c deleted contact
- */
- void mem_delete_ucontact(urecord_t* _r, ucontact_t* _c);
- /*!
- * \brief Run timer functions depending on the db_mode setting.
- *
- * Helper function that run the appropriate timer function, depending
- * on the db_mode setting.
- * \param _r processed record
- */
- void timer_urecord(urecord_t* _r);
- /*!
- * \brief Delete a record from the database
- * \param _r deleted record
- * \return 0 on success, -1 on failure
- */
- int db_delete_urecord(urecord_t* _r);
- /*!
- * \brief Delete a record from the database based on ruid
- * \param _d pointer to domain from which record is deleted
- * \param _ruid pointer to ruid of the record which is deleted
- * \return 0 on success, -1 on failure, and -2 if record was
- * not found
- */
- int delete_urecord_by_ruid(udomain_t* _d, str *_ruid);
- /* ===== Module interface ======== */
- /*!
- * \brief Release urecord previously obtained through get_urecord
- * \warning Failing to calls this function after get_urecord will
- * result in a memory leak when the DB_ONLY mode is used. When
- * the records is later deleted, e.g. with delete_urecord, then
- * its not necessary, as this function already releases the record.
- * \param _r released record
- */
- void release_urecord(urecord_t* _r);
- /*!
- * \brief Create and insert new contact into urecord
- * \param _r record into the new contact should be inserted
- * \param _contact contact string
- * \param _ci contact information
- * \param _c new created contact
- * \return 0 on success, -1 on failure
- */
- int insert_ucontact(urecord_t* _r, str* _contact,
- ucontact_info_t* _ci, ucontact_t** _c);
- /*!
- * \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);
- /*!
- * \brief Get pointer to ucontact with given contact
- * \param _r record where to search the contacts
- * \param _c contact string
- * \param _callid callid
- * \param _path path
- * \param _cseq CSEQ number
- * \param _co found contact
- * \return 0 - found, 1 - not found, -1 - invalid found,
- * -2 - found, but to be skipped (same cseq)
- */
- int get_ucontact(urecord_t* _r, str* _c, str* _callid, str* _path,
- int _cseq,
- struct ucontact** _co);
- /*!
- * \brief Get pointer to ucontact with given contact
- * \param _r record where to search the contacts
- * \param _c contact string
- * \param _ci contact info (callid, cseq, instance, ...)
- * \param _co found contact
- * \return 0 - found, 1 - not found, -1 - invalid found,
- * -2 - found, but to be skipped (same cseq)
- */
- int get_ucontact_by_instance(urecord_t* _r, str* _c, ucontact_info_t* _ci,
- ucontact_t** _co);
- #endif
|