From 2bce21da88b63105b87a48443a2a353b690ed332 Mon Sep 17 00:00:00 2001 From: Michal Hajek Date: Wed, 16 Sep 2020 15:01:07 +0200 Subject: [PATCH] res_stasis.c: Add compare function for bridges moh container Sometimes not play MOH on bridge. ASTERISK-29081 Reported-by: Michal Hajek Change-Id: I760c73e0c9be1d340303b5d1c18a00c4759e8232 --- res/res_stasis.c | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/res/res_stasis.c b/res/res_stasis.c index 7d05e8b2eb..f16062bc2e 100644 --- a/res/res_stasis.c +++ b/res/res_stasis.c @@ -425,6 +425,33 @@ struct stasis_app_bridge_channel_wrapper { ); }; +/*! AO2 comparison function for bridges moh container */ +static int bridges_channel_compare(void *obj, void *arg, int flags) +{ + const struct stasis_app_bridge_channel_wrapper *object_left = obj; + const struct stasis_app_bridge_channel_wrapper *object_right = arg; + const char *right_key = arg; + int cmp; + + switch (flags & OBJ_SEARCH_MASK) { + case OBJ_SEARCH_OBJECT: + right_key = object_right->bridge_id; + case OBJ_SEARCH_KEY: + cmp = strcmp(object_left->bridge_id, right_key); + break; + case OBJ_SEARCH_PARTIAL_KEY: + cmp = strncmp(object_left->bridge_id, right_key, strlen(right_key)); + break; + default: + cmp = 0; + break; + } + if (cmp) { + return 0; + } + return CMP_MATCH; +} + static void stasis_app_bridge_channel_wrapper_destructor(void *obj) { struct stasis_app_bridge_channel_wrapper *wrapper = obj; @@ -2323,7 +2350,7 @@ static int load_module(void) BRIDGES_NUM_BUCKETS, bridges_hash, NULL, bridges_compare); app_bridges_moh = ao2_container_alloc_hash( AO2_ALLOC_OPT_LOCK_MUTEX, 0, - 37, bridges_channel_hash_fn, NULL, NULL); + 37, bridges_channel_hash_fn, NULL, bridges_channel_compare); app_bridges_playback = ao2_container_alloc_hash( AO2_ALLOC_OPT_LOCK_MUTEX, AO2_CONTAINER_ALLOC_OPT_DUPS_REJECT, 37, bridges_channel_hash_fn, bridges_channel_sort_fn, NULL);