samples = tech_pvt->read_codec.implementation->samples_per_packet;
tech_pvt->read_frame.codec = &tech_pvt->read_codec;
tech_pvt->read_frame.datalen = samples * sizeof(int16_t);
+ tech_pvt->read_frame.buflen = samples * sizeof(int16_t);
tech_pvt->read_frame.samples = samples;
tech_pvt->read_frame.data = tech_pvt->null_buf;
switch_generate_sln_silence((int16_t *)tech_pvt->read_frame.data, tech_pvt->read_frame.samples, tech_pvt->read_codec.implementation->number_of_channels, 10000);
<load module="mod_tone_stream"/>
<load module="mod_dptools"/>
<load module="mod_sndfile"/>
+ <load module="mod_dialplan_xml"/>
+ <load module="mod_sndfile"/>
</modules>
</configuration>
<section name="dialplan" description="Regex/XML Dialplan">
<context name="default">
+ <extension name="loopback">
+ <condition field="destination_number" expression="^loopback$">
+ <action application="bridge" data="null/+1234"/>
+ </condition>
+ </extension>
+
<extension name="sample">
<condition>
<action application="info"/>
SSH_FLAG_STICKY
};
+static int application_hit = 0;
+
+static void loopback_group_confirm_event_handler(switch_event_t *event) // general event handler
+{
+ if (event->event_id == SWITCH_EVENT_CHANNEL_APPLICATION) {
+ application_hit++;
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "application_hit = %d\n", application_hit);
+ }
+}
+
FST_CORE_BEGIN("./conf")
{
FST_SUITE_BEGIN(switch_ivr_originate)
FST_SETUP_BEGIN()
{
fst_requires_module("mod_loopback");
+ application_hit = 0;
}
FST_SETUP_END()
switch_core_session_rwunlock(session);
}
FST_TEST_END()
+
+ FST_TEST_BEGIN(originate_test_group_confirm_loopback_endpoint_originate)
+ {
+ switch_core_session_t *session = NULL;
+ switch_channel_t *channel = NULL;
+ switch_status_t status;
+ switch_call_cause_t cause;
+ const char *dialstring = "[group_confirm_key=exec,group_confirm_file='event a=1']loopback/loopback";
+
+ switch_event_bind("test", SWITCH_EVENT_ALL, SWITCH_EVENT_SUBCLASS_ANY, loopback_group_confirm_event_handler, NULL);
+ status = switch_ivr_originate(NULL, &session, &cause, dialstring, 0, NULL, NULL, NULL, NULL, NULL, SOF_NONE, NULL, NULL);
+ fst_requires(status == SWITCH_STATUS_SUCCESS);
+ fst_requires(session);
+ switch_yield(1000000);
+ switch_channel_hangup(switch_core_session_get_channel(session), SWITCH_CAUSE_NORMAL_CLEARING);
+ switch_yield(1000000);
+ switch_core_session_rwunlock(session);
+ switch_event_unbind_callback(loopback_group_confirm_event_handler);
+ fst_check(application_hit == 1);
+ }
+ FST_TEST_END()
+
+ FST_SESSION_BEGIN(originate_test_group_confirm_loopback_endpoint_bridge)
+ {
+ switch_core_session_t *session = NULL;
+ switch_channel_t *channel = NULL;
+ switch_status_t status;
+ switch_call_cause_t cause;
+ const char *dialstring = "[group_confirm_key=exec,group_confirm_file='event a=1']loopback/loopback";
+
+ switch_event_bind("test", SWITCH_EVENT_ALL, SWITCH_EVENT_SUBCLASS_ANY, loopback_group_confirm_event_handler, NULL);
+
+ switch_core_session_execute_application(fst_session, "bridge", dialstring);
+ switch_yield(2000000);
+ switch_channel_hangup(fst_channel, SWITCH_CAUSE_NORMAL_CLEARING);
+ fst_check(application_hit == 1);
+ }
+ FST_SESSION_END()
}
FST_SUITE_END()
}