presence: pass str parameters via pointer to couple of functions
[sip-router] / src / modules / presence / hash.h
1 /*
2  * presence module - presence server implementation
3  *
4  * Copyright (C) 2007 Voice Sistem S.R.L.
5  *
6  * This file is part of Kamailio, a free SIP server.
7  *
8  * Kamailio is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version
12  *
13  * Kamailio is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License 
19  * along with this program; if not, write to the Free Software 
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
21  *
22  */
23
24 /*! \file
25  * \brief Kamailio presence module :: Hash tables
26  * \ingroup presence 
27  */
28
29
30 #ifndef PS_HASH_H
31 #define PS_HASH_H
32
33 #include "../../core/lock_ops.h"
34
35 struct presentity;
36 #define REMOTE_TYPE 1 << 1
37 #define LOCAL_TYPE 1 << 2
38
39 #define PKG_MEM_STR "pkg"
40 #define SHARE_MEM "share"
41
42 #define ERR_MEM(mem_type)                        \
43         do {                                         \
44                 LM_ERR("No more %s memory\n", mem_type); \
45                 goto error;                              \
46         } while(0)
47
48 #define CONT_COPY(buf, dest, source)          \
49         do {                                      \
50                 dest.s = (char *)buf + size;          \
51                 memcpy(dest.s, source.s, source.len); \
52                 dest.len = source.len;                \
53                 size += source.len;                   \
54         } while(0)
55
56 #define PKG_MEM_TYPE (1 << 1)
57 #define SHM_MEM_TYPE (1 << 2)
58
59 extern int pres_delete_same_subs;
60
61 /* subscribe hash entry */
62 struct subscription;
63
64 typedef struct subs_entry
65 {
66         struct subscription *entries;
67         gen_lock_t lock;
68 } subs_entry_t;
69
70 typedef subs_entry_t *shtable_t;
71
72 shtable_t new_shtable(int hash_size);
73
74 struct subscription *search_shtable(shtable_t htable, str callid, str to_tag,
75                 str from_tag, unsigned int hash_code);
76
77 int insert_shtable(
78                 shtable_t htable, unsigned int hash_code, struct subscription *subs);
79
80 int delete_shtable(
81                 shtable_t htable, unsigned int hash_code, struct subscription *subs);
82
83 int update_shtable(shtable_t htable, unsigned int hash_code,
84                 struct subscription *subs, int type);
85
86 struct subscription *mem_copy_subs(struct subscription *s, int mem_type);
87
88 void free_subs_list(struct subscription *s_array, int mem_type, int ic);
89
90 void destroy_shtable(shtable_t htable, int hash_size);
91
92 /* subs htable functions type definitions */
93 typedef shtable_t (*new_shtable_t)(int hash_size);
94
95 typedef struct subscription *(*search_shtable_t)(shtable_t htable, str callid,
96                 str to_tag, str from_tag, unsigned int hash_code);
97
98 typedef int (*insert_shtable_t)(
99                 shtable_t htable, unsigned int hash_code, struct subscription *subs);
100
101 typedef int (*delete_shtable_t)(
102                 shtable_t htable, unsigned int hash_code, struct subscription *subs);
103
104 typedef int (*update_shtable_t)(shtable_t htable, unsigned int hash_code,
105                 struct subscription *subs, int type);
106
107 typedef void (*destroy_shtable_t)(shtable_t htable, int hash_size);
108
109 typedef struct subscription *(*mem_copy_subs_t)(
110                 struct subscription *s, int mem_type);
111
112
113 /* presentity hash table */
114 typedef struct pres_entry
115 {
116         str pres_uri;
117         int event;
118         int publ_count;
119         char *sphere;
120         struct pres_entry *next;
121 } pres_entry_t;
122
123 typedef struct pres_phtable
124 {
125         pres_entry_t *entries;
126         gen_lock_t lock;
127 } phtable_t;
128
129 phtable_t *new_phtable(void);
130
131 pres_entry_t *search_phtable(str *pres_uri, int event, unsigned int hash_code);
132
133 int insert_phtable(str *pres_uri, int event, char *sphere);
134
135 int update_phtable(struct presentity *presentity, str *pres_uri, str *body);
136
137 int delete_phtable(str *pres_uri, int event);
138
139 void destroy_phtable(void);
140
141 int delete_db_subs(str* to_tag, str* from_tag, str* callid);
142
143 #endif