]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FSCORE-523
authorAnthony Minessale <anthony.minessale@gmail.com>
Fri, 8 Jan 2010 00:45:09 +0000 (00:45 +0000)
committerAnthony Minessale <anthony.minessale@gmail.com>
Fri, 8 Jan 2010 00:45:09 +0000 (00:45 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@16207 d0543943-73ff-0310-b7d9-9358b9ac24b2

libs/stfu/stfu.c
libs/stfu/stfu.h
src/switch_ivr.c
src/switch_rtp.c

index f4c7b42c4041092bb7b72393e25fe5115460566e..a43129e50a3d5ce2ed9975843b84aedbc0e4a20e 100644 (file)
@@ -178,7 +178,7 @@ static int16_t stfu_n_process(stfu_instance_t *i, stfu_queue_t *queue)
        return 0;
 }
 
-stfu_status_t stfu_n_add_data(stfu_instance_t *i, uint32_t ts, void *data, size_t datalen, int last)
+stfu_status_t stfu_n_add_data(stfu_instance_t *i, uint32_t ts, uint32_t pt, void *data, size_t datalen, int last)
 {
        uint32_t index;
        stfu_frame_t *frame;
@@ -203,10 +203,7 @@ stfu_status_t stfu_n_add_data(stfu_instance_t *i, uint32_t ts, void *data, size_
                if (stfu_n_process(i, i->out_queue) < 0) {
             if (i->in_queue->array_len == i->in_queue->array_size && i->out_queue->array_len == i->out_queue->array_size) {
                 stfu_n_resize(i, i->out_queue->array_size * 2);
-                printf("DOH RESIZE\n");
             }
-
-
                        //return STFU_IT_FAILED;
                }
                for(index = 0; index < i->out_queue->array_len; index++) {
@@ -226,6 +223,7 @@ stfu_status_t stfu_n_add_data(stfu_instance_t *i, uint32_t ts, void *data, size_
        }
 
        memcpy(frame->data, data, cplen);
+    frame->pt = pt;
        frame->ts = ts;
        frame->dlen = cplen;
        frame->was_read = 0;    
index 4d3eb61b07e1232174965e30d5d45d65fd1b1b42..dd47d49640e252c15d6322edd7ce4beb5a7422de 100644 (file)
@@ -74,6 +74,7 @@ typedef enum {
 
 struct stfu_frame {
        uint32_t ts;
+       uint32_t pt;
        uint8_t data[STFU_DATALEN];
        size_t dlen;
        uint8_t was_read;
@@ -97,12 +98,12 @@ void stfu_n_report(stfu_instance_t *i, stfu_report_t *r);
 void stfu_n_destroy(stfu_instance_t **i);
 stfu_instance_t *stfu_n_init(uint32_t qlen);
 stfu_status_t stfu_n_resize(stfu_instance_t *i, uint32_t qlen);
-stfu_status_t stfu_n_add_data(stfu_instance_t *i, uint32_t ts, void *data, size_t datalen, int last);
+stfu_status_t stfu_n_add_data(stfu_instance_t *i, uint32_t ts, uint32_t pt, void *data, size_t datalen, int last);
 stfu_frame_t *stfu_n_read_a_frame(stfu_instance_t *i);
 void stfu_n_reset(stfu_instance_t *i);
 
 #define stfu_im_done(i) stfu_n_add_data(i, 0, NULL, 0, 1)
-#define stfu_n_eat(i,t,d,l) stfu_n_add_data(i, t, d, l, 0)
+#define stfu_n_eat(i,t,p,d,l) stfu_n_add_data(i, t, p, d, l, 0)
 
 #ifdef __cplusplus
 }
index 5af24567852700f157cf08ad774818e8a3836069..a4a1ee653543e15f9e022748f3241776fa1b77e1 100644 (file)
@@ -2046,7 +2046,7 @@ SWITCH_DECLARE(void) switch_ivr_delay_echo(switch_core_session_t *session, uint3
                        break;
                }
 
-               stfu_n_eat(jb, ts, read_frame->data, read_frame->datalen);
+               stfu_n_eat(jb, ts, read_frame->payload, read_frame->data, read_frame->datalen);
                ts += interval;
 
                if ((jb_frame = stfu_n_read_a_frame(jb))) {
index d8e6ad83a63e018d17a32e5820314f49234f6a9c..9f972c92c18b1bba2facfc37b8889cb1c51d4560 100644 (file)
@@ -1763,12 +1763,18 @@ static switch_status_t read_rtp_packet(switch_rtp_t *rtp_session, switch_size_t
                rtp_session->stats.inbound.packet_count++;
        }
 
+       if (rtp_session->te && rtp_session->recv_msg.header.pt == rtp_session->te) {
+               return SWITCH_STATUS_SUCCESS;
+       }
+
+
        if (rtp_session->jb && rtp_session->recv_msg.header.version == 2 && *bytes) {
                if (rtp_session->recv_msg.header.m && rtp_session->recv_msg.header.pt != rtp_session->te) {
                        stfu_n_reset(rtp_session->jb);
                }
                
-               stfu_n_eat(rtp_session->jb, ntohl(rtp_session->recv_msg.header.ts), rtp_session->recv_msg.body, *bytes - rtp_header_len);                               
+               stfu_n_eat(rtp_session->jb, ntohl(rtp_session->recv_msg.header.ts), rtp_session->recv_msg.header.pt, 
+                                  rtp_session->recv_msg.body, *bytes - rtp_header_len);                                
                *bytes = 0;
                status = SWITCH_STATUS_FALSE;
        }
@@ -1783,7 +1789,8 @@ static switch_status_t read_rtp_packet(switch_rtp_t *rtp_session, switch_size_t
                        }
                        *bytes = jb_frame->dlen + rtp_header_len;
                        rtp_session->recv_msg.header.ts = htonl(jb_frame->ts);
-                       rtp_session->recv_msg.header.pt = rtp_session->payload;
+                       rtp_session->recv_msg.header.pt = jb_frame->pt;
+
                        status = SWITCH_STATUS_SUCCESS;
                }
        }