res_pjsip: PJSIP Transport state monitor refactor.
[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 the transport events notify module
139  * \since 13.18.0
140  *
141  * The transport events notify module is responsible for monitoring
142  * when transports die and calling any registered callbacks when that
143  * happens.  It also manages any PJPROJECT transport state callbacks
144  * registered to it so the callbacks be more dynamic allowing module
145  * loading/unloading.
146  *
147  * \retval -1 Failure
148  * \retval 0 Success
149  */
150 int ast_sip_initialize_transport_events(void);
151
152 /*!
153  * \internal
154  * \brief Destruct the transport events notify module.
155  * \since 13.18.0
156  */
157 void ast_sip_destroy_transport_events(void);
158
159 /*!
160  * \internal
161  * \brief Initialize global type on a sorcery instance
162  *
163  * \retval -1 failure
164  * \retval 0 success
165  */
166 int ast_sip_initialize_sorcery_global(void);
167
168 /*!
169  * \internal
170  * \brief Destroy global type on a sorcery instance
171  * \since 13.3.0
172  *
173  * \retval -1 failure
174  * \retval 0 success
175  */
176 int ast_sip_destroy_sorcery_global(void);
177
178 /*!
179  * \internal
180  * \brief Initialize global headers support
181  *
182  * \return Nothing
183  */
184 void ast_sip_initialize_global_headers(void);
185
186 /*!
187  * \internal
188  * \brief Destroy global headers support
189  *
190  * \return Nothing
191  */
192 void ast_sip_destroy_global_headers(void);
193
194 /*!
195  * \internal
196  * \brief Initialize OPTIONS request handling.
197  *
198  * XXX This currently includes qualifying peers. It shouldn't.
199  * That should go into a registrar. When that occurs, we won't
200  * need the reload stuff.
201  *
202  * \param reload Reload options handling
203  *
204  * \retval 0 on success
205  * \retval other on failure
206  */
207 int ast_res_pjsip_init_options_handling(int reload);
208
209 /*!
210  * \internal Initialize message IP updating handling.
211  *
212  * \retval 0 on success
213  * \retval other on failure
214  */
215 int ast_res_pjsip_init_message_ip_updater(void);
216
217 /*!
218  * \internal
219  * \brief Initialize transport storage for contacts.
220  *
221  * \retval 0 on success
222  * \retval other on failure
223  */
224 int ast_res_pjsip_init_contact_transports(void);
225
226 /*!
227  * \internal
228  * \brief Initialize system configuration
229  *
230  * \retval 0 Success
231  * \retval non-zero Failure
232  */
233 int ast_sip_initialize_system(void);
234
235 /*!
236  * \internal
237  * \brief Destroy system configuration
238  */
239 void ast_sip_destroy_system(void);
240
241 /*!
242  * \internal
243  * \brief Initialize nameserver configuration
244  */
245 void ast_sip_initialize_dns(void);
246
247 /*!
248  * \internal
249  * \brief Initialize our own resolver support
250  */
251 void ast_sip_initialize_resolver(void);
252
253 /*!
254  * \internal
255  * \brief Initialize global configuration
256  *
257  * \retval 0 Success
258  * \retval non-zero Failure
259  */
260 int ast_sip_initialize_global(void);
261
262 /*!
263  * \internal
264  * \brief Clean up res_pjsip options handling
265  */
266 void ast_res_pjsip_cleanup_options_handling(void);
267
268 /*!
269  * \internal
270  * \brief Clean up res_pjsip message ip updating handling
271  */
272 void ast_res_pjsip_cleanup_message_ip_updater(void);
273
274 /*!
275  * \internal
276  * \brief Get threadpool options
277  */
278 void sip_get_threadpool_options(struct ast_threadpool_options *threadpool_options);
279
280 /*!
281  * \internal
282  * \brief Retrieve the name of the default outbound endpoint.
283  *
284  * \note This returns a memory allocated copy of the name that
285  *       needs to be freed by the caller.
286  *
287  * \retval The name of the default outbound endpoint.
288  * \retval NULL if configuration not found.
289  */
290 char *ast_sip_global_default_outbound_endpoint(void);
291
292 /*!
293  * \internal
294  * \brief Functions for initializing and destroying the CLI.
295  */
296 int ast_sip_initialize_cli(void);
297 void ast_sip_destroy_cli(void);
298
299 /*!
300  * \internal
301  * \brief Add res_pjsip global configuration options to the cli context.
302  *
303  * \param context context to add options to
304  * \retval 0 Success, -1 on failure
305  */
306 int sip_cli_print_global(struct ast_sip_cli_context *context);
307
308 /*!
309  * \internal
310  * \brief Add res_pjsip system configuration options to the cli context.
311  *
312  * \param context context to add options to
313  * \retval 0 Success, -1 on failure
314  */
315 int sip_cli_print_system(struct ast_sip_cli_context *context);
316
317 /*!
318  * \internal
319  * \brief Used by res_pjsip.so to register a service without adding a self reference
320  */
321 int internal_sip_register_service(pjsip_module *module);
322
323 /*!
324  * \internal
325  * \brief Used by res_pjsip.so to unregister a service without removing a self reference
326  */
327 int internal_sip_unregister_service(pjsip_module *module);
328
329 /*!
330  * \internal
331  * \brief Used by res_pjsip.so to register an endpoint formatter without adding a self reference
332  */
333 void internal_sip_register_endpoint_formatter(struct ast_sip_endpoint_formatter *obj);
334
335 /*!
336  * \internal
337  * \brief Used by res_pjsip.so to unregister a endpoint formatter without removing a self reference
338  */
339 int internal_sip_unregister_endpoint_formatter(struct ast_sip_endpoint_formatter *obj);
340
341 /*!
342  * \internal
343  * \brief Finds or creates contact_status for a contact
344  */
345 struct ast_sip_contact_status *ast_res_pjsip_find_or_create_contact_status(const struct ast_sip_contact *contact);
346
347 /*!
348  * \internal
349  * \brief Validate that the uri meets pjproject length restrictions
350  */
351 int ast_sip_validate_uri_length(const char *uri);
352
353 /*!
354  * \brief Initialize scheduler
355  * \since 13.9.0
356  *
357  * \retval -1 failure
358  * \retval 0 success
359  */
360 int ast_sip_initialize_scheduler(void);
361
362 /*!
363  * \internal
364  * \brief Destroy scheduler
365  * \since 13.9.0
366  *
367  * \retval -1 failure
368  * \retval 0 success
369  */
370 int ast_sip_destroy_scheduler(void);
371
372 #endif /* RES_PJSIP_PRIVATE_H_ */