summaryrefslogtreecommitdiff
path: root/main/sorcery.c
diff options
context:
space:
mode:
authorGeorge Joseph <george.joseph@fairview5.com>2014-03-08 16:50:36 +0000
committerGeorge Joseph <george.joseph@fairview5.com>2014-03-08 16:50:36 +0000
commit3ff60b75b144d70034a768fc7d7da4537bf7cd7a (patch)
tree41509c60312f10e14a72c4f3a6bf37bb85c06cb9 /main/sorcery.c
parent5ca081e05369e2611048ac942f6c48e4814e4fe2 (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.c57
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,