From d8b084a8107e5883d4e613af34bb0987f1460ca1 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Sat, 21 Nov 2009 06:54:16 +0000 Subject: [PATCH] reset timestamp counter when we get new sdp etc because sonus likes to say ptime 20 and send 30ms timestamps in the 183 then once they say 200 ok with the same sdp they decide to actually send 20 for real this time FSRTP-8 git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@15597 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- src/mod/endpoints/mod_sofia/mod_sofia.c | 7 +++++-- src/mod/endpoints/mod_sofia/sofia.c | 4 ++++ src/mod/endpoints/mod_sofia/sofia_glue.c | 6 ++++++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/mod/endpoints/mod_sofia/mod_sofia.c b/src/mod/endpoints/mod_sofia/mod_sofia.c index 955d79e775..78d69e7ea6 100644 --- a/src/mod/endpoints/mod_sofia/mod_sofia.c +++ b/src/mod/endpoints/mod_sofia/mod_sofia.c @@ -813,7 +813,9 @@ static switch_status_t sofia_read_frame(switch_core_session_t *session, switch_f } if ((tech_pvt->read_frame.datalen % 10) == 0 && - sofia_test_pflag(tech_pvt->profile, PFLAG_AUTOFIX_TIMING) && tech_pvt->check_frames++ < MAX_CODEC_CHECK_FRAMES) { + sofia_test_pflag(tech_pvt->profile, PFLAG_AUTOFIX_TIMING) && tech_pvt->check_frames < MAX_CODEC_CHECK_FRAMES) { + tech_pvt->check_frames++; + if (!tech_pvt->read_impl.encoded_bytes_per_packet) { tech_pvt->check_frames = MAX_CODEC_CHECK_FRAMES; goto skip; @@ -853,7 +855,8 @@ static switch_status_t sofia_read_frame(switch_core_session_t *session, switch_f "This issue has so far been identified to happen on the following broken platforms/devices:\n" "Linksys/Sipura aka Cisco\n" "ShoreTel\n" - "Sonus/L3\n" + "Sonus/L3 (If you're really lucky, you may even get this message twice once they " + "answer and change it back again!! Go Sonus!)\n" "We will try to fix it but some of the devices on this list are so broken who knows what will happen..\n" , (int)tech_pvt->codec_ms, (int)codec_ms); diff --git a/src/mod/endpoints/mod_sofia/sofia.c b/src/mod/endpoints/mod_sofia/sofia.c index f54133325f..8bf2f2f50b 100644 --- a/src/mod/endpoints/mod_sofia/sofia.c +++ b/src/mod/endpoints/mod_sofia/sofia.c @@ -3259,6 +3259,10 @@ static void sofia_handle_sip_r_invite(switch_core_session_t *session, int status sofia_update_callee_id(session, profile, sip, SWITCH_FALSE); + if (sofia_test_pflag(tech_pvt->profile, PFLAG_AUTOFIX_TIMING)) { + tech_pvt->check_frames = 0; + } + } if (channel && sip && (status == 300 || status == 302 || status == 305) && switch_channel_test_flag(channel, CF_OUTBOUND)) { diff --git a/src/mod/endpoints/mod_sofia/sofia_glue.c b/src/mod/endpoints/mod_sofia/sofia_glue.c index e17b22d57e..3ee6f6f3de 100644 --- a/src/mod/endpoints/mod_sofia/sofia_glue.c +++ b/src/mod/endpoints/mod_sofia/sofia_glue.c @@ -1094,6 +1094,9 @@ switch_status_t sofia_glue_tech_proxy_remote_addr(private_object_t *tech_pvt) /* Reactivate the NAT buster flag. */ switch_rtp_set_flag(tech_pvt->video_rtp_session, SWITCH_RTP_FLAG_AUTOADJ); } + if (sofia_test_pflag(tech_pvt->profile, PFLAG_AUTOFIX_TIMING)) { + tech_pvt->check_frames = 0; + } } } } @@ -1120,6 +1123,9 @@ switch_status_t sofia_glue_tech_proxy_remote_addr(private_object_t *tech_pvt) /* Reactivate the NAT buster flag. */ switch_rtp_set_flag(tech_pvt->rtp_session, SWITCH_RTP_FLAG_AUTOADJ); } + if (sofia_test_pflag(tech_pvt->profile, PFLAG_AUTOFIX_TIMING)) { + tech_pvt->check_frames = 0; + } } }