]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-3165
authorAnthony Minessale <anthm@freeswitch.org>
Tue, 22 Mar 2011 17:07:06 +0000 (12:07 -0500)
committerAnthony Minessale <anthm@freeswitch.org>
Tue, 22 Mar 2011 17:07:06 +0000 (12:07 -0500)
src/switch_rtp.c

index 22d0cfdfce41e31fa609cfe9d49546cae7d81d7c..e59810b05b719f044dc025b3251f35438829d7af 100644 (file)
@@ -2491,24 +2491,11 @@ static switch_status_t read_rtp_packet(switch_rtp_t *rtp_session, switch_size_t
                }
 
                rtp_session->stats.inbound.packet_count++;
-       }
-
-
-       if ((rtp_session->recv_te && rtp_session->recv_msg.header.pt == rtp_session->recv_te) || 
-               (*bytes < rtp_header_len && *bytes > 0) ||
-               switch_test_flag(rtp_session, SWITCH_RTP_FLAG_PROXY_MEDIA) || switch_test_flag(rtp_session, SWITCH_RTP_FLAG_UDPTL)) {
-               return SWITCH_STATUS_SUCCESS;
-       }
-
-
-       rtp_session->last_read_ts = ts;
 
-       
-       if (!switch_test_flag(rtp_session, SWITCH_RTP_FLAG_PROXY_MEDIA) && !switch_test_flag(rtp_session, SWITCH_RTP_FLAG_UDPTL)) {
-               
+               if (!switch_test_flag(rtp_session, SWITCH_RTP_FLAG_PROXY_MEDIA) && !switch_test_flag(rtp_session, SWITCH_RTP_FLAG_UDPTL)) {
 #ifdef ENABLE_ZRTP
-               /* ZRTP Recv */
-               if (*bytes) {
+                       /* ZRTP Recv */
+                       
                        unsigned int sbytes = (int) *bytes;
                        zrtp_status_t stat = 0;
 
@@ -2528,48 +2515,58 @@ static switch_status_t read_rtp_packet(switch_rtp_t *rtp_session, switch_size_t
                        default:
                                break;
                        }
-               }
 #endif
 
-               if (*bytes && switch_test_flag(rtp_session, SWITCH_RTP_FLAG_SECURE_RECV)) {
-                       int sbytes = (int) *bytes;
-                       err_status_t stat = 0;
-
-                       if (switch_test_flag(rtp_session, SWITCH_RTP_FLAG_SECURE_RECV_RESET)) {
-                               switch_clear_flag_locked(rtp_session, SWITCH_RTP_FLAG_SECURE_RECV_RESET);
-                               srtp_dealloc(rtp_session->recv_ctx);
-                               rtp_session->recv_ctx = NULL;
-                               if ((stat = srtp_create(&rtp_session->recv_ctx, &rtp_session->recv_policy))) {
-                                       switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error! RE-Activating Secure RTP RECV\n");
-                                       return SWITCH_STATUS_FALSE;
-                               } else {
-                                       switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "RE-Activating Secure RTP RECV\n");
-                                       rtp_session->srtp_errs = 0;
+                       if (switch_test_flag(rtp_session, SWITCH_RTP_FLAG_SECURE_RECV)) {
+                               int sbytes = (int) *bytes;
+                               err_status_t stat = 0;
+
+                               if (switch_test_flag(rtp_session, SWITCH_RTP_FLAG_SECURE_RECV_RESET)) {
+                                       switch_clear_flag_locked(rtp_session, SWITCH_RTP_FLAG_SECURE_RECV_RESET);
+                                       srtp_dealloc(rtp_session->recv_ctx);
+                                       rtp_session->recv_ctx = NULL;
+                                       if ((stat = srtp_create(&rtp_session->recv_ctx, &rtp_session->recv_policy))) {
+                                               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error! RE-Activating Secure RTP RECV\n");
+                                               return SWITCH_STATUS_FALSE;
+                                       } else {
+                                               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "RE-Activating Secure RTP RECV\n");
+                                               rtp_session->srtp_errs = 0;
+                                       }
                                }
-                       }
 
-                       if (!(*flags & SFF_PLC)) {
-                               stat = srtp_unprotect(rtp_session->recv_ctx, &rtp_session->recv_msg.header, &sbytes);
-                       }
+                               if (!(*flags & SFF_PLC)) {
+                                       stat = srtp_unprotect(rtp_session->recv_ctx, &rtp_session->recv_msg.header, &sbytes);
+                               }
 
-                       if (stat && rtp_session->recv_msg.header.pt != rtp_session->recv_te && rtp_session->recv_msg.header.pt != rtp_session->cng_pt) {
-                               if (++rtp_session->srtp_errs >= MAX_SRTP_ERRS) {
-                                       switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR,
-                                                                         "Error: SRTP unprotect failed with code %d%s\n", stat,
-                                                                         stat == err_status_replay_fail ? " (replay check failed)" : stat ==
-                                                                         err_status_auth_fail ? " (auth check failed)" : "");
-                                       return SWITCH_STATUS_FALSE;
+                               if (stat && rtp_session->recv_msg.header.pt != rtp_session->recv_te && rtp_session->recv_msg.header.pt != rtp_session->cng_pt) {
+                                       if (++rtp_session->srtp_errs >= MAX_SRTP_ERRS) {
+                                               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR,
+                                                                                 "Error: SRTP unprotect failed with code %d%s\n", stat,
+                                                                                 stat == err_status_replay_fail ? " (replay check failed)" : stat ==
+                                                                                 err_status_auth_fail ? " (auth check failed)" : "");
+                                               return SWITCH_STATUS_FALSE;
+                                       } else {
+                                               sbytes = 0;
+                                       }
                                } else {
-                                       sbytes = 0;
+                                       rtp_session->srtp_errs = 0;
                                }
-                       } else {
-                               rtp_session->srtp_errs = 0;
-                       }
 
-                       *bytes = sbytes;
+                               *bytes = sbytes;
+                       }
                }
        }
 
+
+       if ((rtp_session->recv_te && rtp_session->recv_msg.header.pt == rtp_session->recv_te) || 
+               (*bytes < rtp_header_len && *bytes > 0) ||
+               switch_test_flag(rtp_session, SWITCH_RTP_FLAG_PROXY_MEDIA) || switch_test_flag(rtp_session, SWITCH_RTP_FLAG_UDPTL)) {
+               return SWITCH_STATUS_SUCCESS;
+       }
+
+
+       rtp_session->last_read_ts = ts;
+       
        
        if (switch_test_flag(rtp_session, SWITCH_RTP_FLAG_BYTESWAP) && rtp_session->recv_msg.header.pt == rtp_session->rpayload) {
                switch_swap_linear((int16_t *)rtp_session->recv_msg.body, (int) *bytes - rtp_header_len);