pjsip_cli: Create pjsip show channel and contact, and general cli code cleanup.

Created the 'pjsip show channel' and 'pjsip show contact' commands.
Refactored out the hated ast_hashtab.  Replaced with ao2_container.
Cleaned up function naming.  Internal only, no public name changes.
Cleaned up whitespace and brace formatting in cli code.
Changed some NULL checking from "if"s to ast_asserts.
Fixed some register/unregister ordering to reduce deadlock potential.
Fixed ast_sip_location_add_contact where the 'name' buffer was too short.
Fixed some self-assignment issues in res_pjsip_outbound_registration.

(closes issue ASTERISK-23276)
Review: http://reviewboard.asterisk.org/r/3283/
........

Merged revisions 410287 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@410288 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
George Joseph
2014-03-08 16:50:36 +00:00
parent 5ca081e053
commit 3ff60b75b1
11 changed files with 751 additions and 388 deletions

View File

@@ -1832,12 +1832,61 @@ void ast_sorcery_observer_remove(const struct ast_sorcery *sorcery, const char *
sorcery_observer_remove, cbs);
}
int ast_sorcery_object_id_compare(const void *obj_left, const void *obj_right, int flags)
int ast_sorcery_object_id_sort(const void *obj, const void *arg, int flags)
{
if (!obj_left || !obj_right) {
return 0;
const char *right_key = arg;
int cmp;
switch (flags & OBJ_SEARCH_MASK) {
case OBJ_SEARCH_OBJECT:
right_key = ast_sorcery_object_get_id(arg);
/* Fall through */
case OBJ_SEARCH_KEY:
cmp = strcmp(ast_sorcery_object_get_id(obj), right_key);
break;
case OBJ_SEARCH_PARTIAL_KEY:
cmp = strncmp(ast_sorcery_object_get_id(obj), right_key, strlen(right_key));
break;
default:
cmp = 0;
break;
}
return strcmp(ast_sorcery_object_get_id(obj_left), ast_sorcery_object_get_id(obj_right));
return cmp;
}
int ast_sorcery_object_id_compare(void *obj, void *arg, int flags)
{
const char *right_key = arg;
int cmp = 0;
switch (flags & OBJ_SEARCH_MASK) {
case OBJ_SEARCH_OBJECT:
right_key = ast_sorcery_object_get_id(arg);
/* Fall through */
case OBJ_SEARCH_KEY:
if (strcmp(ast_sorcery_object_get_id(obj), right_key) == 0) {
cmp = CMP_MATCH | CMP_STOP;
}
break;
case OBJ_SEARCH_PARTIAL_KEY:
if (strncmp(ast_sorcery_object_get_id(obj), right_key, strlen(right_key)) == 0) {
cmp = CMP_MATCH;
}
break;
default:
cmp = 0;
break;
}
return cmp;
}
int ast_sorcery_object_id_hash(const void *obj, int flags) {
if (flags & OBJ_SEARCH_OBJECT) {
return ast_str_hash(ast_sorcery_object_get_id(obj));
} else if (flags & OBJ_SEARCH_KEY) {
return ast_str_hash(obj);
}
return -1;
}
struct ast_sorcery_object_type *ast_sorcery_get_object_type(const struct ast_sorcery *sorcery,