mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-12 15:45:18 +00:00
res_pjsip: Added a norefersub configuration setting
Added a new PJSIP global setting called norefersub. Default is true to keep support working as before. res_pjsip_refer: Configures PJSIP norefersub capability accordingly. Checks the PJSIP global setting value. If it is true (default) it adds the norefersub capability to PJSIP. If it is false (disabled) it does not add the norefersub capability to PJSIP. This is useful for Cisco switches that do not follow RFC4488. ASTERISK-28375 #close Reported-by: Dan Cropp Change-Id: I0b1c28ebc905d881f4a16e752715487a688b30e9
This commit is contained in:
@@ -1938,6 +1938,9 @@
|
||||
</para></warning>
|
||||
</description>
|
||||
</configOption>
|
||||
<configOption name="norefersub" default="yes">
|
||||
<synopsis>Advertise support for RFC4488 REFER subscription suppression</synopsis>
|
||||
</configOption>
|
||||
</configObject>
|
||||
</configFile>
|
||||
</configInfo>
|
||||
|
@@ -52,6 +52,7 @@
|
||||
#define DEFAULT_USE_CALLERID_CONTACT 0
|
||||
#define DEFAULT_SEND_CONTACT_STATUS_ON_UPDATE_REGISTRATION 0
|
||||
#define DEFAULT_TASKPROCESSOR_OVERLOAD_TRIGGER TASKPROCESSOR_OVERLOAD_TRIGGER_GLOBAL
|
||||
#define DEFAULT_NOREFERSUB 1
|
||||
|
||||
/*!
|
||||
* \brief Cached global config object
|
||||
@@ -113,6 +114,8 @@ struct global_config {
|
||||
unsigned int send_contact_status_on_update_registration;
|
||||
/*! Trigger the distributor should use to pause accepting new dialogs */
|
||||
enum ast_sip_taskprocessor_overload_trigger overload_trigger;
|
||||
/*! Nonzero if norefersub is to be sent in Supported header */
|
||||
unsigned int norefersub;
|
||||
};
|
||||
|
||||
static void global_destructor(void *obj)
|
||||
@@ -501,6 +504,21 @@ enum ast_sip_taskprocessor_overload_trigger ast_sip_get_taskprocessor_overload_t
|
||||
return trigger;
|
||||
}
|
||||
|
||||
unsigned int ast_sip_get_norefersub(void)
|
||||
{
|
||||
unsigned int norefersub;
|
||||
struct global_config *cfg;
|
||||
|
||||
cfg = get_global_cfg();
|
||||
if (!cfg) {
|
||||
return DEFAULT_NOREFERSUB;
|
||||
}
|
||||
|
||||
norefersub = cfg->norefersub;
|
||||
ao2_ref(cfg, -1);
|
||||
return norefersub;
|
||||
}
|
||||
|
||||
static int overload_trigger_handler(const struct aco_option *opt,
|
||||
struct ast_variable *var, void *obj)
|
||||
{
|
||||
@@ -704,6 +722,9 @@ int ast_sip_initialize_sorcery_global(void)
|
||||
ast_sorcery_object_field_register_custom(sorcery, "global", "taskprocessor_overload_trigger",
|
||||
overload_trigger_map[DEFAULT_TASKPROCESSOR_OVERLOAD_TRIGGER],
|
||||
overload_trigger_handler, overload_trigger_to_str, NULL, 0, 0);
|
||||
ast_sorcery_object_field_register(sorcery, "global", "norefersub",
|
||||
DEFAULT_NOREFERSUB ? "yes" : "no",
|
||||
OPT_YESNO_T, 1, FLDSET(struct global_config, norefersub));
|
||||
|
||||
if (ast_sorcery_instance_observer_add(sorcery, &observer_callbacks_global)) {
|
||||
return -1;
|
||||
|
@@ -1230,7 +1230,10 @@ static int load_module(void)
|
||||
|
||||
pjsip_replaces_init_module(ast_sip_get_pjsip_endpoint());
|
||||
pjsip_xfer_init_module(ast_sip_get_pjsip_endpoint());
|
||||
pjsip_endpt_add_capability(ast_sip_get_pjsip_endpoint(), NULL, PJSIP_H_SUPPORTED, NULL, 1, &str_norefersub);
|
||||
|
||||
if (ast_sip_get_norefersub()) {
|
||||
pjsip_endpt_add_capability(ast_sip_get_pjsip_endpoint(), NULL, PJSIP_H_SUPPORTED, NULL, 1, &str_norefersub);
|
||||
}
|
||||
|
||||
ast_sip_register_service(&refer_progress_module);
|
||||
ast_sip_session_register_supplement(&refer_supplement);
|
||||
|
Reference in New Issue
Block a user