diff --git a/CHANGES b/CHANGES index 86dfe76a1c31142a74d6fe2976bfa0bccc0d901e..c0f7a1af279d8bdf4d58606fabab63777f24d417 100644 --- a/CHANGES +++ b/CHANGES @@ -8,6 +8,21 @@ === ============================================================================== +------------------------------------------------------------------------------ +--- Functionality changes from Asterisk 13.15.0 to Asterisk 13.16.0 ---------- +------------------------------------------------------------------------------ + +res_pjsip_config_wizard +------------------ + * Two new parameters have been added to the pjsip config wizard. + Setting 'sends_line_with_registrations' to true will cause the wizard + to skip the creation of an identify object to match incoming requests + to the endpoint and instead add the line and endpoint parameters to + the outbound registration object. + Setting 'outbound_proxy' is a shortcut for adding individual + endpoint/outbound_proxy, aor/outbound_proxy and registration/outbound_proxy + parameters. + ------------------------------------------------------------------------------ --- Functionality changes from Asterisk 13.14.0 to Asterisk 13.15.0 ---------- ------------------------------------------------------------------------------ diff --git a/configs/samples/pjsip_wizard.conf.sample b/configs/samples/pjsip_wizard.conf.sample index 0f46083af562b9543bacb0b72db5c7d6e625e913..8c8572e4d34f9d2cc66790b313b6562e70638e4d 100644 --- a/configs/samples/pjsip_wizard.conf.sample +++ b/configs/samples/pjsip_wizard.conf.sample @@ -79,6 +79,13 @@ ; sends_auth must also be specified. ; (default: "no") +;sends_line_with_registrations= ; Setting this to true will cause the wizard to + ; skip the creation of an identify object to match + ; incoming requests to the endpoint and instead add the + ; line and endpoint parameters to the outbound + ; registration object. + ; (default: "no") + ;accepts_registrations= ; Will create an aor with dynamic contacts which will ; accept registrations. ; accepts_auth must also be specified. @@ -96,6 +103,11 @@ ; SRV records are not currently supported. ; (default: "") +;outbound_proxy= ; Setting this is a shortcut for setting + ; endpoint/outbound_proxy + ; aor/outbound_proxy + ; registration/outbound_proxy + ;transport= ; The transport to use for the endpoint and registrations ; (default: the pjsip default) diff --git a/res/res_pjsip_config_wizard.c b/res/res_pjsip_config_wizard.c index 1967d87abeb1ad06ba1960cd8e21d7e63fde9fdb..c13ff4aca9dfd78d2ec72b945390c2161df08b16 100644 --- a/res/res_pjsip_config_wizard.c +++ b/res/res_pjsip_config_wizard.c @@ -141,6 +141,12 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") entry in the list. If send_registrations is also set, a registration will also be created for each.</para></description> </configOption> + <configOption name="outbound_proxy"> + <synopsis>Shortcut for specifying proxy on individual objects.</synopsis> + <description><para>Shortcut for specifying endpoint/outbound_proxy, + aor/outbound_proxy, and registration/outbound_proxy individually. + </para></description> + </configOption> <configOption name="sends_auth" default="no"> <synopsis>Send outbound authentication to remote hosts.</synopsis> <description><para>At least outbound_auth/username is required.</para></description> @@ -155,6 +161,13 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") be created for each host in the remote _hosts string. If authentication is required, sends_auth and an outbound_auth/username must also be supplied.</para></description> </configOption> + <configOption name="sends_line_with_registrations" default="no"> + <synopsis>Sets "line" and "endpoint parameters on registrations.</synopsis> + <description><para>Setting this to true will cause the wizard to skip the + creation of an identify object to match incoming requests to the endpoint and + instead add the line and endpoint parameters to the outbound registration object. + </para></description> + </configOption> <configOption name="accepts_registrations" default="no"> <synopsis>Accept inbound registration from remote hosts.</synopsis> <description><para>An AOR with dynamic contacts will be created. If @@ -597,11 +610,16 @@ static int handle_aor(const struct ast_sorcery *sorcery, struct object_type_wiza struct ast_sorcery_object *obj = NULL; const char *id = ast_category_get_name(wiz); const char *contact_pattern; + const char *outbound_proxy = ast_variable_find_last_in_list(wizvars, "outbound_proxy"); int host_count = AST_VECTOR_SIZE(remote_hosts_vector); RAII_VAR(struct ast_variable *, vars, get_object_variables(wizvars, "aor/"), ast_variables_destroy); variable_list_append(&vars, "@pjsip_wizard", id); + if (!ast_strlen_zero(outbound_proxy)) { + variable_list_append_return(&vars, "outbound_proxy", outbound_proxy); + } + /* If the user explicitly specified an aor/contact, don't use remote hosts. */ if (!ast_variable_find_last_in_list(vars, "contact")) { if (!(contact_pattern = ast_variable_find_last_in_list(wizvars, "contact_pattern"))) { @@ -649,6 +667,7 @@ static int handle_endpoint(const struct ast_sorcery *sorcery, struct object_type struct ast_variable *wizvars = ast_category_first(wiz); struct ast_sorcery_object *obj = NULL; const char *id = ast_category_get_name(wiz); + const char *outbound_proxy = ast_variable_find_last_in_list(wizvars, "outbound_proxy"); const char *transport = ast_variable_find_last_in_list(wizvars, "transport"); const char *hint_context = hint_context = ast_variable_find_last_in_list(wizvars, "hint_context"); const char *hint_exten = ast_variable_find_last_in_list(wizvars, "hint_exten"); @@ -659,6 +678,10 @@ static int handle_endpoint(const struct ast_sorcery *sorcery, struct object_type variable_list_append_return(&vars, "@pjsip_wizard", id); variable_list_append_return(&vars, "aors", id); + if (!ast_strlen_zero(outbound_proxy)) { + variable_list_append_return(&vars, "outbound_proxy", outbound_proxy); + } + if (ast_strlen_zero(hint_context)) { hint_context = ast_variable_find_last_in_list(vars, "context"); } @@ -721,8 +744,9 @@ static int handle_identify(const struct ast_sorcery *sorcery, struct object_type snprintf(new_id, sizeof(new_id), "%s-identify", id); - /* If accepting registrations, we don't need an identify. */ - if (is_variable_true(wizvars, "accepts_registrations")) { + /* If accepting registrations or we're sending line, we don't need an identify. */ + if (is_variable_true(wizvars, "accepts_registrations") + || is_variable_true(wizvars, "sends_line_with_registrations")) { /* If one exists, delete it. */ obj = otw->wizard->retrieve_id(sorcery, otw->wizard_data, "identify", new_id); if (obj) { @@ -838,6 +862,7 @@ static int handle_registrations(const struct ast_sorcery *sorcery, struct object const char *id = ast_category_get_name(wiz); const char *server_uri_pattern; const char *client_uri_pattern; + const char *outbound_proxy = ast_variable_find_last_in_list(wizvars, "outbound_proxy"); const char *transport = ast_variable_find_last_in_list(wizvars, "transport"); const char *username; char new_id[strlen(id) + MAX_ID_SUFFIX]; @@ -857,6 +882,10 @@ static int handle_registrations(const struct ast_sorcery *sorcery, struct object return -1; } + if (!ast_strlen_zero(outbound_proxy)) { + variable_list_append_return(&vars, "outbound_proxy", outbound_proxy); + } + otw->wizard->retrieve_multiple(sorcery, otw->wizard_data, "registration", existing, search); ast_variables_destroy(search); @@ -927,6 +956,11 @@ static int handle_registrations(const struct ast_sorcery *sorcery, struct object variable_list_append_return(®istration_vars, "transport", transport); } + if (is_variable_true(wizvars, "sends_line_with_registrations")) { + variable_list_append_return(®istration_vars, "line", "yes"); + variable_list_append_return(®istration_vars, "endpoint", id); + } + snprintf(new_id, sizeof(new_id), "%s-reg-%d", id, host_counter); obj = create_object(sorcery, new_id, "registration", registration_vars);