33 #define DEFAULT_LEAD_FRAMES 10
42 #ifdef SWITCH_VIDEO_IN_THREADS
51 struct vid_helper *vh = obj;
56 int set_decoded_read = 0, refresh_timer = 0, playing_file = 0;
58 unsigned char *
buf = NULL;
60 int refresh_cnt = 300;
72 refresh_timer = refresh_cnt;
81 refresh_timer = refresh_cnt;
90 if (set_decoded_read) {
93 refresh_timer = refresh_cnt;
100 set_decoded_read = 1;
101 refresh_timer = refresh_cnt;
107 if (refresh_timer > 0 && (refresh_timer % 100) == 0) {
140 if (!blank_img && fr.
img) {
150 send_blank = blank_cnt;
151 refresh_timer = refresh_cnt;
170 send_blank = blank_cnt;
171 refresh_timer = refresh_cnt;
207 if (set_decoded_read) {
224 static void launch_video(
struct vid_helper *vh)
237 const char *name, *number, *p;
275 if ((p = strrchr(number,
'/'))) {
278 if ((p = strrchr(name,
'/'))) {
287 msg->
from = __FILE__;
316 int stream_id = 0, pre_b = 0, ans_a = 0, ans_b = 0, originator = 0;
323 uint32_t read_frame_count = 0;
324 const char *app_name = NULL, *app_arg = NULL;
325 int inner_bridge = 0, exec_check = 0;
329 const char *silence_var;
330 int silence_val = 0, bypass_media_after_bridge = 0;
331 const char *bridge_answer_timeout = NULL;
332 int bridge_filter_dtmf, answer_timeout, sent_update = 0;
333 time_t answer_limit = 0;
335 const char *exec_data = NULL;
338 #ifdef SWITCH_VIDEO_IN_THREADS
339 struct vid_helper vh = { 0 };
340 uint32_t vid_launch = 0;
376 if ((answer_timeout = atoi(bridge_answer_timeout)) < 0) {
395 goto end_of_bridge_loop;
398 if (bypass_media_after_bridge) {
402 if (!source_a) source_a =
"";
403 if (!source_b) source_b =
"";
407 bypass_media_after_bridge = 0;
415 goto end_of_bridge_loop;
421 if ((silence_val = atoi(silence_var)) < -1) {
441 silence_frame.
codec = &silence_codec;
442 silence_frame.
data = silence_data;
443 silence_frame.
buflen =
sizeof(silence_data);
464 goto end_of_bridge_loop;
468 goto end_of_bridge_loop;
475 goto end_of_bridge_loop;
479 goto end_of_bridge_loop;
486 hmsg.
from = __FILE__;
511 goto end_of_bridge_loop;
515 #ifdef SWITCH_VIDEO_IN_THREADS
518 vh.session_a = session_a;
519 vh.session_b = session_b;
550 exec_app = exec_data = NULL;
556 bypass_media_after_bridge = 0;
558 goto end_of_bridge_loop;
568 if (input_callback) {
576 goto end_of_bridge_loop;
580 if (bridge_filter_dtmf) {
593 if (input_callback) {
608 goto end_of_bridge_loop;
620 goto end_of_bridge_loop;
626 goto end_of_bridge_loop;
639 if (ans_a != ans_b) {
650 goto end_of_bridge_loop;
667 #ifndef SWITCH_VIDEO_IN_THREADS
673 goto end_of_bridge_loop;
689 read_frame = &silence_frame;
703 goto end_of_bridge_loop;
708 goto end_of_bridge_loop;
714 #ifdef SWITCH_VIDEO_IN_THREADS
758 #ifdef SWITCH_VIDEO_IN_THREADS
825 char *argv[4] = { 0 };
972 const char *other_uuid = NULL;
984 int ready_a, ready_b;
986 int max = 1000, loops = max;
998 if (state <
CS_HANGUP && state == running_state) {
1041 if (!ready_a || !ready_b) {
1048 if (ready_a && cid) {
1085 if (other_session) {
1087 other_session = NULL;
1145 msg->
from = __FILE__;
1149 switch_core_event_hook_remove_state_change(session,
hanguphook);
1167 msg.
from = __FILE__;
1170 switch_core_event_hook_add_state_change(session,
hanguphook);
1176 switch_core_event_hook_add_recv_dtmf(session,
sb_on_dtmf);
1207 "%s not hibernating due to active digit parser, semi-hibernation engaged.\n",
switch_channel_get_name(channel));
1239 switch_core_event_hook_remove_recv_dtmf(session,
sb_on_dtmf);
1425 void *peer_session_data)
1457 b_leg->
session = peer_session;
1482 const char *app, *data;
1551 msg.
from = __FILE__;
1630 if (copy_xml_cdr || copy_json_cdr) {
1631 char *cdr_text = NULL;
1643 if (copy_json_cdr) {
1690 msg.
from = __FILE__;
1712 explicit = !strcasecmp(hup,
"explicit");
1739 }
else if (answered) {
1846 swap_session = originator_session;
1847 originator_session = originatee_session;
1848 originatee_session = swap_session;
1850 swap_channel = originator_channel;
1851 originator_channel = originatee_channel;
1852 originatee_channel = swap_channel;
1927 #ifdef DEEP_DEBUG_CID
1950 #ifdef DEEP_DEBUG_CID
2060 const char *buuid, *var;
#define SWITCH_SIGNAL_BRIDGE_VARIABLE
switch_channel_state_t switch_channel_get_state(switch_channel_t *channel)
Get the current state of a channel in the state engine.
#define switch_event_fire(event)
Fire an event filling in most of the arguements with obvious values.
#define switch_channel_hangup(channel, hangup_cause)
Hangup a channel flagging it's state machine to end.
void switch_xml_free(_In_opt_ switch_xml_t xml)
frees the memory allocated for an switch_xml structure
#define switch_channel_answer(channel)
Answer a channel (initiate/acknowledge a successful connection)
switch_status_t switch_channel_execute_on(switch_channel_t *channel, const char *variable_prefix)
switch_event_types_t event_id
void switch_channel_set_flag_recursive(switch_channel_t *channel, switch_channel_flag_t flag)
#define SWITCH_CHANNEL_SESSION_LOG(x)
An Abstract Representation of a dialplan extension.
char * switch_xml_toxml(_In_ switch_xml_t xml, _In_ switch_bool_t prn_header)
Converts an switch_xml structure back to xml in html format. Returns a string of html data that \ mus...
#define SWITCH_LAST_BRIDGE_VARIABLE
switch_core_session_message_types_t message_id
void switch_core_session_reset(_In_ switch_core_session_t *session, switch_bool_t flush_dtmf, switch_bool_t reset_read_codec)
Reset the buffers and resampler on a session.
switch_status_t switch_channel_set_variable_name_printf(switch_channel_t *channel, const char *val, const char *fmt,...)
#define SWITCH_COPY_XML_CDR_VARIABLE
void switch_img_free(switch_image_t **img)
Close an image descriptor.
switch_core_session_t * session
#define SWITCH_PARK_AFTER_EARLY_BRIDGE_VARIABLE
const char * switch_channel_get_partner_uuid(switch_channel_t *channel)
#define switch_channel_set_state(channel, state)
Set the current state of a channel.
switch_status_t switch_channel_set_private(switch_channel_t *channel, const char *key, const void *private_info)
Set private data on channel.
const char * switch_channel_cause2str(_In_ switch_call_cause_t cause)
return a cause string for a given cause
void switch_channel_clear_state_flag(switch_channel_t *channel, switch_channel_flag_t flag)
#define SWITCH_TRANSFER_SOURCE_VARIABLE
#define SWITCH_API_BRIDGE_END_VARIABLE
static switch_status_t uuid_bridge_on_soft_execute(switch_core_session_t *session)
#define switch_channel_stop_broadcast(_channel)
void switch_channel_set_bridge_time(switch_channel_t *channel)
#define switch_channel_up(_channel)
#define SWITCH_RECOMMENDED_BUFFER_SIZE
void switch_event_add_presence_data_cols(switch_channel_t *channel, switch_event_t *event, const char *prefix)
void switch_channel_event_set_data(_In_ switch_channel_t *channel, _In_ switch_event_t *event)
Add information about a given channel to an event object.
switch_codec_t * switch_core_session_get_video_read_codec(_In_ switch_core_session_t *session)
Retrieve the video_read codec from a given session.
#define switch_core_strdup(_pool, _todup)
Copy a string using memory allocation from a given pool.
uint32_t decoded_bytes_per_packet
switch_status_t switch_core_session_read_video_frame(_In_ switch_core_session_t *session, switch_frame_t **frame, switch_io_flag_t flags, int stream_id)
Read a video frame from a session.
Representation of an event.
struct switch_ivr_bridge_data * other_leg_data
static void send_display(switch_core_session_t *session, switch_core_session_t *peer_session)
#define switch_channel_ready(_channel)
static switch_status_t audio_bridge_on_consume_media(switch_core_session_t *session)
switch_status_t switch_core_session_read_lock(_In_ switch_core_session_t *session)
Acquire a read lock on the session.
#define SWITCH_RTP_MAX_BUF_LEN
static const switch_state_handler_table_t uuid_bridge_state_handlers
switch_caller_profile_t * switch_caller_profile_clone(_In_ switch_core_session_t *session, _In_ switch_caller_profile_t *tocopy)
Clone an existing caller profile object.
void switch_generate_sln_silence(int16_t *data, uint32_t samples, uint32_t channels, uint32_t divisor)
Generate static noise.
switch_channel_state_t switch_channel_get_running_state(switch_channel_t *channel)
void switch_channel_flip_cid(switch_channel_t *channel)
#define switch_channel_media_ready(_channel)
#define switch_channel_outbound_display(_channel)
A representation of an XML tree.
switch_status_t switch_core_codec_destroy(switch_codec_t *codec)
Destroy an initalized codec handle.
const char * switch_channel_get_variable_dup(switch_channel_t *channel, const char *varname, switch_bool_t dup, int idx)
Retrieve a variable from a given channel.
const char * string_array_arg[MESSAGE_STRING_ARG_MAX]
static void cleanup_proxy_mode_b(switch_core_session_t *session)
void switch_channel_set_state_flag(switch_channel_t *channel, switch_channel_flag_t flag)
Set given flag(s) on a given channel to be applied on the next state change.
static switch_status_t sb_on_dtmf(switch_core_session_t *session, const switch_dtmf_t *dtmf, switch_dtmf_direction_t direction)
switch_status_t switch_core_session_queue_message(_In_ switch_core_session_t *session, _In_ switch_core_session_message_t *message)
Queue a message on a session.
switch_status_t switch_ivr_parse_all_events(switch_core_session_t *session)
Parse all commands from an event.
switch_status_t switch_ivr_media(const char *uuid, switch_media_flag_t flags)
Signal a session to request direct media access to it's remote end.
switch_status_t switch_core_session_execute_application_async(switch_core_session_t *session, const char *app, const char *arg)
static switch_thread_t * thread
#define SWITCH_CHANNEL_EXECUTE_ON_PRE_BRIDGE_VARIABLE
static int switch_true(const char *expr)
Evaluate the truthfullness of a string expression.
uint32_t switch_channel_test_flag(switch_channel_t *channel, switch_channel_flag_t flag)
Test for presence of given flag on a given channel.
switch_status_t switch_core_session_read_frame(_In_ switch_core_session_t *session, switch_frame_t **frame, switch_io_flag_t flags, int stream_id)
Read a frame from a session.
A message object designed to allow unlike technologies to exchange data.
switch_image_t * switch_img_alloc(switch_image_t *img, switch_img_fmt_t fmt, unsigned int d_w, unsigned int d_h, unsigned int align)
Open a descriptor, allocating storage for the underlying image.
#define SWITCH_COPY_JSON_CDR_VARIABLE
#define SWITCH_ORIGINATE_SIGNAL_BOND_VARIABLE
#define SWITCH_PARK_AFTER_BRIDGE_VARIABLE
switch_status_t switch_ivr_session_transfer(_In_ switch_core_session_t *session, const char *extension, const char *dialplan, const char *context)
Transfer an existing session to another location.
switch_status_t switch_core_session_write_frame(_In_ switch_core_session_t *session, switch_frame_t *frame, switch_io_flag_t flags, int stream_id)
Write a frame to a session.
void switch_channel_invert_cid(switch_channel_t *channel)
switch_status_t switch_core_session_get_read_impl(switch_core_session_t *session, switch_codec_implementation_t *impp)
_Ret_ switch_channel_t * switch_core_session_get_channel(_In_ switch_core_session_t *session)
Retrieve a pointer to the channel object associated with a given session.
switch_status_t switch_ivr_parse_next_event(switch_core_session_t *session)
#define SWITCH_HANGUP_AFTER_BRIDGE_VARIABLE
#define SWITCH_EXEC_AFTER_BRIDGE_APP_VARIABLE
#define SWITCH_CHANNEL_EXECUTE_ON_POST_BRIDGE_VARIABLE
void switch_channel_mark_hold(switch_channel_t *channel, switch_bool_t on)
void switch_channel_wait_for_state(switch_channel_t *channel, switch_channel_t *other_channel, switch_channel_state_t want_state)
void switch_caller_profile_event_set_data(_In_ switch_caller_profile_t *caller_profile, _In_opt_z_ const char *prefix, _In_ switch_event_t *event)
Add headers to an existing event in regards to a specific profile.
const switch_codec_implementation_t * implementation
switch_byte_t switch_byte_t * buf
#define SWITCH_BRIDGE_EXPORT_VARS_VARIABLE
#define switch_yield(ms)
Wait a desired number of microseconds and yield the CPU.
#define switch_channel_audio_sync(_c)
unsigned int switch_separate_string(_In_ char *buf, char delim, _Post_count_(return) char **array, unsigned int arraylen)
Separate a string into an array based on a character delimiter.
#define switch_channel_inbound_display(_channel)
char b_uuid[SWITCH_UUID_FORMATTED_LENGTH+1]
const char * callee_id_number
void switch_channel_process_export(switch_channel_t *channel, switch_channel_t *peer_channel, switch_event_t *var_event, const char *export_varname)
switch_status_t(* switch_input_callback_function_t)(switch_core_session_t *session, void *input, switch_input_type_t input_type, void *buf, unsigned int buflen)
switch_status_t switch_channel_add_variable_var_check(switch_channel_t *channel, const char *varname, const char *value, switch_bool_t var_check, switch_stack_t stack)
uint32_t actual_samples_per_second
switch_status_t switch_core_session_send_dtmf(_In_ switch_core_session_t *session, const switch_dtmf_t *dtmf)
Send DTMF to a session.
void switch_channel_clear_state_handler(switch_channel_t *channel, const switch_state_handler_table_t *state_handler)
clear a state handler table from a given channel
#define switch_channel_get_variable(_c, _v)
#define switch_channel_video_sync(_c)
switch_status_t switch_channel_dequeue_dtmf(_In_ switch_channel_t *channel, _In_ switch_dtmf_t *dtmf)
Retrieve DTMF digits from a given channel.
switch_status_t switch_event_add_header_string(switch_event_t *event, switch_stack_t stack, const char *header_name, const char *data)
Add a string header to an event.
#define DEFAULT_LEAD_FRAMES
const char * caller_id_name
#define switch_safe_free(it)
Free a pointer and set it to NULL unless it already is NULL.
#define SWITCH_BRIDGE_HANGUP_CAUSE_VARIABLE
switch_status_t switch_ivr_uuid_bridge(const char *originator_uuid, const char *originatee_uuid)
Bridge two existing sessions.
#define SWITCH_BRIDGE_UUID_VARIABLE
#define switch_channel_down_nosig(_channel)
#define SWITCH_API_BRIDGE_START_VARIABLE
void switch_channel_set_caller_extension(switch_channel_t *channel, switch_caller_extension_t *caller_extension)
Assign a caller extension to a given channel.
An abstraction of a data frame.
#define SWITCH_TRANSFER_AFTER_EARLY_BRIDGE_VARIABLE
void switch_caller_extension_add_application(_In_ switch_core_session_t *session, _In_ switch_caller_extension_t *caller_extension, _In_z_ const char *application_name, _In_z_ const char *extra_data)
Add an application (instruction) to the given extension.
void switch_channel_set_originator_caller_profile(switch_channel_t *channel, switch_caller_profile_t *caller_profile)
Set the given channel's originator caller profile.
static switch_status_t hanguphook(switch_core_session_t *session)
switch_codec_t * switch_core_session_get_video_write_codec(_In_ switch_core_session_t *session)
Retrieve the video_write codec from a given session.
switch_byte_t switch_byte_t uint32_t buflen
#define switch_core_codec_init(_codec, _codec_name, _modname, _fmtp, _rate, _ms, _channels, _flags, _codec_settings, _pool)
Initialize a codec handle.
void switch_cond_next(void)
#define switch_core_session_get_partner(_session, _partner)
int microseconds_per_packet
char * switch_copy_string(_Out_z_cap_(dst_size) char *dst, _In_z_ const char *src, _In_ switch_size_t dst_size)
void switch_color_set_rgb(switch_rgb_color_t *color, const char *color_str)
Set RGB color with a string.
#define SWITCH_BRIDGE_VARIABLE
static switch_status_t switch_event_create_plain(switch_event_t **event, switch_event_types_t event_id)
switch_caller_extension_t * switch_caller_extension_new(_In_ switch_core_session_t *session, _In_z_ const char *extension_name, _In_z_ const char *extension_number)
Create a new extension with desired parameters.
#define switch_core_session_receive_message(_session, _message)
void switch_core_session_rwunlock(_In_ switch_core_session_t *session)
Unlock a read or write lock on as given session.
void switch_core_session_video_reset(switch_core_session_t *session)
char * switch_core_session_get_uuid(_In_ switch_core_session_t *session)
Retrieve the unique identifier from a session.
switch_input_callback_function_t input_callback
static switch_status_t uuid_bridge_on_reset(switch_core_session_t *session)
static switch_status_t audio_bridge_on_exchange_media(switch_core_session_t *session)
static switch_status_t signal_bridge_on_hibernate(switch_core_session_t *session)
switch_status_t switch_core_session_write_video_frame(_In_ switch_core_session_t *session, switch_frame_t *frame, switch_io_flag_t flags, int stream_id)
Write a video frame to a session.
switch_channel_state_t
Channel States (these are the defaults, CS_SOFT_EXECUTE, CS_EXCHANGE_MEDIA, and CS_CONSUME_MEDIA are ...
switch_status_t switch_core_session_request_video_refresh(switch_core_session_t *session)
switch_status_t switch_ivr_3p_nomedia(const char *uuid, switch_media_flag_t flags)
#define switch_channel_down(_channel)
uint8_t number_of_channels
static switch_status_t signal_bridge_on_hangup(switch_core_session_t *session)
void switch_channel_step_caller_profile(switch_channel_t *channel)
switch_status_t switch_ivr_generate_json_cdr(switch_core_session_t *session, cJSON **json_cdr, switch_bool_t urlencode)
Generate an JSON CDR report.
switch_status_t
Common return values.
#define MESSAGE_STAMP_FFL(_m)
#define SWITCH_EXEC_AFTER_BRIDGE_ARG_VARIABLE
void * switch_channel_get_private(switch_channel_t *channel, const char *key)
Retrieve private from a given channel.
static void check_bridge_export(switch_channel_t *channel, switch_channel_t *peer_channel)
switch_status_t switch_core_session_dequeue_event(_In_ switch_core_session_t *session, _Out_ switch_event_t **event, switch_bool_t force)
DE-Queue an event on a given session.
static void transfer_after_bridge(switch_core_session_t *session, const char *where)
#define SWITCH_SIGNAL_BOND_VARIABLE
char * destination_number
switch_status_t switch_core_session_receive_event(_In_ switch_core_session_t *session, _Inout_ switch_event_t **event)
Send an event to a session translating it to it's native message format.
void switch_channel_set_originatee_caller_profile(switch_channel_t *channel, switch_caller_profile_t *caller_profile)
Set the given channel's originatee caller profile.
switch_size_t switch_channel_has_dtmf(_In_ switch_channel_t *channel)
Test for presence of DTMF on a given channel.
void switch_img_fill(switch_image_t *img, int x, int y, int w, int h, switch_rgb_color_t *color)
Fill image with color.
struct apr_thread_t switch_thread_t
#define switch_core_session_locate(uuid_str)
Locate a session based on it's uuid.
switch_ivr_dmachine_t * switch_core_session_get_dmachine(switch_core_session_t *session, switch_digit_action_target_t target)
#define switch_event_create(event, id)
Create a new event assuming it will not be custom event and therefore hiding the unused parameters...
uint32_t switch_core_session_private_event_count(_In_ switch_core_session_t *session)
Indicate the number of waiting private events on a session.
static void abort_call(switch_channel_t *caller_channel, switch_channel_t *peer_channel)
#define switch_channel_set_flag(_c, _f)
#define SWITCH_IMG_FMT_I420
void switch_ivr_bridge_display(switch_core_session_t *session, switch_core_session_t *peer_session)
switch_call_direction_t switch_channel_direction(switch_channel_t *channel)
static void cleanup_proxy_mode_a(switch_core_session_t *session)
#define SWITCH_TRANSFER_HISTORY_VARIABLE
#define switch_channel_media_ack(_channel)
static const switch_state_handler_table_t audio_bridge_peer_state_handlers
time_t switch_epoch_time_now(time_t *t)
Get the current epoch time.
const char * caller_id_number
int switch_channel_add_state_handler(switch_channel_t *channel, const switch_state_handler_table_t *state_handler)
add a state handler table to a given channel
#define switch_core_session_alloc(_session, _memory)
Allocate memory from a session's pool.
#define switch_test_flag(obj, flag)
Test for the existance of a flag on an arbitary object.
static switch_status_t audio_bridge_on_routing(switch_core_session_t *session)
void switch_channel_clear_flag_recursive(switch_channel_t *channel, switch_channel_flag_t flag)
void switch_log_printf(_In_ switch_text_channel_t channel, _In_z_ const char *file, _In_z_ const char *func, _In_ int line, _In_opt_z_ const char *userdata, _In_ switch_log_level_t level, _In_z_ _Printf_format_string_ const char *fmt,...) PRINTF_FUNCTION(7
Write log data to the logging engine.
const char * switch_stristr(const char *instr, const char *str)
A table of settings and callbacks that define a paticular implementation of a codec.
#define switch_channel_up_nosig(_channel)
switch_status_t switch_ivr_multi_threaded_bridge(switch_core_session_t *session, switch_core_session_t *peer_session, switch_input_callback_function_t input_callback, void *session_data, void *peer_session_data)
#define switch_core_session_strdup(_session, _todup)
Copy a string using memory allocation from a session's pool.
void switch_event_destroy(switch_event_t **event)
Destroy an event.
switch_status_t switch_channel_wait_for_flag(switch_channel_t *channel, switch_channel_flag_t want_flag, switch_bool_t pres, uint32_t to, switch_channel_t *super_channel)
void switch_channel_clear_flag(switch_channel_t *channel, switch_channel_flag_t flag)
Clear given flag(s) from a channel.
switch_status_t switch_ivr_signal_bridge(switch_core_session_t *session, switch_core_session_t *peer_session)
Bridge Signalling from one session to another.
char * switch_core_sprintf(_In_ switch_memory_pool_t *pool, _In_z_ _Printf_format_string_ const char *fmt,...)
printf-style style printing routine. The data is output to a string allocated from the pool ...
#define switch_channel_set_variable(_channel, _var, _val)
switch_status_t switch_ivr_generate_xml_cdr(switch_core_session_t *session, switch_xml_t *xml_cdr)
Generate an XML CDR report.
#define switch_channel_pre_answer(channel)
Indicate progress on a channel to attempt early media.
switch_caller_profile_t * switch_channel_get_caller_profile(switch_channel_t *channel)
Retrieve the given channel's caller profile.
#define switch_core_session_kill_channel(session, sig)
Send a signal to a channel.
switch_status_t switch_channel_api_on(switch_channel_t *channel, const char *variable_prefix)
#define SWITCH_TRANSFER_AFTER_BRIDGE_VARIABLE
void cJSON_Delete(cJSON *c)
char * switch_channel_get_name(switch_channel_t *channel)
Retrieve the name of a given channel.
switch_status_t switch_channel_pass_callee_id(switch_channel_t *channel, switch_channel_t *other_channel)
#define SWITCH_READ_ACCEPTABLE(status)
#define switch_channel_media_up(_channel)
static const switch_state_handler_table_t signal_bridge_state_handlers
const char * callee_id_name
switch_memory_pool_t * switch_core_session_get_pool(_In_ switch_core_session_t *session)
Retrieve the memory pool from a session.
char * cJSON_PrintUnformatted(cJSON *item)
#define SWITCH_UUID_FORMATTED_LENGTH
#define SWITCH_BRIDGE_CHANNEL_VARIABLE
switch_call_cause_t switch_channel_get_cause(_In_ switch_channel_t *channel)
return the cause code for a given channel
#define SWITCH_UUID_BRIDGE
static void * audio_bridge_thread(switch_thread_t *thread, void *obj)
switch_status_t switch_ivr_parse_all_messages(switch_core_session_t *session)
switch_memory_pool_t * pool
static switch_status_t uuid_bridge_on_hibernate(switch_core_session_t *session)
void switch_channel_handle_cause(switch_channel_t *channel, switch_call_cause_t cause)