modules/ims_qos: added patch for flow-description bug when request originates from...
[sip-router] / src / core / kemi.h
1 /**
2  * Copyright (C) 2016 Daniel-Constantin Mierla (asipto.com)
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 #ifndef _SR_KEMI_H_
23 #define _SR_KEMI_H_
24
25 #include "str.h"
26 #include "parser/msg_parser.h"
27 #include "action.h"
28
29 #define SR_KEMIP_NONE   (0)             /* no type */
30 #define SR_KEMIP_INT    (1<<0)  /* type integer */
31 #define SR_KEMIP_STR    (1<<1)  /* type str* */
32 #define SR_KEMIP_BOOL   (1<<2)  /* type boolean (0/1) */
33 #define SR_KEMIP_INTSTR (1<<3)  /* type integer or str* */
34
35 #define SR_KEMI_FALSE   0
36 #define SR_KEMI_TRUE    1
37
38 #define SR_KEMI_PARAMS_MAX      6
39
40 typedef struct sr_kemi {
41         str mname; /* sub-module name */
42         str fname; /* function name */
43         int rtype; /* return type (supported SR_KEMIP_INT/BOOL) */
44         void *func; /* pointer to the C function to be executed */
45         int ptypes[SR_KEMI_PARAMS_MAX]; /* array with the type of parameters */
46 } sr_kemi_t;
47
48 typedef struct sr_kemi_item {
49         sr_kemi_t *item;
50         int nparams;
51         struct sr_kemi_item *next;
52 } sr_kemi_item_t;
53
54 typedef struct sr_kemi_module {
55         str mname;
56         sr_kemi_t *kexp;
57 } sr_kemi_module_t;
58
59 typedef union {
60         int n;
61         str s;
62 } sr_kemi_val_t;
63
64 /* only sip_msg_t */
65 typedef int (*sr_kemi_fm_f)(sip_msg_t*);
66
67 /* sip_msg_t and one int|str param */
68 typedef int (*sr_kemi_fmn_f)(sip_msg_t*, int);
69 typedef int (*sr_kemi_fms_f)(sip_msg_t*, str*);
70
71 /* sip_msg_t and two int|str params */
72 typedef int (*sr_kemi_fmnn_f)(sip_msg_t*, int, int);
73 typedef int (*sr_kemi_fmns_f)(sip_msg_t*, int, str*);
74 typedef int (*sr_kemi_fmsn_f)(sip_msg_t*, str*, int);
75 typedef int (*sr_kemi_fmss_f)(sip_msg_t*, str*, str*);
76
77 /* sip_msg_t and three int|str params */
78 typedef int (*sr_kemi_fmnnn_f)(sip_msg_t*, int, int, int);
79 typedef int (*sr_kemi_fmnns_f)(sip_msg_t*, int, int, str*);
80 typedef int (*sr_kemi_fmnsn_f)(sip_msg_t*, int, str*, int);
81 typedef int (*sr_kemi_fmnss_f)(sip_msg_t*, int, str*, str*);
82 typedef int (*sr_kemi_fmsnn_f)(sip_msg_t*, str*, int, int);
83 typedef int (*sr_kemi_fmsns_f)(sip_msg_t*, str*, int, str*);
84 typedef int (*sr_kemi_fmssn_f)(sip_msg_t*, str*, str*, int);
85 typedef int (*sr_kemi_fmsss_f)(sip_msg_t*, str*, str*, str*);
86
87 /* sip_msg_t and four int|str params */
88 typedef int (*sr_kemi_fmssss_f)(sip_msg_t*, str*, str*, str*, str*);
89 typedef int (*sr_kemi_fmssnn_f)(sip_msg_t*, str*, str*, int, int);
90
91 /* sip_msg_t and five int|str params */
92 typedef int (*sr_kemi_fmsssss_f)(sip_msg_t*, str*, str*, str*, str*, str*);
93
94 /* sip_msg_t and six int|str params */
95 typedef int (*sr_kemi_fmssssss_f)(sip_msg_t*, str*, str*, str*, str*, str*, str*);
96
97 sr_kemi_t* sr_kemi_lookup(str *mname, int midx, str *fname);
98
99 int sr_kemi_modules_add(sr_kemi_t *klist);
100 int sr_kemi_modules_size_get(void);
101 sr_kemi_module_t* sr_kemi_modules_get(void);
102
103 typedef int (*sr_kemi_eng_route_f)(sip_msg_t*, int, str*, str*);
104
105 #define SR_KEMI_BNAME_SIZE      256
106 typedef struct sr_kemi_eng {
107         char bname[SR_KEMI_BNAME_SIZE];
108         str  ename;
109         sr_kemi_eng_route_f froute;
110 } sr_kemi_eng_t;
111
112 int sr_kemi_eng_register(str *ename, sr_kemi_eng_route_f froute);
113 int sr_kemi_eng_set(str *ename, str *cpath);
114 int sr_kemi_eng_setz(char *ename, char *cpath);
115 sr_kemi_eng_t* sr_kemi_eng_get(void);
116
117 int sr_kemi_cbname_list_init(void);
118 int sr_kemi_cbname_lookup_name(str *name);
119 str* sr_kemi_cbname_lookup_idx(int idx);
120
121 void sr_kemi_act_ctx_set(run_act_ctx_t *ctx);
122 run_act_ctx_t* sr_kemi_act_ctx_get(void);
123
124 str *sr_kemi_param_map_get_name(int ptype);
125 str *sr_kemi_param_map_get_params(int *ptypes);
126
127 #endif