]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
res_stasis.c: Add compare function for bridges moh container
authorMichal Hajek <michal.hajek@daktela.com>
Wed, 16 Sep 2020 13:01:07 +0000 (15:01 +0200)
committerJoshua Colp <jcolp@sangoma.com>
Wed, 23 Sep 2020 14:59:02 +0000 (09:59 -0500)
Sometimes not play MOH on bridge.

ASTERISK-29081
Reported-by: Michal Hajek <michal.hajek@daktela.com>
Change-Id: I760c73e0c9be1d340303b5d1c18a00c4759e8232

res/res_stasis.c

index 7d05e8b2ebcdb85b0dead36c738db66cf4428da8..f16062bc2e4199a7ae646ffdd804c74746a3dc25 100644 (file)
@@ -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);