abe7353ce761423a60d784d1b9b067d756accfe7
[sip-router] / src / modules / usrloc / ucontact.h
1 /*
2  * Copyright (C) 2001-2003 FhG Fokus
3  *
4  * This file is part of Kamailio, a free SIP server.
5  *
6  * Kamailio is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version
10  *
11  * Kamailio is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
19  *
20  */
21
22 /*! \file
23  *  \brief USRLOC - Usrloc contact structure
24  *  \ingroup usrloc
25  */
26
27
28 #ifndef UCONTACT_H
29 #define UCONTACT_H
30
31
32 #include <stdio.h>
33 #include "../../core/xavp.h"
34 #include "usrloc.h"
35
36
37 /*! \brief ancient time used for marking the contacts forced to expired */
38 #define UL_EXPIRED_TIME 10
39
40
41 /*!
42  * \brief Create a new contact structure
43  * \param _dom domain
44  * \param _aor address of record
45  * \param _contact contact string
46  * \param _ci contact informations
47  * \return new created contact on success, 0 on failure
48  */
49 ucontact_t* new_ucontact(str* _dom, str* _aor, str* _contact,
50                 ucontact_info_t* _ci);
51
52
53 /*!
54  * \brief Free all memory associated with given contact structure
55  * \param _c freed contact
56  */
57 void free_ucontact(ucontact_t* _c);
58
59
60 /*!
61  * \brief Print contact, for debugging purposes only
62  * \param _f output file
63  * \param _c printed contact
64  */
65 void print_ucontact(FILE* _f, ucontact_t* _c);
66
67
68 /*!
69  * \brief Update existing contact in memory with new values
70  * \param _c contact
71  * \param _ci contact informations
72  * \return 0
73  */
74 int mem_update_ucontact(ucontact_t* _c, ucontact_info_t *_ci);
75
76
77 /* ===== State transition functions - for write back cache scheme ======== */
78
79 /*!
80  * \brief Update state of the contact if we are using write-back scheme
81  * \param _c updated contact
82  */
83 void st_update_ucontact(ucontact_t* _c);
84
85
86 /*!
87  * \brief Update state of the contact
88  * \param _c updated contact
89  * \return 1 if the contact should be deleted from memory immediately, 0 otherwise
90  */
91 int st_delete_ucontact(ucontact_t* _c);
92
93
94 /*!
95  * \brief Called when the timer is about to delete an expired contact
96  * \param _c expired contact
97  * \return 1 if the contact should be removed from the database and 0 otherwise
98  */
99 int st_expired_ucontact(ucontact_t* _c);
100
101
102 /*!
103  * \brief Called when the timer is about flushing the contact, updates contact state
104  * \param _c flushed contact
105  * \return 1 if the contact should be inserted, 2 if update and 0 otherwise
106  */
107 int st_flush_ucontact(ucontact_t* _c);
108
109
110 /* ==== Database related functions ====== */
111
112 /*!
113  * \brief Insert contact into the database
114  * \param _c inserted contact
115  * \return 0 on success, -1 on failure
116  */
117 int db_insert_ucontact(ucontact_t* _c);
118
119
120 /*!
121  * \brief Update contact in the database
122  * \param _c updated contact
123  * \return 0 on success, -1 on failure
124  */
125 int db_update_ucontact(ucontact_t* _c);
126
127
128 /*!
129  * \brief Delete contact from the database
130  * \param _c deleted contact
131  * \return 0 on success, -1 on failure
132  */
133 int db_delete_ucontact(ucontact_t* _c);
134
135 /* ====== Module interface ====== */
136
137 /*!
138  * \brief Update ucontact with new values
139  * \param _r record the contact belongs to
140  * \param _c updated contact
141  * \param _ci new contact informations
142  * \return 0 on success, -1 on failure
143  */
144 int update_ucontact(struct urecord* _r, ucontact_t* _c, ucontact_info_t* _ci);
145
146 /* ====== per contact attributes ====== */
147
148 /*!
149  * \brief Load all location attributes from a udomain
150  *
151  * Load all location attributes from a udomain, useful to populate the
152  * memory cache on startup.
153  * \param _dname loaded domain name
154  * \param _user sip username
155  * \param _domain sip domain
156  * \param _ruid usrloc record unique id
157  * \return 0 on success, -1 on failure
158  */
159 int uldb_delete_attrs(str* _dname, str *_user, str *_domain, str *_ruid);
160
161 /*!
162  * \brief Insert contact attributes into the database
163  * \param _dname loaded domain name
164  * \param _user sip username
165  * \param _domain sip domain
166  * \param _ruid record unique id
167  * \param _xhead head of xavp list
168  * \return 0 on success, -1 on failure
169  */
170 int uldb_insert_attrs(str *_dname, str *_user, str *_domain,
171         str *_ruid, sr_xavp_t *_xhead);
172
173 /*!
174  * \brief Set the value for cloning the xavp list to contact structure
175  * \param v - the value to be set
176  */
177 void ul_set_xavp_contact_clone(int v);
178
179 #endif