Merge "res_pjsip_config_wizard: Add 2 new parameters to help with proxy config"

This commit is contained in:
zuul 2017-03-30 17:02:38 -05:00 committed by Gerrit Code Review
commit 7898aad02d
3 changed files with 67 additions and 2 deletions

19
CHANGES
View File

@ -12,6 +12,25 @@
--- Functionality changes from Asterisk 14 to Asterisk 15 -------------------- --- Functionality changes from Asterisk 14 to Asterisk 15 --------------------
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
------------------------------------------------------------------------------
--- Functionality changes from Asterisk 14.4.0 to Asterisk 14.5.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 14.3.0 to Asterisk 14.4.0 ------------
------------------------------------------------------------------------------
Build System Build System
------------------ ------------------
* LOW_MEMORY no longer has an effect on Asterisk ABI. Symbols that were * LOW_MEMORY no longer has an effect on Asterisk ABI. Symbols that were

View File

@ -79,6 +79,13 @@
; sends_auth must also be specified. ; sends_auth must also be specified.
; (default: "no") ; (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 ;accepts_registrations= ; Will create an aor with dynamic contacts which will
; accept registrations. ; accept registrations.
; accepts_auth must also be specified. ; accepts_auth must also be specified.
@ -96,6 +103,11 @@
; SRV records are not currently supported. ; SRV records are not currently supported.
; (default: "") ; (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 ;transport= ; The transport to use for the endpoint and registrations
; (default: the pjsip default) ; (default: the pjsip default)

View File

@ -139,6 +139,12 @@
entry in the list. If send_registrations is also set, a registration will entry in the list. If send_registrations is also set, a registration will
also be created for each.</para></description> also be created for each.</para></description>
</configOption> </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"> <configOption name="sends_auth" default="no">
<synopsis>Send outbound authentication to remote hosts.</synopsis> <synopsis>Send outbound authentication to remote hosts.</synopsis>
<description><para>At least outbound_auth/username is required.</para></description> <description><para>At least outbound_auth/username is required.</para></description>
@ -153,6 +159,13 @@
be created for each host in the remote _hosts string. If authentication is required, 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> sends_auth and an outbound_auth/username must also be supplied.</para></description>
</configOption> </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"> <configOption name="accepts_registrations" default="no">
<synopsis>Accept inbound registration from remote hosts.</synopsis> <synopsis>Accept inbound registration from remote hosts.</synopsis>
<description><para>An AOR with dynamic contacts will be created. If <description><para>An AOR with dynamic contacts will be created. If
@ -595,11 +608,16 @@ static int handle_aor(const struct ast_sorcery *sorcery, struct object_type_wiza
struct ast_sorcery_object *obj = NULL; struct ast_sorcery_object *obj = NULL;
const char *id = ast_category_get_name(wiz); const char *id = ast_category_get_name(wiz);
const char *contact_pattern; 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); int host_count = AST_VECTOR_SIZE(remote_hosts_vector);
RAII_VAR(struct ast_variable *, vars, get_object_variables(wizvars, "aor/"), ast_variables_destroy); RAII_VAR(struct ast_variable *, vars, get_object_variables(wizvars, "aor/"), ast_variables_destroy);
variable_list_append(&vars, "@pjsip_wizard", id); 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 the user explicitly specified an aor/contact, don't use remote hosts. */
if (!ast_variable_find_last_in_list(vars, "contact")) { if (!ast_variable_find_last_in_list(vars, "contact")) {
if (!(contact_pattern = ast_variable_find_last_in_list(wizvars, "contact_pattern"))) { if (!(contact_pattern = ast_variable_find_last_in_list(wizvars, "contact_pattern"))) {
@ -647,6 +665,7 @@ static int handle_endpoint(const struct ast_sorcery *sorcery, struct object_type
struct ast_variable *wizvars = ast_category_first(wiz); struct ast_variable *wizvars = ast_category_first(wiz);
struct ast_sorcery_object *obj = NULL; struct ast_sorcery_object *obj = NULL;
const char *id = ast_category_get_name(wiz); 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 *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_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"); const char *hint_exten = ast_variable_find_last_in_list(wizvars, "hint_exten");
@ -657,6 +676,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, "@pjsip_wizard", id);
variable_list_append_return(&vars, "aors", 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)) { if (ast_strlen_zero(hint_context)) {
hint_context = ast_variable_find_last_in_list(vars, "context"); hint_context = ast_variable_find_last_in_list(vars, "context");
} }
@ -719,8 +742,9 @@ static int handle_identify(const struct ast_sorcery *sorcery, struct object_type
snprintf(new_id, sizeof(new_id), "%s-identify", id); snprintf(new_id, sizeof(new_id), "%s-identify", id);
/* If accepting registrations, we don't need an identify. */ /* If accepting registrations or we're sending line, we don't need an identify. */
if (is_variable_true(wizvars, "accepts_registrations")) { if (is_variable_true(wizvars, "accepts_registrations")
|| is_variable_true(wizvars, "sends_line_with_registrations")) {
/* If one exists, delete it. */ /* If one exists, delete it. */
obj = otw->wizard->retrieve_id(sorcery, otw->wizard_data, "identify", new_id); obj = otw->wizard->retrieve_id(sorcery, otw->wizard_data, "identify", new_id);
if (obj) { if (obj) {
@ -836,6 +860,7 @@ static int handle_registrations(const struct ast_sorcery *sorcery, struct object
const char *id = ast_category_get_name(wiz); const char *id = ast_category_get_name(wiz);
const char *server_uri_pattern; const char *server_uri_pattern;
const char *client_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 *transport = ast_variable_find_last_in_list(wizvars, "transport");
const char *username; const char *username;
char new_id[strlen(id) + MAX_ID_SUFFIX]; char new_id[strlen(id) + MAX_ID_SUFFIX];
@ -855,6 +880,10 @@ static int handle_registrations(const struct ast_sorcery *sorcery, struct object
return -1; 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); otw->wizard->retrieve_multiple(sorcery, otw->wizard_data, "registration", existing, search);
ast_variables_destroy(search); ast_variables_destroy(search);
@ -925,6 +954,11 @@ static int handle_registrations(const struct ast_sorcery *sorcery, struct object
variable_list_append_return(&registration_vars, "transport", transport); variable_list_append_return(&registration_vars, "transport", transport);
} }
if (is_variable_true(wizvars, "sends_line_with_registrations")) {
variable_list_append_return(&registration_vars, "line", "yes");
variable_list_append_return(&registration_vars, "endpoint", id);
}
snprintf(new_id, sizeof(new_id), "%s-reg-%d", id, host_counter); snprintf(new_id, sizeof(new_id), "%s-reg-%d", id, host_counter);
obj = create_object(sorcery, new_id, "registration", registration_vars); obj = create_object(sorcery, new_id, "registration", registration_vars);