提交 cb42c09b authored 作者: cypromis's avatar cypromis

Merge branch 'master' of ssh://git.freeswitch.org/freeswitch

<configuration name="hash.conf" description="Hash Configuration">
<remotes>
<!-- List of hosts from where to pull usage data -->
<!-- <remote name="Test1" host="10.0.0.10" port="8021" password="ClueCon" interval="1000" /> -->
</remotes>
</configuration>
...@@ -307,7 +307,7 @@ static esl_status_t esl_event_base_add_header(esl_event_t *event, esl_stack_t st ...@@ -307,7 +307,7 @@ static esl_status_t esl_event_base_add_header(esl_event_t *event, esl_stack_t st
header = ALLOC(sizeof(*header)); header = ALLOC(sizeof(*header));
esl_assert(header); esl_assert(header);
if ((event->flags & EF_UNIQ_HEADERS)) { if ((event->flags & ESL_UNIQ_HEADERS)) {
esl_event_del_header(event, header_name); esl_event_del_header(event, header_name);
} }
......
...@@ -172,7 +172,7 @@ struct esl_event { ...@@ -172,7 +172,7 @@ struct esl_event {
}; };
typedef enum { typedef enum {
EF_UNIQ_HEADERS = (1 << 0) ESL_UNIQ_HEADERS = (1 << 0)
} esl_event_flag_t; } esl_event_flag_t;
......
...@@ -1158,12 +1158,12 @@ static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *sessi ...@@ -1158,12 +1158,12 @@ static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *sessi
sipvar = switch_channel_get_variable(channel, "sip_h_X-FreeTDM-ANI-TON"); sipvar = switch_channel_get_variable(channel, "sip_h_X-FreeTDM-ANI-TON");
if (sipvar) { if (sipvar) {
caller_data.ani.type = atoi(sipvar); caller_data.ani.type = (uint8_t)atoi(sipvar);
} }
sipvar = switch_channel_get_variable(channel, "sip_h_X-FreeTDM-ANI-Plan"); sipvar = switch_channel_get_variable(channel, "sip_h_X-FreeTDM-ANI-Plan");
if (sipvar) { if (sipvar) {
caller_data.ani.plan = atoi(sipvar); caller_data.ani.plan = (uint8_t)atoi(sipvar);
} }
sipvar = switch_channel_get_variable(channel, "sip_h_X-FreeTDM-ANI2"); sipvar = switch_channel_get_variable(channel, "sip_h_X-FreeTDM-ANI2");
...@@ -1178,12 +1178,12 @@ static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *sessi ...@@ -1178,12 +1178,12 @@ static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *sessi
sipvar = switch_channel_get_variable(channel, "sip_h_X-FreeTDM-DNIS-TON"); sipvar = switch_channel_get_variable(channel, "sip_h_X-FreeTDM-DNIS-TON");
if (sipvar) { if (sipvar) {
caller_data.dnis.type = atoi(sipvar); caller_data.dnis.type = (uint8_t)atoi(sipvar);
} }
sipvar = switch_channel_get_variable(channel, "sip_h_X-FreeTDM-DNIS-Plan"); sipvar = switch_channel_get_variable(channel, "sip_h_X-FreeTDM-DNIS-Plan");
if (sipvar) { if (sipvar) {
caller_data.dnis.plan = atoi(sipvar); caller_data.dnis.plan = (uint8_t)atoi(sipvar);
} }
sipvar = switch_channel_get_variable(channel, "sip_h_X-FreeTDM-RDNIS"); sipvar = switch_channel_get_variable(channel, "sip_h_X-FreeTDM-RDNIS");
...@@ -1193,22 +1193,22 @@ static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *sessi ...@@ -1193,22 +1193,22 @@ static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *sessi
sipvar = switch_channel_get_variable(channel, "sip_h_X-FreeTDM-RDNIS-TON"); sipvar = switch_channel_get_variable(channel, "sip_h_X-FreeTDM-RDNIS-TON");
if (sipvar) { if (sipvar) {
caller_data.rdnis.type = atoi(sipvar); caller_data.rdnis.type = (uint8_t)atoi(sipvar);
} }
sipvar = switch_channel_get_variable(channel, "sip_h_X-FreeTDM-RDNIS-Plan"); sipvar = switch_channel_get_variable(channel, "sip_h_X-FreeTDM-RDNIS-Plan");
if (sipvar) { if (sipvar) {
caller_data.rdnis.plan = atoi(sipvar); caller_data.rdnis.plan = (uint8_t)atoi(sipvar);
} }
sipvar = switch_channel_get_variable(channel, "sip_h_X-FreeTDM-Screen"); sipvar = switch_channel_get_variable(channel, "sip_h_X-FreeTDM-Screen");
if (sipvar) { if (sipvar) {
caller_data.screen = atoi(sipvar); caller_data.screen = (uint8_t)atoi(sipvar);
} }
sipvar = switch_channel_get_variable(channel, "sip_h_X-FreeTDM-Presentation"); sipvar = switch_channel_get_variable(channel, "sip_h_X-FreeTDM-Presentation");
if (sipvar) { if (sipvar) {
caller_data.pres = atoi(sipvar); caller_data.pres = (uint8_t)atoi(sipvar);
} }
} }
......
...@@ -1115,7 +1115,7 @@ static void *SWITCH_THREAD_FUNC ringall_thread_run(switch_thread_t *thread, void ...@@ -1115,7 +1115,7 @@ static void *SWITCH_THREAD_FUNC ringall_thread_run(switch_thread_t *thread, void
char nstr[256] = ""; char nstr[256] = "";
if (strcasecmp(codec, "PCMU") && strcasecmp(codec, "PCMA")) { if (strcasecmp(codec, "PCMU") && strcasecmp(codec, "PCMA")) {
switch_snprintf(nstr, sizeof(nstr), "%s@%si@%sh,PCMU,PCMA", codec, ptime, rate); switch_snprintf(nstr, sizeof(nstr), "%s@%si@%sh,PCMU@%di,PCMA@%di", codec, ptime, rate, ptime, ptime);
} else { } else {
switch_snprintf(nstr, sizeof(nstr), "%s@%si@%sh", codec, ptime, rate); switch_snprintf(nstr, sizeof(nstr), "%s@%si@%sh", codec, ptime, rate);
} }
......
LOCAL_CFLAGS=-I../../../../libs/esl/src/include
LOCAL_LDFLAGS=-L../../../../libs/esl -lesl
BASE=../../../..
include $(BASE)/build/modmake.rules
...@@ -98,8 +98,8 @@ static switch_status_t limit_state_handler(switch_core_session_t *session) ...@@ -98,8 +98,8 @@ static switch_status_t limit_state_handler(switch_core_session_t *session)
switch_limit_release(argv[x], session, NULL, NULL); switch_limit_release(argv[x], session, NULL, NULL);
} }
switch_core_event_hook_remove_state_change(session, limit_state_handler); switch_core_event_hook_remove_state_change(session, limit_state_handler);
/* Remove limit_realm variable so we register another hook if limit is called again */ /* Remove limit_backend variable so we register another hook if limit is called again */
switch_channel_set_variable(channel, "limit_realm", NULL); switch_channel_set_variable(channel, LIMIT_BACKEND_VARIABLE, NULL);
free(mydata); free(mydata);
} }
......
...@@ -2077,10 +2077,12 @@ static switch_status_t read_rtp_packet(switch_rtp_t *rtp_session, switch_size_t ...@@ -2077,10 +2077,12 @@ static switch_status_t read_rtp_packet(switch_rtp_t *rtp_session, switch_size_t
rtp_session->stats.inbound.packet_count++; rtp_session->stats.inbound.packet_count++;
} }
if (rtp_session->recv_te && rtp_session->recv_msg.header.pt == rtp_session->recv_te) { if ((rtp_session->recv_te && rtp_session->recv_msg.header.pt == rtp_session->recv_te) ||
*bytes < rtp_header_len ||
switch_test_flag(rtp_session, SWITCH_RTP_FLAG_PROXY_MEDIA) || switch_test_flag(rtp_session, SWITCH_RTP_FLAG_UDPTL)) {
return SWITCH_STATUS_SUCCESS; return SWITCH_STATUS_SUCCESS;
} }
if (rtp_session->jb && rtp_session->recv_msg.header.version == 2 && *bytes) { if (rtp_session->jb && rtp_session->recv_msg.header.version == 2 && *bytes) {
if (rtp_session->recv_msg.header.m && rtp_session->recv_msg.header.pt != rtp_session->recv_te && if (rtp_session->recv_msg.header.m && rtp_session->recv_msg.header.pt != rtp_session->recv_te &&
...@@ -2532,7 +2534,7 @@ static int rtp_common_read(switch_rtp_t *rtp_session, switch_payload_t *payload_ ...@@ -2532,7 +2534,7 @@ static int rtp_common_read(switch_rtp_t *rtp_session, switch_payload_t *payload_
if (switch_test_flag(rtp_session, SWITCH_RTP_FLAG_UDPTL)) { if (switch_test_flag(rtp_session, SWITCH_RTP_FLAG_UDPTL)) {
*flags |= SFF_UDPTL_PACKET; *flags |= SFF_UDPTL_PACKET;
} }
ret = (int) bytes; ret = (int) bytes;
goto end; goto end;
} }
...@@ -2540,6 +2542,12 @@ static int rtp_common_read(switch_rtp_t *rtp_session, switch_payload_t *payload_ ...@@ -2540,6 +2542,12 @@ static int rtp_common_read(switch_rtp_t *rtp_session, switch_payload_t *payload_
if (bytes) { if (bytes) {
rtp_session->missed_count = 0; rtp_session->missed_count = 0;
if (bytes < rtp_header_len) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Ignoring invalid RTP packet size of %ld bytes.\n", (long)bytes);
bytes = 0;
goto do_continue;
}
if (rtp_session->recv_msg.header.pt && (rtp_session->recv_msg.header.pt == rtp_session->cng_pt || rtp_session->recv_msg.header.pt == 13)) { if (rtp_session->recv_msg.header.pt && (rtp_session->recv_msg.header.pt == rtp_session->cng_pt || rtp_session->recv_msg.header.pt == 13)) {
return_cng_frame(); return_cng_frame();
} }
...@@ -2667,7 +2675,7 @@ static int rtp_common_read(switch_rtp_t *rtp_session, switch_payload_t *payload_ ...@@ -2667,7 +2675,7 @@ static int rtp_common_read(switch_rtp_t *rtp_session, switch_payload_t *payload_
we put up with as much as we can so we don't have to deal with being punished for we put up with as much as we can so we don't have to deal with being punished for
doing it right. Nice guys finish last! doing it right. Nice guys finish last!
*/ */
if (bytes && !switch_test_flag(rtp_session, SWITCH_RTP_FLAG_PROXY_MEDIA) && if (bytes > rtp_header_len && !switch_test_flag(rtp_session, SWITCH_RTP_FLAG_PROXY_MEDIA) &&
!switch_test_flag(rtp_session, SWITCH_RTP_FLAG_PASS_RFC2833) && rtp_session->recv_msg.header.pt == rtp_session->recv_te) { !switch_test_flag(rtp_session, SWITCH_RTP_FLAG_PASS_RFC2833) && rtp_session->recv_msg.header.pt == rtp_session->recv_te) {
switch_size_t len = bytes - rtp_header_len; switch_size_t len = bytes - rtp_header_len;
unsigned char *packet = (unsigned char *) rtp_session->recv_msg.body; unsigned char *packet = (unsigned char *) rtp_session->recv_msg.body;
...@@ -2959,7 +2967,9 @@ SWITCH_DECLARE(switch_status_t) switch_rtp_read(switch_rtp_t *rtp_session, void ...@@ -2959,7 +2967,9 @@ SWITCH_DECLARE(switch_status_t) switch_rtp_read(switch_rtp_t *rtp_session, void
*datalen = 0; *datalen = 0;
return SWITCH_STATUS_BREAK; return SWITCH_STATUS_BREAK;
} else { } else {
bytes -= rtp_header_len; if (bytes > rtp_header_len) {
bytes -= rtp_header_len;
}
} }
*datalen = bytes; *datalen = bytes;
...@@ -3069,7 +3079,7 @@ SWITCH_DECLARE(switch_status_t) switch_rtp_zerocopy_read_frame(switch_rtp_t *rtp ...@@ -3069,7 +3079,7 @@ SWITCH_DECLARE(switch_status_t) switch_rtp_zerocopy_read_frame(switch_rtp_t *rtp
if (bytes < 0) { if (bytes < 0) {
frame->datalen = 0; frame->datalen = 0;
return bytes == -2 ? SWITCH_STATUS_TIMEOUT : SWITCH_STATUS_GENERR; return bytes == -2 ? SWITCH_STATUS_TIMEOUT : SWITCH_STATUS_GENERR;
} else if (bytes == 0) { } else if (bytes < rtp_header_len) {
frame->datalen = 0; frame->datalen = 0;
return SWITCH_STATUS_BREAK; return SWITCH_STATUS_BREAK;
} else { } else {
...@@ -3098,7 +3108,9 @@ SWITCH_DECLARE(switch_status_t) switch_rtp_zerocopy_read(switch_rtp_t *rtp_sessi ...@@ -3098,7 +3108,9 @@ SWITCH_DECLARE(switch_status_t) switch_rtp_zerocopy_read(switch_rtp_t *rtp_sessi
*datalen = 0; *datalen = 0;
return SWITCH_STATUS_GENERR; return SWITCH_STATUS_GENERR;
} else { } else {
bytes -= rtp_header_len; if (bytes > rtp_header_len) {
bytes -= rtp_header_len;
}
} }
*datalen = bytes; *datalen = bytes;
...@@ -3126,7 +3138,9 @@ static int rtp_common_write(switch_rtp_t *rtp_session, ...@@ -3126,7 +3138,9 @@ static int rtp_common_write(switch_rtp_t *rtp_session,
send_msg->header.pt = rtp_session->te; send_msg->header.pt = rtp_session->te;
} }
data = send_msg->body; data = send_msg->body;
datalen -= rtp_header_len; if (datalen > rtp_header_len) {
datalen -= rtp_header_len;
}
} else { } else {
uint8_t m = 0; uint8_t m = 0;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论