5b4690c77bfa8c65d45ebd49d588cce430f14a45
[sip-router] / modules / corex / corex_mod.c
1 /**
2  * $Id$
3  *
4  * Copyright (C) 2011 Daniel-Constantin Mierla (asipto.com)
5  *
6  * This file is part of Kamailio, a free SIP server.
7  *
8  * Permission to use, copy, modify, and distribute this software for any
9  * purpose with or without fee is hereby granted, provided that the above
10  * copyright notice and this permission notice appear in all copies.
11  *
12  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
13  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
14  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
15  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
16  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
18  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19  *
20  */
21
22 #include <stdio.h>
23 #include <unistd.h>
24 #include <stdlib.h>
25 #include <string.h>
26
27 #include "../../sr_module.h"
28 #include "../../dprint.h"
29 #include "../../ut.h"
30
31 #include "corex_lib.h"
32 #include "corex_rpc.h"
33
34 MODULE_VERSION
35
36 static int w_append_branch(sip_msg_t *msg, char *su, char *sq);
37
38 int corex_alias_subdomains_param(modparam_t type, void *val);
39
40 static int  mod_init(void);
41 static int  child_init(int);
42 static void mod_destroy(void);
43
44 static cmd_export_t cmds[]={
45         {"append_branch", (cmd_function)w_append_branch, 0, 0,
46                         0, REQUEST_ROUTE | FAILURE_ROUTE },
47         {"append_branch", (cmd_function)w_append_branch, 1, fixup_spve_null,
48                         0, REQUEST_ROUTE | FAILURE_ROUTE },
49         {"append_branch", (cmd_function)w_append_branch, 2, fixup_spve_spve,
50                         0, REQUEST_ROUTE | FAILURE_ROUTE },
51
52
53         {0, 0, 0, 0, 0, 0}
54 };
55
56 static param_export_t params[]={
57         {"alias_subdomains",  STR_PARAM|USE_FUNC_PARAM,
58                                                                 (void*)corex_alias_subdomains_param},
59         {0, 0, 0}
60 };
61
62 struct module_exports exports = {
63         "corex",
64         DEFAULT_DLFLAGS, /* dlopen flags */
65         cmds,
66         params,
67         0,
68         0,              /* exported MI functions */
69         0,              /* exported pseudo-variables */
70         0,              /* extra processes */
71         mod_init,       /* module initialization function */
72         0,              /* response function */
73         mod_destroy,    /* destroy function */
74         child_init      /* per child init function */
75 };
76
77
78
79 /**
80  * init module function
81  */
82 static int mod_init(void)
83 {
84         if(corex_init_rpc()<0)
85         {
86                 LM_ERR("failed to register RPC commands\n");
87                 return -1;
88         }
89
90         if(corex_register_check_self()<0)
91         {
92                 LM_ERR("failed to register check self callback\n");
93                 return -1;
94         }
95
96         return 0;
97 }
98
99 /**
100  * @brief Initialize async module children
101  */
102 static int child_init(int rank)
103 {
104         if (rank!=PROC_MAIN)
105                 return 0;
106
107         return 0;
108 }
109 /**
110  * destroy module function
111  */
112 static void mod_destroy(void)
113 {
114 }
115
116 /**
117  * config wrapper for append branch
118  */
119 static int w_append_branch(sip_msg_t *msg, char *su, char *sq)
120 {
121         if(corex_append_branch(msg, (gparam_t*)su, (gparam_t*)sq) < 0)
122                 return -1;
123         return 1;
124 }
125
126
127 int corex_alias_subdomains_param(modparam_t type, void *val)
128 {
129         if(val==NULL)
130                 goto error;
131
132         return corex_add_alias_subdomains((char*)val);
133 error:
134         return -1;
135
136 }
137