res_pjsip: Add "like" processing to pjsip list and show commands

Add the ability to filter output from pjsip list and show commands
using the "like" predicate like chan_sip.

For endpoints, aors, auths, registrations, identifyies and transports,
the modification was a simple change of an ast_sorcery_retrieve_by_fields
call to ast_sorcery_retrieve_by_regex.  For channels and contacts a
little more work had to be done because neither of those objects are
true sorcery objects.  That was just removing the non-matching object
from the final container.  Of course, a little extra plumbing in the
common pjsip_cli code was needed to parse the "like" and pass the regex
to the get_container callbacks.

Some of the get_container code in res_pjsip_endpoint_identifier was also
refactored for simplicity.

ASTERISK-25477 #close
Reported by: Bryant Zimmerman
Tested by: George Joseph

Change-Id: I646d9326b778aac26bb3e2bcd7fa1346d24434f1
This commit is contained in:
George Joseph
2015-10-20 15:02:30 -06:00
parent d818e6edce
commit 162acd45f7
9 changed files with 143 additions and 90 deletions

View File

@@ -633,13 +633,13 @@ static int tos_to_str(const void *obj, const intptr_t *args, char **buf)
return 0;
}
static struct ao2_container *cli_get_container(void)
static struct ao2_container *cli_get_container(const char *regex)
{
RAII_VAR(struct ao2_container *, container, NULL, ao2_cleanup);
struct ao2_container *s_container;
container = ast_sorcery_retrieve_by_fields(ast_sip_get_sorcery(), "transport",
AST_RETRIEVE_FLAG_MULTIPLE | AST_RETRIEVE_FLAG_ALL, NULL);
container = ast_sorcery_retrieve_by_regex(ast_sip_get_sorcery(), "transport",
regex);
if (!container) {
return NULL;
}
@@ -720,12 +720,14 @@ static struct ast_cli_entry cli_commands[] = {
AST_CLI_DEFINE(handle_pjsip_list_ciphers, "List available OpenSSL cipher names"),
AST_CLI_DEFINE(ast_sip_cli_traverse_objects, "List PJSIP Transports",
.command = "pjsip list transports",
.usage = "Usage: pjsip list transports\n"
" List the configured PJSIP Transports\n"),
.usage = "Usage: pjsip list transports [ like <pattern> ]\n"
" List the configured PJSIP Transports\n"
" Optional regular expression pattern is used to filter the list.\n"),
AST_CLI_DEFINE(ast_sip_cli_traverse_objects, "Show PJSIP Transports",
.command = "pjsip show transports",
.usage = "Usage: pjsip show transports\n"
" Show the configured PJSIP Transport\n"),
.usage = "Usage: pjsip show transports [ like <pattern> ]\n"
" Show the configured PJSIP Transport\n"
" Optional regular expression pattern is used to filter the list.\n"),
AST_CLI_DEFINE(ast_sip_cli_traverse_objects, "Show PJSIP Transport",
.command = "pjsip show transport",
.usage = "Usage: pjsip show transport <id>\n"