modules/ims_qos: added patch for flow-description bug when request originates from...
[sip-router] / src / lib / srdb2 / db_pool.h
1 /* 
2  * Copyright (C) 2001-2005 iptel.org
3  * Copyright (C) 2006-2007 iptelorg GmbH
4  *
5  * This file is part of Kamailio, a free SIP server.
6  *
7  * Kamailio is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version
11  *
12  * Kamailio is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License 
18  * along with this program; if not, write to the Free Software 
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
20  */
21
22 #ifndef _DB_POOL_H
23 #define _DB_POOL_H  1
24
25 /** \ingroup DB_API 
26  * @{ 
27  */
28
29 #include "db_drv.h"
30 #include "db_uri.h"
31 #include "../../list.h"
32 #include <sys/types.h>
33
34
35 #ifdef __cplusplus
36 extern "C" {
37 #endif /* __cplusplus */
38
39
40 /*
41  * This is a stub that contains all attributes
42  * that pool members must have, it is not really
43  * used, real connection structures are created
44  * by database backends. All such structures (
45  * created by the backends) must have these
46  * attributes.
47  */
48 typedef struct db_pool_entry {
49         db_drv_t drv_gen;  /* Generic part of the driver specific data */
50         SLIST_ENTRY(db_pool_entry) next;
51         db_uri_t* uri;     /* Pointer to the URI representing the connection */
52         unsigned int ref;  /* Reference count */
53 } db_pool_entry_t;
54
55
56 int db_pool_entry_init(struct db_pool_entry *entry, void* free_func, db_uri_t* uri);
57 void db_pool_entry_free(struct db_pool_entry* entry);   
58
59
60 /*
61  * Search the pool for a connection with
62  * the identifier equal to id, NULL is returned
63  * when no connection is found
64  */
65 struct db_pool_entry* db_pool_get(db_uri_t* uri);
66
67
68 /*
69  * Insert a new connection into the pool
70  */
71 void db_pool_put(struct db_pool_entry* entry);
72
73
74 /*
75  * Release connection from the pool, the function
76  * would return 1 when if the connection is not
77  * referenced anymore and thus can be closed and
78  * deleted by the backend. The function returns
79  * 0 if the connection should still be kept open
80  * because some other module is still using it.
81  * The function returns -1 if the connection is
82  * not in the pool.
83  */
84 int db_pool_remove(struct db_pool_entry* entry);
85
86 #ifdef __cplusplus
87 }
88 #endif /* __cplusplus */
89
90 /** @} */
91
92 #endif /* _DB_POOL_H */