]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
tweak
authorBrian West <brian@freeswitch.org>
Tue, 5 Oct 2010 14:59:13 +0000 (09:59 -0500)
committerBrian West <brian@freeswitch.org>
Tue, 5 Oct 2010 14:59:23 +0000 (09:59 -0500)
src/include/switch_types.h
src/switch_channel.c
src/switch_core_io.c

index 32fb141d42be29832f168cd2ee386970a9f9e345..5aecca74983d5a73d90de76caf727ebf9d7bc5ff 100644 (file)
@@ -123,6 +123,7 @@ SWITCH_BEGIN_EXTERN_C
 #define SWITCH_CURRENT_APPLICATION_VARIABLE "current_application"
 #define SWITCH_CURRENT_APPLICATION_DATA_VARIABLE "current_application_data"
 #define SWITCH_CURRENT_APPLICATION_RESPONSE_VARIABLE "current_application_response"
+#define SWITCH_PASSTHRU_PTIME_MISMATCH_VARIABLE "passthru_ptime_mismatch"
 #define SWITCH_ENABLE_HEARTBEAT_EVENTS_VARIABLE "enable_heartbeat_events"
 #define SWITCH_BYPASS_MEDIA_AFTER_BRIDGE_VARIABLE "bypass_media_after_bridge"
 #define SWITCH_READ_RESULT_VARIABLE "read_result"
@@ -1055,6 +1056,7 @@ typedef enum {
        CF_EARLY_HANGUP,
        CF_MEDIA_SET,
        CF_CONSUME_ON_ORIGINATE,
+       CF_PASSTHRU_PTIME_MISMATCH,
        /* WARNING: DO NOT ADD ANY FLAGS BELOW THIS LINE */
        CF_FLAG_MAX
 } switch_channel_flag_t;
index 81baa2f40da89ac014725704f4e12aea95d9104c..df5fd9627ee962c0e02dd840593ac5f271e635de 100644 (file)
@@ -2559,6 +2559,10 @@ SWITCH_DECLARE(switch_status_t) switch_channel_perform_mark_pre_answered(switch_
                        switch_core_session_execute_application(channel->session, app, arg);
                }
 
+               if ((var = switch_channel_get_variable(channel, SWITCH_PASSTHRU_PTIME_MISMATCH_VARIABLE))) {
+                       switch_channel_set_flag(channel, CF_PASSTHRU_PTIME_MISMATCH);
+               }
+
                /* if we're the child of another channel and the other channel is in a blocking read they will never realize we have answered so send 
                   a SWITCH_SIG_BREAK to interrupt any blocking reads on that channel
                 */
@@ -2686,6 +2690,10 @@ SWITCH_DECLARE(switch_status_t) switch_channel_perform_mark_answered(switch_chan
                switch_core_session_rwunlock(other_session);
        }
 
+       if ((var = switch_channel_get_variable(channel, SWITCH_PASSTHRU_PTIME_MISMATCH_VARIABLE))) {
+               switch_channel_set_flag(channel, CF_PASSTHRU_PTIME_MISMATCH);
+       }
+
        if ((var = switch_channel_get_variable(channel, SWITCH_ENABLE_HEARTBEAT_EVENTS_VARIABLE))) {
                uint32_t seconds = 60;
                int tmp;
index 1eb224bda1b56ba15fc899478b3e167f35df10ef..4ca8b2d8cb386c43af6319534dafa61e524594f3 100644 (file)
@@ -653,7 +653,8 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_write_frame(switch_core_sess
                if (session->write_impl.codec_id == frame->codec->implementation->codec_id ||
                        session->write_impl.microseconds_per_packet != frame->codec->implementation->microseconds_per_packet) {
                        ptime_mismatch = TRUE;
-                       if (switch_test_flag(frame->codec, SWITCH_CODEC_FLAG_PASSTHROUGH) || switch_test_flag(session->read_codec, SWITCH_CODEC_FLAG_PASSTHROUGH)) {
+                       if ((switch_test_flag(frame->codec, SWITCH_CODEC_FLAG_PASSTHROUGH) || switch_test_flag(session->read_codec, SWITCH_CODEC_FLAG_PASSTHROUGH)) ||
+                               switch_channel_test_flag(session->channel, CF_PASSTHRU_PTIME_MISMATCH)) {
                                status = perform_write(session, frame, flags, stream_id);
                                goto error;
                        }