]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-9278: sending sendonly instead of sendrecv media attribute in SDP when unholding...
authorMuhammad Zaka <muhammad.zaka@synety.com>
Fri, 1 Jul 2016 15:35:30 +0000 (16:35 +0100)
committerMuhammad Zaka <muhammad.zaka@synety.com>
Fri, 1 Jul 2016 15:36:22 +0000 (16:36 +0100)
src/switch_core_media.c

index 437f0dd4b9dd231ecd9d2c9bd3f977f7242ebfdc..591fab229abfc7f5e1d2f67f69f59c0953cac36a 100644 (file)
@@ -4069,6 +4069,9 @@ SWITCH_DECLARE(uint8_t) switch_core_media_negotiate_sdp(switch_core_session_t *s
 
                        if (!sendonly && (m->m_mode == sdp_sendonly || m->m_mode == sdp_inactive)) {
                                sendonly = 1;
+                               if (m->m_mode == sdp_inactive) {
+                                       inactive = 1;
+                               }
                        }
 
                        if (!sendonly && m->m_connections && m->m_connections->c_address && !strcmp(m->m_connections->c_address, "0.0.0.0")) {
@@ -4143,12 +4146,17 @@ SWITCH_DECLARE(uint8_t) switch_core_media_negotiate_sdp(switch_core_session_t *s
                        }
 
                        if (sdp_type == SDP_TYPE_RESPONSE) {
-                               if (sendonly) {
+                               if (inactive) {
+                                       // When freeswitch had previously sent inactive in sip request. it should remain inactive otherwise smode should be sendrecv
+                                       if (a_engine->smode==SWITCH_MEDIA_FLOW_INACTIVE) {
+                                               a_engine->smode = sdp_media_flow(sdp_inactive);
+                                       } else {
+                                               a_engine->smode = sdp_media_flow(sdp_sendrecv);
+                                       }
+                               } else if (sendonly) {
                                        a_engine->smode = sdp_media_flow(sdp_sendonly);
                                } else if (recvonly) {
                                        a_engine->smode = sdp_media_flow(sdp_recvonly);
-                               } else if (inactive) {
-                                       a_engine->smode = sdp_media_flow(sdp_inactive);
                                }
                        }