mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-08-14 01:49:05 +00:00
fix queued dtmf on channels with no timer issue
This commit is contained in:
@@ -1341,19 +1341,22 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_send_dtmf(switch_core_sessio
|
||||
switch_assert(dtmf);
|
||||
|
||||
new_dtmf = *dtmf;
|
||||
|
||||
if (new_dtmf.duration > switch_core_max_dtmf_duration(0)) {
|
||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING, "%s EXCESSIVE DTMF DIGIT [%c] LEN [%d]\n",
|
||||
|
||||
if (new_dtmf.digit != 'w' && new_dtmf.digit != 'W') {
|
||||
if (new_dtmf.duration > switch_core_max_dtmf_duration(0)) {
|
||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING, "%s EXCESSIVE DTMF DIGIT [%c] LEN [%d]\n",
|
||||
switch_channel_get_name(session->channel), new_dtmf.digit, new_dtmf.duration);
|
||||
new_dtmf.duration = switch_core_max_dtmf_duration(0);
|
||||
} else if (new_dtmf.duration < switch_core_min_dtmf_duration(0)) {
|
||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING, "%s SHORT DTMF DIGIT [%c] LEN [%d]\n",
|
||||
switch_channel_get_name(session->channel), new_dtmf.digit, new_dtmf.duration);
|
||||
new_dtmf.duration = switch_core_max_dtmf_duration(0);
|
||||
} else if (new_dtmf.duration < switch_core_min_dtmf_duration(0)) {
|
||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING, "%s SHORT DTMF DIGIT [%c] LEN [%d]\n",
|
||||
switch_channel_get_name(session->channel), new_dtmf.digit, new_dtmf.duration);
|
||||
new_dtmf.duration = switch_core_min_dtmf_duration(0);
|
||||
} else if (!new_dtmf.duration) {
|
||||
new_dtmf.duration = switch_core_default_dtmf_duration(0);
|
||||
new_dtmf.duration = switch_core_min_dtmf_duration(0);
|
||||
}
|
||||
}
|
||||
|
||||
if (!new_dtmf.duration) {
|
||||
new_dtmf.duration = switch_core_default_dtmf_duration(0);
|
||||
}
|
||||
|
||||
if (!switch_test_flag(dtmf, DTMF_FLAG_SKIP_PROCESS)) {
|
||||
for (ptr = session->event_hooks.send_dtmf; ptr; ptr = ptr->next) {
|
||||
@@ -1444,18 +1447,23 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_send_dtmf_string(switch_core
|
||||
for (p = argv[i]; p && *p; p++) {
|
||||
if (is_dtmf(*p)) {
|
||||
dtmf.digit = *p;
|
||||
|
||||
if (dtmf.duration > switch_core_max_dtmf_duration(0)) {
|
||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING, "%s EXCESSIVE DTMF DIGIT [%c] LEN [%d]\n",
|
||||
switch_channel_get_name(session->channel), dtmf.digit, dtmf.duration);
|
||||
dtmf.duration = switch_core_max_dtmf_duration(0);
|
||||
} else if (dtmf.duration < switch_core_min_dtmf_duration(0)) {
|
||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING, "%s SHORT DTMF DIGIT [%c] LEN [%d]\n",
|
||||
switch_channel_get_name(session->channel), dtmf.digit, dtmf.duration);
|
||||
dtmf.duration = switch_core_min_dtmf_duration(0);
|
||||
} else if (!dtmf.duration) {
|
||||
|
||||
if (dtmf.digit != 'w' && dtmf.digit != 'W') {
|
||||
if (dtmf.duration > switch_core_max_dtmf_duration(0)) {
|
||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING, "%s EXCESSIVE DTMF DIGIT [%c] LEN [%d]\n",
|
||||
switch_channel_get_name(session->channel), dtmf.digit, dtmf.duration);
|
||||
dtmf.duration = switch_core_max_dtmf_duration(0);
|
||||
} else if (dtmf.duration < switch_core_min_dtmf_duration(0)) {
|
||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING, "%s SHORT DTMF DIGIT [%c] LEN [%d]\n",
|
||||
switch_channel_get_name(session->channel), dtmf.digit, dtmf.duration);
|
||||
dtmf.duration = switch_core_min_dtmf_duration(0);
|
||||
}
|
||||
}
|
||||
|
||||
if (!dtmf.duration) {
|
||||
dtmf.duration = switch_core_default_dtmf_duration(0);
|
||||
}
|
||||
|
||||
|
||||
if (switch_core_session_send_dtmf(session, &dtmf) == SWITCH_STATUS_SUCCESS) {
|
||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "%s send dtmf\ndigit=%c ms=%u samples=%u\n",
|
||||
|
Reference in New Issue
Block a user