]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
[Core] Fix duplicates in SDP
authorAndrey Volk <andywolk@gmail.com>
Wed, 30 Jun 2021 16:48:34 +0000 (19:48 +0300)
committerAndrey Volk <andywolk@gmail.com>
Sat, 23 Oct 2021 19:00:53 +0000 (22:00 +0300)
src/switch_core_media.c

index 69b0fc4cefc29edeed961e46167eff735aabc7d7..24497b7df170cf0939e89bce6668277f0ef881a0 100644 (file)
@@ -9903,15 +9903,11 @@ static void generate_m(switch_core_session_t *session, char *buf, size_t buflen,
                        }
                }
 
-               if (smh->ianacodes[i] < 128) {
-                       if (already_did[smh->ianacodes[i]]) {
-                               continue;
-                       }
-
-                       already_did[smh->ianacodes[i]] = 1;
+               if (smh->ianacodes[i] >= 128 || already_did[smh->ianacodes[i]]) {
+                       continue;
                }
 
-
+               already_did[smh->ianacodes[i]] = 1;
                switch_snprintf(buf + strlen(buf), buflen - strlen(buf), " %d", smh->ianacodes[i]);
        }
 
@@ -9921,8 +9917,13 @@ static void generate_m(switch_core_session_t *session, char *buf, size_t buflen,
                        if (a_engine) {
                                payload_map_t *pmap;
                                for (pmap = a_engine->payload_map; pmap; pmap = pmap->next) {
+                                       if (pmap->pt >= 128 || already_did[pmap->pt]) {
+                                               continue;
+                                       }
+
                                        if (!strncasecmp(pmap->iananame, "telephone-event", 15)) {
                                                switch_snprintf(buf + strlen(buf), buflen - strlen(buf), " %d", pmap->pt);
+                                               already_did[pmap->pt] = 1;
                                        }
                                }
                        }
@@ -9930,11 +9931,13 @@ static void generate_m(switch_core_session_t *session, char *buf, size_t buflen,
                        int i;
 
                        for (i = 0; i < smh->num_rates; i++) {
-                               if (smh->dtmf_ianacodes[i]) {
+                               if (smh->dtmf_ianacodes[i] < 128 && !already_did[smh->dtmf_ianacodes[i]]) {
                                        switch_snprintf(buf + strlen(buf), buflen - strlen(buf), " %d", smh->dtmf_ianacodes[i]);
+                                       already_did[smh->dtmf_ianacodes[i]] = 1;
                                }
-                               if (smh->cng_ianacodes[i] && !switch_media_handle_test_media_flag(smh, SCMF_SUPPRESS_CNG) && cng_type && use_cng) {
+                               if (smh->cng_ianacodes[i] < 128 && !already_did[smh->cng_ianacodes[i]] && !switch_media_handle_test_media_flag(smh, SCMF_SUPPRESS_CNG) && cng_type && use_cng) {
                                        switch_snprintf(buf + strlen(buf), buflen - strlen(buf), " %d", smh->cng_ianacodes[i]);
+                                       already_did[smh->cng_ianacodes[i]] = 1;
                                }
                        }
                }
@@ -9975,14 +9978,11 @@ static void generate_m(switch_core_session_t *session, char *buf, size_t buflen,
                        }
                }
 
-               if (smh->ianacodes[i] < 128) {
-                       if (already_did[smh->ianacodes[i]]) {
-                               continue;
-                       }
-
-                       already_did[smh->ianacodes[i]] = 1;
+               if (smh->ianacodes[i] >= 128 || already_did[smh->ianacodes[i]]) {
+                       continue;
                }
 
+               already_did[smh->ianacodes[i]] = 1;
                rate = imp->samples_per_second;
 
                if (map) {