|
|
|
|
@ -48,6 +48,15 @@
|
|
|
|
|
#define DEFAULT_MWI_TPS_QUEUE_LOW -1
|
|
|
|
|
#define DEFAULT_MWI_DISABLE_INITIAL_UNSOLICITED 0
|
|
|
|
|
|
|
|
|
|
/*!
|
|
|
|
|
* \brief Cached global config object
|
|
|
|
|
*
|
|
|
|
|
* \details
|
|
|
|
|
* Cached so we don't have to keep asking sorcery for the config.
|
|
|
|
|
* We could ask for it hundreds of times a second if not more.
|
|
|
|
|
*/
|
|
|
|
|
static AO2_GLOBAL_OBJ_STATIC(global_cfg);
|
|
|
|
|
|
|
|
|
|
static char default_useragent[256];
|
|
|
|
|
|
|
|
|
|
struct global_config {
|
|
|
|
|
@ -135,23 +144,14 @@ static int global_apply(const struct ast_sorcery *sorcery, void *obj)
|
|
|
|
|
ast_sip_add_global_request_header("Max-Forwards", max_forwards, 1);
|
|
|
|
|
ast_sip_add_global_request_header("User-Agent", cfg->useragent, 1);
|
|
|
|
|
ast_sip_add_global_response_header("Server", cfg->useragent, 1);
|
|
|
|
|
|
|
|
|
|
ao2_t_global_obj_replace_unref(global_cfg, cfg, "Applying global settings");
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static struct global_config *get_global_cfg(void)
|
|
|
|
|
{
|
|
|
|
|
struct global_config *cfg;
|
|
|
|
|
struct ao2_container *globals;
|
|
|
|
|
|
|
|
|
|
globals = ast_sorcery_retrieve_by_fields(ast_sip_get_sorcery(), "global",
|
|
|
|
|
AST_RETRIEVE_FLAG_MULTIPLE | AST_RETRIEVE_FLAG_ALL, NULL);
|
|
|
|
|
if (!globals) {
|
|
|
|
|
return NULL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
cfg = ao2_find(globals, NULL, 0);
|
|
|
|
|
ao2_ref(globals, -1);
|
|
|
|
|
return cfg;
|
|
|
|
|
return ao2_global_obj_ref(global_cfg);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
char *ast_sip_global_default_outbound_endpoint(void)
|
|
|
|
|
@ -462,6 +462,8 @@ int ast_sip_destroy_sorcery_global(void)
|
|
|
|
|
|
|
|
|
|
ast_sorcery_instance_observer_remove(sorcery, &observer_callbacks_global);
|
|
|
|
|
|
|
|
|
|
ao2_t_global_obj_release(global_cfg, "Module is unloading");
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|