switch_size_t len = sizeof(o);
switch_socket_sendto(rtp_session->sock_input, rtp_session->local_addr, 0, (void *) &o, &len);
- if (rtp_session->flags[SWITCH_RTP_FLAG_ENABLE_RTCP] && rtp_session->rtcp_sock_input) {
+ if (rtp_session->flags[SWITCH_RTP_FLAG_ENABLE_RTCP] && rtp_session->rtcp_sock_input && rtp_session->rtcp_sock_input != rtp_session->sock_input) {
switch_socket_sendto(rtp_session->rtcp_sock_input, rtp_session->rtcp_local_addr, 0, (void *) &o, &len);
}
}
}
if (rtp_session->flags[SWITCH_RTP_FLAG_ENABLE_RTCP]) {
- if (rtp_session->rtcp_sock_input) {
+ if (rtp_session->rtcp_sock_input && rtp_session->rtcp_sock_input != rtp_session->sock_input) {
ping_socket(rtp_session);
switch_socket_shutdown(rtp_session->rtcp_sock_input, SWITCH_SHUTDOWN_READWRITE);
}
- if (rtp_session->rtcp_sock_output && rtp_session->rtcp_sock_output != rtp_session->rtcp_sock_input) {
+ if (rtp_session->rtcp_sock_output && rtp_session->rtcp_sock_output != rtp_session->sock_output && rtp_session->rtcp_sock_output != rtp_session->rtcp_sock_input) {
switch_socket_shutdown(rtp_session->rtcp_sock_output, SWITCH_SHUTDOWN_READWRITE);
}
}
free_dtls(&(*rtp_session)->rtcp_dtls);
}
+ if ((*rtp_session)->rtcp_sock_input == (*rtp_session)->sock_input) {
+ (*rtp_session)->rtcp_sock_input = NULL;
+ }
+
+ if ((*rtp_session)->rtcp_sock_output == (*rtp_session)->sock_output) {
+ (*rtp_session)->rtcp_sock_output = NULL;
+ }
sock = (*rtp_session)->sock_input;
(*rtp_session)->sock_input = NULL;
if ((sock = (*rtp_session)->rtcp_sock_input)) {
(*rtp_session)->rtcp_sock_input = NULL;
switch_socket_close(sock);
+ }
- if ((*rtp_session)->rtcp_sock_output && (*rtp_session)->rtcp_sock_output != sock) {
- if ((sock = (*rtp_session)->rtcp_sock_output)) {
- (*rtp_session)->rtcp_sock_output = NULL;
- switch_socket_close(sock);
- }
- }
+ if ((*rtp_session)->rtcp_sock_output && (*rtp_session)->rtcp_sock_output != sock) {
+ sock = (*rtp_session)->rtcp_sock_output;
+ (*rtp_session)->rtcp_sock_output = NULL;
+ switch_socket_close(sock);
}
#ifdef ENABLE_SRTP