static void echo_function(switch_core_session *session, char *data)
{
switch_channel *channel;
- switch_frame *frame;
- char *codec_name;
- switch_codec codec, *read_codec;
channel = switch_core_session_get_channel(session);
assert(channel != NULL);
- read_codec = switch_core_session_get_read_codec(session);
-
switch_channel_answer(channel);
- codec_name = "L16";
- if (switch_core_codec_init(&codec,
- codec_name,
- read_codec->implementation->samples_per_second,
- read_codec->implementation->microseconds_per_frame / 1000,
- read_codec->implementation->number_of_channels,
- SWITCH_CODEC_FLAG_ENCODE | SWITCH_CODEC_FLAG_DECODE,
- NULL, switch_core_session_get_pool(session)) == SWITCH_STATUS_SUCCESS) {
- switch_console_printf(SWITCH_CHANNEL_CONSOLE, "Raw Codec Activated\n");
- switch_core_session_set_read_codec(session, &codec);
- switch_core_session_set_write_codec(session, &codec);
- while(switch_channel_ready(channel)) {
- switch_core_session_read_frame(session, &frame, -1, 0);
- switch_core_session_write_frame(session, frame, -1 ,0);
- }
- }
+ switch_channel_set_state(channel, CS_LOOPBACK);
}
static const switch_application_interface echo_application_interface = {
extension->current_application = extension->current_application->next;
}
- switch_channel_set_state(session->channel, CS_HANGUP);
+ if (switch_channel_get_state(session->channel) == CS_EXECUTE) {
+ switch_channel_set_state(session->channel, CS_HANGUP);
+ }
}
static void switch_core_standard_on_loopback(switch_core_session *session)
if (state < CS_DONE && midstate == switch_channel_get_state(session->channel)) {
switch_thread_cond_wait(session->cond, session->mutex);
}
+
}
session->thread_running = 0;
}