freetdm: Added E & M logic for routing success and fail regex parameters
This commit is contained in:
parent
bd4a5914dc
commit
f9007fb2b6
|
@ -2241,7 +2241,7 @@ static FIO_SIGNAL_CB_FUNCTION(on_fxo_signal)
|
||||||
{
|
{
|
||||||
switch_core_session_t *session = NULL;
|
switch_core_session_t *session = NULL;
|
||||||
switch_channel_t *channel = NULL;
|
switch_channel_t *channel = NULL;
|
||||||
ftdm_status_t status;
|
ftdm_status_t status = FTDM_SUCCESS;
|
||||||
uint32_t spanid;
|
uint32_t spanid;
|
||||||
uint32_t chanid;
|
uint32_t chanid;
|
||||||
ftdm_caller_data_t *caller_data;
|
ftdm_caller_data_t *caller_data;
|
||||||
|
@ -2296,6 +2296,45 @@ static FIO_SIGNAL_CB_FUNCTION(on_fxo_signal)
|
||||||
break;
|
break;
|
||||||
case FTDM_SIGEVENT_SIGSTATUS_CHANGED:
|
case FTDM_SIGEVENT_SIGSTATUS_CHANGED:
|
||||||
case FTDM_SIGEVENT_COLLECTED_DIGIT: /* Analog E&M */
|
case FTDM_SIGEVENT_COLLECTED_DIGIT: /* Analog E&M */
|
||||||
|
{
|
||||||
|
int span_id = ftdm_channel_get_span_id(sigmsg->channel);
|
||||||
|
char *dtmf = sigmsg->ev_data.collected.digits;
|
||||||
|
char *regex = SPAN_CONFIG[span_id].dial_regex;
|
||||||
|
char *fail_regex = SPAN_CONFIG[span_id].fail_dial_regex;
|
||||||
|
ftdm_caller_data_t *caller_data = ftdm_channel_get_caller_data(sigmsg->channel);
|
||||||
|
|
||||||
|
if (zstr(regex)) {
|
||||||
|
regex = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (zstr(fail_regex)) {
|
||||||
|
fail_regex = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
ftdm_log(FTDM_LOG_DEBUG, "got DTMF sig [%s]\n", dtmf);
|
||||||
|
switch_set_string(caller_data->collected, dtmf);
|
||||||
|
|
||||||
|
if ((regex || fail_regex) && !zstr(dtmf)) {
|
||||||
|
switch_regex_t *re = NULL;
|
||||||
|
int ovector[30];
|
||||||
|
int match = 0;
|
||||||
|
|
||||||
|
if (fail_regex) {
|
||||||
|
match = switch_regex_perform(dtmf, fail_regex, &re, ovector, sizeof(ovector) / sizeof(ovector[0]));
|
||||||
|
status = match ? FTDM_SUCCESS : FTDM_BREAK;
|
||||||
|
switch_regex_safe_free(re);
|
||||||
|
ftdm_log(FTDM_LOG_DEBUG, "DTMF [%s] vs fail regex %s %s\n", dtmf, fail_regex, match ? "matched" : "did not match");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (status == FTDM_SUCCESS && regex) {
|
||||||
|
match = switch_regex_perform(dtmf, regex, &re, ovector, sizeof(ovector) / sizeof(ovector[0]));
|
||||||
|
status = match ? FTDM_BREAK : FTDM_SUCCESS;
|
||||||
|
switch_regex_safe_free(re);
|
||||||
|
ftdm_log(FTDM_LOG_DEBUG, "DTMF [%s] vs dial regex %s %s\n", dtmf, regex, match ? "matched" : "did not match");
|
||||||
|
}
|
||||||
|
ftdm_log(FTDM_LOG_DEBUG, "returning %s to COLLECT event with DTMF %s\n", status == FTDM_SUCCESS ? "success" : "break", dtmf);
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
|
@ -2305,7 +2344,7 @@ static FIO_SIGNAL_CB_FUNCTION(on_fxo_signal)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return FTDM_SUCCESS;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
static FIO_SIGNAL_CB_FUNCTION(on_fxs_signal)
|
static FIO_SIGNAL_CB_FUNCTION(on_fxs_signal)
|
||||||
|
|
Loading…
Reference in New Issue