diff options
author | George Joseph <george.joseph@fairview5.com> | 2014-03-08 16:50:36 +0000 |
---|---|---|
committer | George Joseph <george.joseph@fairview5.com> | 2014-03-08 16:50:36 +0000 |
commit | 3ff60b75b144d70034a768fc7d7da4537bf7cd7a (patch) | |
tree | 41509c60312f10e14a72c4f3a6bf37bb85c06cb9 /main/sorcery.c | |
parent | 5ca081e05369e2611048ac942f6c48e4814e4fe2 (diff) |
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
Diffstat (limited to 'main/sorcery.c')
-rw-r--r-- | main/sorcery.c | 57 |
1 files changed, 53 insertions, 4 deletions
diff --git a/main/sorcery.c b/main/sorcery.c index 2bb925e2f..2ab4933be 100644 --- a/main/sorcery.c +++ b/main/sorcery.c @@ -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 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 strcmp(ast_sorcery_object_get_id(obj_left), ast_sorcery_object_get_id(obj_right)); + return -1; } struct ast_sorcery_object_type *ast_sorcery_get_object_type(const struct ast_sorcery *sorcery, |