]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-11896: [core] stop media bugs from being possible to add to channels with no media...
authorAnthony Minessale <anthm@freeswitch.org>
Wed, 12 Jun 2019 19:41:07 +0000 (14:41 -0500)
committerAndrey Volk <andywolk@gmail.com>
Wed, 17 Jul 2019 20:26:45 +0000 (00:26 +0400)
libs/esl/src/esl_buffer.c
libs/freetdm/src/ftdm_buffer.c
src/switch_buffer.c
src/switch_core_media_bug.c

index ac4247791b71c66a06b3c7a0343c7be8d51c4aa7..61a04c0db8cd324d23bcfb5820f6f568b3405754 100644 (file)
@@ -58,14 +58,20 @@ ESL_DECLARE(esl_status_t) esl_buffer_create(esl_buffer_t **buffer, esl_size_t bl
        if (new_buffer) {
                memset(new_buffer, 0, sizeof(*new_buffer));
 
-               if (start_len) {
-                       new_buffer->data = malloc(start_len);
-                       if (!new_buffer->data) {
-                               free(new_buffer);
-                               return ESL_FAIL;
-                       }
-                       memset(new_buffer->data, 0, start_len);
+               if (!start_len) {
+                       start_len = 250;
+               }
+
+               if (!block_size) {
+                       block_size = start_len;
+               }
+               
+               new_buffer->data = malloc(start_len);
+               if (!new_buffer->data) {
+                       free(new_buffer);
+                       return ESL_FAIL;
                }
+               memset(new_buffer->data, 0, start_len);
 
                new_buffer->max_len = max_len;
                new_buffer->datalen = start_len;
index 48e8a3655490a508e4f83a3c1dbf24eba03fb793..e241d24568993453a47979a5d232cb42857e3bae 100644 (file)
@@ -57,15 +57,21 @@ FT_DECLARE(ftdm_status_t) ftdm_buffer_create(ftdm_buffer_t **buffer, ftdm_size_t
        if (new_buffer) {
                memset(new_buffer, 0, sizeof(*new_buffer));
 
-               if (start_len) {
-                       new_buffer->data = ftdm_malloc(start_len);
-                       if (!new_buffer->data) {
-                               ftdm_safe_free(new_buffer);
-                               return FTDM_MEMERR;
-                       }
-                       memset(new_buffer->data, 0, start_len);
+               if (!start_len) {
+                       start_len = 250;
                }
 
+               if (!block_size) {
+                       block_size = start_len;
+               }
+
+               new_buffer->data = ftdm_malloc(start_len);
+               if (!new_buffer->data) {
+                       ftdm_safe_free(new_buffer);
+                       return FTDM_MEMERR;
+               }
+               memset(new_buffer->data, 0, start_len);
+
                new_buffer->max_len = max_len;
                new_buffer->datalen = start_len;
                new_buffer->id = buffer_id++;
index 58e524490d9756191c3bb255914236536d1eacce..deaa7a0599b2bae652496b719cde9bb727ad9506 100644 (file)
@@ -118,14 +118,21 @@ SWITCH_DECLARE(switch_status_t) switch_buffer_create_dynamic(switch_buffer_t **b
        if ((new_buffer = malloc(sizeof(*new_buffer)))) {
                memset(new_buffer, 0, sizeof(*new_buffer));
 
-               if (start_len) {
-                       if (!(new_buffer->data = malloc(start_len))) {
-                               free(new_buffer);
-                               *buffer = NULL;
-                               return SWITCH_STATUS_MEMERR;
-                       }
-                       memset(new_buffer->data, 0, start_len);
+               if (!start_len) {
+                       start_len = 250;
+               }
+
+               if (!block_size) {
+                       block_size = start_len;
                }
+               
+               if (!(new_buffer->data = malloc(start_len))) {
+                       free(new_buffer);
+                       *buffer = NULL;
+                       return SWITCH_STATUS_MEMERR;
+               }
+
+               memset(new_buffer->data, 0, start_len);
 
                new_buffer->max_len = max_len;
                new_buffer->datalen = start_len;
index 9f10bf595548f57169455d20ec8947ca630b48df..7e54d7bfabb6b04ccdff8c07599d6ee3f9f36a49 100644 (file)
@@ -828,7 +828,9 @@ SWITCH_DECLARE(switch_status_t) switch_core_media_bug_add(switch_core_session_t
 
 
        if (!switch_channel_media_ready(session->channel)) {
-               if (switch_channel_pre_answer(session->channel) != SWITCH_STATUS_SUCCESS) {
+               if (switch_channel_direction(session->channel == SWITCH_CALL_DIRECTION_OUTBOUND) ||
+                       switch_channel_pre_answer(session->channel) != SWITCH_STATUS_SUCCESS) {
+                       switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "Cannot establish media. Media bug add failed.\n");
                        return SWITCH_STATUS_FALSE;
                }
        }
@@ -890,8 +892,11 @@ SWITCH_DECLARE(switch_status_t) switch_core_media_bug_add(switch_core_session_t
        }
 
        bug->stop_time = stop_time;
-       bytes = bug->read_impl.decoded_bytes_per_packet;
 
+       if (!(bytes = bug->read_impl.decoded_bytes_per_packet)) {
+               bytes = 320;
+       }
+       
        if (!bug->flags) {
                bug->flags = (SMBF_READ_STREAM | SMBF_WRITE_STREAM);
        }
@@ -1031,6 +1036,11 @@ SWITCH_DECLARE(switch_status_t) switch_core_media_bug_transfer_callback(switch_c
        switch_media_bug_t *new_bug = NULL, *cur = NULL, *bp = NULL, *last = NULL;
        int total = 0;
 
+       if (!switch_channel_media_ready(new_session->channel)) {
+               switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(orig_session), SWITCH_LOG_WARNING, "Cannot transfer media bugs to a channel with no media.\n");
+               return SWITCH_STATUS_FALSE;
+       }
+       
        switch_thread_rwlock_wrlock(orig_session->bug_rwlock);
        bp = orig_session->bugs;
        while (bp) {