1 /*
2  * Copyright (C) 2008 iptelorg GmbH
3  *
4  * Permission to use, copy, modify, and distribute this software for any
5  * purpose with or without fee is hereby granted, provided that the above
6  * copyright notice and this permission notice appear in all copies.
7  *
8  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15  */
16 
17 /**
18  * @file mod_fix.h
19  * @brief Kamailio core :: Generic fixup functions for module function parameter.
20  * (kamailio compatibility)
21  * @ingroup core
22  * Module: \ref core
23  */
24 
25 #ifndef _mod_fix_h_
26 #define _mod_fix_h_
27 
28 #include "sr_module.h"
29 #include "pvar.h"
30 
31 #define GPARAM_TYPE_INT		FPARAM_INT
32 #define GPARAM_TYPE_STR		FPARAM_STR
33 #define GPARAM_TYPE_PVS		FPARAM_PVS
34 #define GPARAM_TYPE_PVE		FPARAM_PVE
35 
36 /**
37  * generic parameter that holds a string, an int, a pseudo-variable
38  * or a ser select, avp, or subst.
39  *
40  * Note: used only for compatibility with existing kamailio code,
41  *  please use fparam_t directly in the future.
42  *
43  * @see fparam_t
44  */
45 
46 /* reuse ser fparam_t */
47 #define gparam_t fparam_t
48 
49 typedef gparam_t *gparam_p;
50 
51 int fixup_get_svalue(struct sip_msg* msg, gparam_p gp, str *val);
52 
53 /** get a string value out of a fparam_t.
54   *
55   * Note: this macro/function is  for kamailio compatibility
56   * (please use get_str_fparam() directly in the future)
57   *
58   * @param msg  - pointer to the sip message
59   * @param fp   - pointer to the fparam_t
60   * @param sval - pointer to str, used to store the result
61   * @return  0 on success, -1 on error
62   */
63 #define fixup_get_svalue(msg, fp, sval) get_str_fparam(sval, msg, fp)
64 
65 /** get an int value out of a fparam_t.
66   *
67   * Note: this macro/function is  for kamailio compatibility
68   * (please use get_int_fparam() directly in the future)
69   *
70   * @param msg  - pointer to the sip message
71   * @param fp   - pointer to the fparam_t
72   * @param ival - pointer to str, used to store the result
73   * @return  0 on success, -1 on error
74   */
75 #define fixup_get_ivalue(msg, fp, ival) get_int_fparam(ival, msg, fp)
76 
77 int fixup_str_null(void** param, int param_no);
78 int fixup_str_str(void** param, int param_no);
79 
80 int fixup_free_str_null(void** param, int param_no);
81 int fixup_free_str_str(void** param, int param_no);
82 
83 int fixup_uint_null(void** param, int param_no);
84 int fixup_uint_uint(void** param, int param_no);
85 
86 
87 int fixup_regexp_null(void** param, int param_no);
88 int fixup_free_regexp_null(void** param, int param_no);
89 int fixup_regexp_regexp(void** param, int param_no);
90 int fixup_free_regexp_regexp(void** param, int param_no);
91 
92 int fixup_pvar_null(void **param, int param_no);
93 int fixup_free_pvar_null(void** param, int param_no);
94 
95 int fixup_pvar_none(void** param, int param_no);
96 int fixup_free_pvar_none(void** param, int param_no);
97 
98 int fixup_pvar_pvar(void **param, int param_no);
99 int fixup_free_pvar_pvar(void** param, int param_no);
100 
101 int fixup_pvar_pvar_pvar(void **param, int param_no);
102 int fixup_free_pvar_pvar_pvar(void** param, int param_no);
103 
104 int fixup_pvar_str(void** param, int param_no);
105 int fixup_free_pvar_str(void** param, int param_no);
106 
107 int fixup_pvar_str_str(void** param, int param_no);
108 int fixup_free_pvar_str_str(void** param, int param_no);
109 
110 int fixup_pvar_uint(void** param, int param_no);
111 int fixup_free_pvar_uint(void** param, int param_no);
112 
113 int fixup_igp_igp(void** param, int param_no);
114 int fixup_free_igp_igp(void** param, int param_no);
115 int fixup_igp_null(void** param, int param_no);
116 int fixup_free_igp_null(void** param, int param_no);
117 int fixup_get_ivalue(struct sip_msg* msg, gparam_p gp, int *val);
118 
119 int fixup_igp_pvar(void** param, int param_no);
120 int fixup_free_igp_pvar(void** param, int param_no);
121 
122 int fixup_igp_pvar_pvar(void** param, int param_no);
123 int fixup_free_igp_pvar_pvar(void** param, int param_no);
124 
125 int fixup_igp_spve(void** param, int param_no);
126 int fixup_free_igp_spve(void** param, int param_no);
127 
128 int fixup_pvar_all(void** param, int param_no);
129 int fixup_free_pvar_all(void** param, int param_no);
130 
131 int fixup_spve_spve(void** param, int param_no);
132 int fixup_free_spve_spve(void** param, int param_no);
133 int fixup_spve_null(void** param, int param_no);
134 int fixup_free_spve_null(void** param, int param_no);
135 int fixup_spve_uint(void** param, int param_no);
136 int fixup_free_spve_uint(void** param, int param_no);
137 int fixup_spve_str(void** param, int param_no);
138 int fixup_free_spve_str(void** param, int param_no);
139 
140 int fixup_spve_all(void** param, int param_no);
141 int fixup_free_spve_all(void** param, int param_no);
142 int fixup_igp_all(void** param, int param_no);
143 int fixup_free_igp_all(void** param, int param_no);
144 
145 int fixup_spve_igp(void** param, int param_no);
146 int fixup_free_spve_igp(void** param, int param_no);
147 int fixup_spve_pvar(void** param, int param_no);
148 int fixup_free_spve_pvar(void** param, int param_no);
149 
150 int fixup_spve_spve_igp(void** param, int param_no);
151 int fixup_free_spve_spve_igp(void** param, int param_no);
152 
153 int fixup_none_spve(void** param, int param_no);
154 int fixup_free_none_spve(void** param, int param_no);
155 
156 /** get the corresp. free fixup function.*/
157 free_fixup_function mod_fix_get_fixup_free(fixup_function f);
158 
159 int fixup_vstr_all(void** param, int param_no);
160 int fixup_free_vstr_all(void** param, int param_no);
161 int fixup_get_vstr_buf(sip_msg_t *msg, pv_elem_t *p, char *buf, int blen);
162 #endif
163