Merge "pjsip_options: show/reload AOR qualify options using CLI"

This commit is contained in:
George Joseph 2018-06-06 10:11:06 -05:00 committed by Gerrit Code Review
commit fdc931ffc6

View file

@ -2435,6 +2435,189 @@ static int ami_show_contacts(struct mansession *s, const struct message *m)
return 0;
}
static char *cli_show_qualify_endpoint(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
{
RAII_VAR(struct ast_sip_endpoint *, endpoint, NULL, ao2_cleanup);
const char *endpoint_name;
char *aors;
char *aor_name;
switch (cmd) {
case CLI_INIT:
e->command = "pjsip show qualify endpoint";
e->usage =
"Usage: pjsip show qualify endpoint <id>\n"
" Show the current qualify options for all Aors on the PJSIP endpoint.\n";
return NULL;
case CLI_GENERATE:
return NULL;
}
if (a->argc != 5) {
return CLI_SHOWUSAGE;
}
endpoint_name = a->argv[4];
endpoint = ast_sorcery_retrieve_by_id(ast_sip_get_sorcery(), "endpoint",
endpoint_name);
if (!endpoint) {
ast_cli(a->fd, "Unable to retrieve endpoint %s\n", endpoint_name);
return CLI_FAILURE;
}
if (ast_strlen_zero(endpoint->aors)) {
ast_cli(a->fd, "No AORs configured for endpoint '%s'\n", endpoint_name);
return CLI_FAILURE;
}
aors = ast_strdupa(endpoint->aors);
while ((aor_name = ast_strip(strsep(&aors, ",")))) {
struct sip_options_aor *aor_options;
aor_options = ao2_find(sip_options_aors, aor_name, OBJ_SEARCH_KEY);
if (!aor_options) {
continue;
}
ast_cli(a->fd, " * AOR '%s' on endpoint '%s'\n", aor_name, endpoint_name);
ast_cli(a->fd, " Qualify frequency : %d sec\n", aor_options->qualify_frequency);
ast_cli(a->fd, " Qualify timeout : %d ms\n", (int)(aor_options->qualify_timeout / 1000));
ast_cli(a->fd, " Authenticate qualify : %s\n", aor_options->authenticate_qualify?"yes":"no");
ast_cli(a->fd, "\n");
ao2_ref(aor_options, -1);
}
return CLI_SUCCESS;
}
static char *cli_show_qualify_aor(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
{
struct sip_options_aor *aor_options;
const char *aor_name;
switch (cmd) {
case CLI_INIT:
e->command = "pjsip show qualify aor";
e->usage =
"Usage: pjsip show qualify aor <id>\n"
" Show the PJSIP Aor current qualify options.\n";
return NULL;
case CLI_GENERATE:
return NULL;
}
if (a->argc != 5) {
return CLI_SHOWUSAGE;
}
aor_name = a->argv[4];
aor_options = ao2_find(sip_options_aors, aor_name, OBJ_SEARCH_KEY);
if (!aor_options) {
ast_cli(a->fd, "Unable to retrieve aor '%s' qualify options\n", aor_name);
return CLI_FAILURE;
}
ast_cli(a->fd, " * AOR '%s'\n", aor_name);
ast_cli(a->fd, " Qualify frequency : %d sec\n", aor_options->qualify_frequency);
ast_cli(a->fd, " Qualify timeout : %d ms\n", (int)(aor_options->qualify_timeout / 1000));
ast_cli(a->fd, " Authenticate qualify : %s\n", aor_options->authenticate_qualify?"yes":"no");
ao2_ref(aor_options, -1);
return CLI_SUCCESS;
}
static char *cli_reload_qualify_endpoint(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
{
RAII_VAR(struct ast_sip_endpoint *, endpoint, NULL, ao2_cleanup);
const char *endpoint_name;
char *aors;
char *aor_name;
switch (cmd) {
case CLI_INIT:
e->command = "pjsip reload qualify endpoint";
e->usage =
"Usage: pjsip reload qualify endpoint <id>\n"
" Synchronize the qualify options for all Aors on the PJSIP endpoint.\n";
return NULL;
case CLI_GENERATE:
return NULL;
}
if (a->argc != 5) {
return CLI_SHOWUSAGE;
}
endpoint_name = a->argv[4];
endpoint = ast_sorcery_retrieve_by_id(ast_sip_get_sorcery(), "endpoint",
endpoint_name);
if (!endpoint) {
ast_cli(a->fd, "Unable to retrieve endpoint %s\n", endpoint_name);
return CLI_FAILURE;
}
if (ast_strlen_zero(endpoint->aors)) {
ast_cli(a->fd, "No AORs configured for endpoint '%s'\n", endpoint_name);
return CLI_FAILURE;
}
aors = ast_strdupa(endpoint->aors);
while ((aor_name = ast_strip(strsep(&aors, ",")))) {
struct ast_sip_aor *aor;
aor = ast_sorcery_retrieve_by_id(ast_sip_get_sorcery(), "aor", aor_name);
if (!aor) {
continue;
}
ast_cli(a->fd, "Synchronizing AOR '%s' on endpoint '%s'\n", aor_name, endpoint_name);
ast_sip_push_task_wait_serializer(management_serializer,
sip_options_aor_observer_modified_task, aor);
ao2_ref(aor, -1);
}
return CLI_SUCCESS;
}
static char *cli_reload_qualify_aor(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
{
struct ast_sip_aor *aor;
const char *aor_name;
switch (cmd) {
case CLI_INIT:
e->command = "pjsip reload qualify aor";
e->usage =
"Usage: pjsip reload qualify aor <id>\n"
" Synchronize the PJSIP Aor qualify options.\n";
return NULL;
case CLI_GENERATE:
return NULL;
}
if (a->argc != 5) {
return CLI_SHOWUSAGE;
}
aor_name = a->argv[4];
aor = ast_sorcery_retrieve_by_id(ast_sip_get_sorcery(), "aor", aor_name);
if (!aor) {
ast_cli(a->fd, "Unable to retrieve aor '%s'\n", aor_name);
return CLI_FAILURE;
}
ast_cli(a->fd, "Synchronizing AOR '%s'\n", aor_name);
ast_sip_push_task_wait_serializer(management_serializer,
sip_options_aor_observer_modified_task, aor);
ao2_ref(aor, -1);
return CLI_SUCCESS;
}
static int ami_sip_qualify(struct mansession *s, const struct message *m)
{
const char *endpoint_name = astman_get_header(m, "Endpoint");
@ -2479,7 +2662,11 @@ static int ami_sip_qualify(struct mansession *s, const struct message *m)
}
static struct ast_cli_entry cli_options[] = {
AST_CLI_DEFINE(cli_qualify, "Send an OPTIONS request to a PJSIP endpoint")
AST_CLI_DEFINE(cli_qualify, "Send an OPTIONS request to a PJSIP endpoint"),
AST_CLI_DEFINE(cli_show_qualify_endpoint, "Show the current qualify options for all Aors on the PJSIP endpoint"),
AST_CLI_DEFINE(cli_show_qualify_aor, "Show the PJSIP Aor current qualify options"),
AST_CLI_DEFINE(cli_reload_qualify_endpoint, "Synchronize the qualify options for all Aors on the PJSIP endpoint"),
AST_CLI_DEFINE(cli_reload_qualify_aor, "Synchronize the PJSIP Aor qualify options"),
};
int ast_sip_format_contact_ami(void *obj, void *arg, int flags)