0bdb63325af1f280bb1f57c2ffb736bf7e509f01
[asterisk/asterisk.git] / res / res_pjsip / include / res_pjsip_private.h
1 /*
2  * res_pjsip_private.h
3  *
4  *  Created on: Jan 25, 2013
5  *      Author: mjordan
6  */
7
8 #ifndef RES_PJSIP_PRIVATE_H_
9 #define RES_PJSIP_PRIVATE_H_
10
11 /*!
12  * \todo XXX Functions prototyped in this file that begin with "ast_sip_"
13  * need to be renamed so res_pjsip.so does not export the names outside
14  * of the module.
15  */
16
17 #include "asterisk/module.h"
18 #include "asterisk/compat.h"
19
20 struct ao2_container;
21 struct ast_threadpool_options;
22 struct ast_sip_cli_context;
23
24 /*!
25  * \internal
26  * \brief Initialize the configuration for res_pjsip
27  */
28 int ast_res_pjsip_initialize_configuration(void);
29
30 /*!
31  * \internal
32  * \brief Annihilate the configuration objects
33  */
34 void ast_res_pjsip_destroy_configuration(void);
35
36 /*!
37  * \internal
38  * \brief Reload the configuration
39  */
40 int ast_res_pjsip_reload_configuration(void);
41
42 /*!
43  * \internal
44  * \brief Initialize transport support on a sorcery instance
45  *
46  * \retval -1 failure
47  * \retval 0 success
48  */
49 int ast_sip_initialize_sorcery_transport(void);
50
51 /*!
52  * \internal
53  * \brief Destroy transport support on a sorcery instance
54  *
55  * \retval -1 failure
56  * \retval 0 success
57  */
58 int ast_sip_destroy_sorcery_transport(void);
59
60 /*!
61  * \internal
62  * \brief Initialize qualify support on a sorcery instance
63  *
64  * \retval -1 failure
65  * \retval 0 success
66  */
67 int ast_sip_initialize_sorcery_qualify(void);
68
69 /*!
70  * \internal
71  * \brief Initialize location support on a sorcery instance
72  *
73  * \retval -1 failure
74  * \retval 0 success
75  */
76 int ast_sip_initialize_sorcery_location(void);
77
78 /*!
79  * \internal
80  * \brief Destroy location support on a sorcery instance
81  *
82  * \retval -1 failure
83  * \retval 0 success
84  */
85 int ast_sip_destroy_sorcery_location(void);
86
87 /*!
88  * \internal
89  * \brief Initialize domain aliases support on a sorcery instance
90  *
91  * \retval -1 failure
92  * \retval 0 success
93  */
94 int ast_sip_initialize_sorcery_domain_alias(void);
95
96 /*!
97  * \internal
98  * \brief Initialize authentication support on a sorcery instance
99  *
100  * \retval -1 failure
101  * \retval 0 success
102  */
103 int ast_sip_initialize_sorcery_auth(void);
104
105 /*!
106  * \internal
107  * \brief Destroy authentication support on a sorcery instance
108  *
109  * \retval -1 failure
110  * \retval 0 success
111  */
112 int ast_sip_destroy_sorcery_auth(void);
113
114 /*!
115  * \internal
116  * \brief Initialize the distributor module
117  *
118  * The distributor module is responsible for taking an incoming
119  * SIP message and placing it into the threadpool. Once in the threadpool,
120  * the distributor will perform endpoint lookups and authentication, and
121  * then distribute the message up the stack to any further modules.
122  *
123  * \retval -1 Failure
124  * \retval 0 Success
125  */
126 int ast_sip_initialize_distributor(void);
127
128 /*!
129  * \internal
130  * \brief Destruct the distributor module.
131  *
132  * Unregisters pjsip modules and cleans up any allocated resources.
133  */
134 void ast_sip_destroy_distributor(void);
135
136 /*!
137  * \internal
138  * \brief Initialize global type on a sorcery instance
139  *
140  * \retval -1 failure
141  * \retval 0 success
142  */
143 int ast_sip_initialize_sorcery_global(void);
144
145 /*!
146  * \internal
147  * \brief Destroy global type on a sorcery instance
148  * \since 13.3.0
149  *
150  * \retval -1 failure
151  * \retval 0 success
152  */
153 int ast_sip_destroy_sorcery_global(void);
154
155 /*!
156  * \internal
157  * \brief Initialize global headers support
158  *
159  * \return Nothing
160  */
161 void ast_sip_initialize_global_headers(void);
162
163 /*!
164  * \internal
165  * \brief Destroy global headers support
166  *
167  * \return Nothing
168  */
169 void ast_sip_destroy_global_headers(void);
170
171 /*!
172  * \internal
173  * \brief Initialize OPTIONS request handling.
174  *
175  * XXX This currently includes qualifying peers. It shouldn't.
176  * That should go into a registrar. When that occurs, we won't
177  * need the reload stuff.
178  *
179  * \param reload Reload options handling
180  *
181  * \retval 0 on success
182  * \retval other on failure
183  */
184 int ast_res_pjsip_init_options_handling(int reload);
185
186 /*!
187  * \internal Initialize message IP updating handling.
188  *
189  * \retval 0 on success
190  * \retval other on failure
191  */
192 int ast_res_pjsip_init_message_ip_updater(void);
193
194 /*!
195  * \internal
196  * \brief Initialize transport storage for contacts.
197  *
198  * \retval 0 on success
199  * \retval other on failure
200  */
201 int ast_res_pjsip_init_contact_transports(void);
202
203 /*!
204  * \internal
205  * \brief Initialize system configuration
206  *
207  * \retval 0 Success
208  * \retval non-zero Failure
209  */
210 int ast_sip_initialize_system(void);
211
212 /*!
213  * \internal
214  * \brief Destroy system configuration
215  */
216 void ast_sip_destroy_system(void);
217
218 /*!
219  * \internal
220  * \brief Initialize nameserver configuration
221  */
222 void ast_sip_initialize_dns(void);
223
224 /*!
225  * \internal
226  * \brief Initialize our own resolver support
227  */
228 void ast_sip_initialize_resolver(void);
229
230 /*!
231  * \internal
232  * \brief Initialize global configuration
233  *
234  * \retval 0 Success
235  * \retval non-zero Failure
236  */
237 int ast_sip_initialize_global(void);
238
239 /*!
240  * \internal
241  * \brief Clean up res_pjsip options handling
242  */
243 void ast_res_pjsip_cleanup_options_handling(void);
244
245 /*!
246  * \internal
247  * \brief Clean up res_pjsip message ip updating handling
248  */
249 void ast_res_pjsip_cleanup_message_ip_updater(void);
250
251 /*!
252  * \internal
253  * \brief Get threadpool options
254  */
255 void sip_get_threadpool_options(struct ast_threadpool_options *threadpool_options);
256
257 /*!
258  * \internal
259  * \brief Retrieve the name of the default outbound endpoint.
260  *
261  * \note This returns a memory allocated copy of the name that
262  *       needs to be freed by the caller.
263  *
264  * \retval The name of the default outbound endpoint.
265  * \retval NULL if configuration not found.
266  */
267 char *ast_sip_global_default_outbound_endpoint(void);
268
269 /*!
270  * \internal
271  * \brief Functions for initializing and destroying the CLI.
272  */
273 int ast_sip_initialize_cli(void);
274 void ast_sip_destroy_cli(void);
275
276 /*!
277  * \internal
278  * \brief Add res_pjsip global configuration options to the cli context.
279  *
280  * \param context context to add options to
281  * \retval 0 Success, -1 on failure
282  */
283 int sip_cli_print_global(struct ast_sip_cli_context *context);
284
285 /*!
286  * \internal
287  * \brief Add res_pjsip system configuration options to the cli context.
288  *
289  * \param context context to add options to
290  * \retval 0 Success, -1 on failure
291  */
292 int sip_cli_print_system(struct ast_sip_cli_context *context);
293
294 /*!
295  * \internal
296  * \brief Used by res_pjsip.so to register a service without adding a self reference
297  */
298 int internal_sip_register_service(pjsip_module *module);
299
300 /*!
301  * \internal
302  * \brief Used by res_pjsip.so to unregister a service without removing a self reference
303  */
304 int internal_sip_unregister_service(pjsip_module *module);
305
306 /*!
307  * \internal
308  * \brief Used by res_pjsip.so to register an endpoint formatter without adding a self reference
309  */
310 void internal_sip_register_endpoint_formatter(struct ast_sip_endpoint_formatter *obj);
311
312 /*!
313  * \internal
314  * \brief Used by res_pjsip.so to unregister a endpoint formatter without removing a self reference
315  */
316 int internal_sip_unregister_endpoint_formatter(struct ast_sip_endpoint_formatter *obj);
317
318 /*!
319  * \internal
320  * \brief Finds or creates contact_status for a contact
321  */
322 struct ast_sip_contact_status *ast_res_pjsip_find_or_create_contact_status(const struct ast_sip_contact *contact);
323
324 /*!
325  * \internal
326  * \brief Validate that the uri meets pjproject length restrictions
327  */
328 int ast_sip_validate_uri_length(const char *uri);
329
330 /*!
331  * \brief Initialize scheduler
332  * \since 13.9.0
333  *
334  * \retval -1 failure
335  * \retval 0 success
336  */
337 int ast_sip_initialize_scheduler(void);
338
339 /*!
340  * \internal
341  * \brief Destroy scheduler
342  * \since 13.9.0
343  *
344  * \retval -1 failure
345  * \retval 0 success
346  */
347 int ast_sip_destroy_scheduler(void);
348
349 #endif /* RES_PJSIP_PRIVATE_H_ */