]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
set rtp params in skinny for rtp flush on bridge
authorAnthony Minessale <anthm@freeswitch.org>
Wed, 26 Jun 2013 23:35:06 +0000 (18:35 -0500)
committerAnthony Minessale <anthm@freeswitch.org>
Wed, 26 Jun 2013 23:35:06 +0000 (18:35 -0500)
src/mod/endpoints/mod_skinny/mod_skinny.c
src/mod/endpoints/mod_skinny/skinny_server.c

index 889af65001f96ae9a04bfb550507447ce47a8ef6..7dff9b7209997e4bd4975a2c1bd5a7670f157651 100644 (file)
@@ -1051,27 +1051,40 @@ switch_status_t channel_receive_message(switch_core_session_t *session, switch_c
        private_t *tech_pvt = switch_core_session_get_private(session);
 
        switch (msg->message_id) {
-               case SWITCH_MESSAGE_INDICATE_ANSWER:
-                       switch_clear_flag_locked(tech_pvt, TFLAG_EARLY_MEDIA);
-                       return channel_answer_channel(session);
-
-               case SWITCH_MESSAGE_INDICATE_DISPLAY:
-                       skinny_session_send_call_info_all(session);
-                       return SWITCH_STATUS_SUCCESS;
-
-               case SWITCH_MESSAGE_INDICATE_PROGRESS:
-                       if (!switch_test_flag(tech_pvt, TFLAG_EARLY_MEDIA)) {
-                               /* early media */
-                               switch_set_flag_locked(tech_pvt, TFLAG_EARLY_MEDIA);
-                               return channel_answer_channel(session);
-                       }
-                       return SWITCH_STATUS_SUCCESS;
-
-               default:
-                       return SWITCH_STATUS_SUCCESS;
+       case SWITCH_MESSAGE_INDICATE_ANSWER:
+               switch_clear_flag_locked(tech_pvt, TFLAG_EARLY_MEDIA);
+               return channel_answer_channel(session);
+               
+       case SWITCH_MESSAGE_INDICATE_DISPLAY:
+               skinny_session_send_call_info_all(session);
+               break;
 
+       case SWITCH_MESSAGE_INDICATE_PROGRESS:
+               if (!switch_test_flag(tech_pvt, TFLAG_EARLY_MEDIA)) {
+                       /* early media */
+                       switch_set_flag_locked(tech_pvt, TFLAG_EARLY_MEDIA);
+                       return channel_answer_channel(session);
+               }
+               break;
+               
+       case SWITCH_MESSAGE_INDICATE_BRIDGE:
+               if (switch_rtp_ready(tech_pvt->rtp_session)) {
+                       rtp_flush_read_buffer(tech_pvt->rtp_session, SWITCH_RTP_FLUSH_STICK);
+               }
+               break;
+       case SWITCH_MESSAGE_INDICATE_UNBRIDGE:
+               if (switch_rtp_ready(tech_pvt->rtp_session)) {
+                       rtp_flush_read_buffer(tech_pvt->rtp_session, SWITCH_RTP_FLUSH_UNSTICK);
+               }
+               break;
+               
+       default:
+               break;
+                       
        }
 
+       return SWITCH_STATUS_SUCCESS;
+
 }
 
 /* Make sure when you have 2 sessions in the same scope that you pass the appropriate one to the routines
index 6d1f4b765d8a34ffb21b46da53ddf93d5e8754bc..02296298f19c506b1b2ad3dd745cc72e9463b410 100644 (file)
@@ -58,6 +58,8 @@ uint32_t soft_key_template_default_textids[] = {
        SKINNY_TEXTID_IDIVERT
 };
 
+#define TEXT_ID_LEN 20
+
 uint32_t soft_key_template_default_events[] = {
        SOFTKEY_REDIAL,
        SOFTKEY_NEWCALL,
@@ -1732,6 +1734,10 @@ switch_status_t skinny_handle_open_receive_channel_ack_message(listener_t *liste
                struct in_addr addr;
                switch_rtp_flag_t flags[SWITCH_RTP_FLAG_INVALID] = {0};
 
+               flags[SWITCH_RTP_FLAG_DATAWAIT]++;
+               flags[SWITCH_RTP_FLAG_AUTOADJ]++;
+               flags[SWITCH_RTP_FLAG_RAW_WRITE]++;
+
                tech_pvt = switch_core_session_get_private(session);
                channel = switch_core_session_get_channel(session);
 
@@ -1955,7 +1961,7 @@ switch_status_t skinny_handle_unregister(listener_t *listener, skinny_message_t
 
 switch_status_t skinny_handle_soft_key_template_request(listener_t *listener, skinny_message_t *request)
 {
-       int i;
+       size_t i;
        skinny_message_t *message;
 
        switch_assert(listener->profile);
@@ -1970,7 +1976,7 @@ switch_status_t skinny_handle_soft_key_template_request(listener_t *listener, sk
        message->data.soft_key_template.total_soft_key_count = 21;
 
        memset(message->data.soft_key_template.soft_key, 0, sizeof(message->data.soft_key_template));
-       for (i=0; i<sizeof(soft_key_template_default_textids); i++) {
+       for (i=0; i< TEXT_ID_LEN; i++) {
                char *label = skinny_textid2raw(soft_key_template_default_textids[i]);
                strcpy(message->data.soft_key_template.soft_key[i].soft_key_label, skinny_textid2raw(soft_key_template_default_textids[i]));
                switch_safe_free(label);