diff options
Diffstat (limited to 'main/bridge_channel.c')
-rw-r--r-- | main/bridge_channel.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/main/bridge_channel.c b/main/bridge_channel.c index 3aac5eb25..eb4b9ad0e 100644 --- a/main/bridge_channel.c +++ b/main/bridge_channel.c @@ -56,6 +56,7 @@ #include "asterisk/test.h" #include "asterisk/sem.h" #include "asterisk/stream.h" +#include "asterisk/message.h" /*! * \brief Used to queue an action frame onto a bridge channel and write an action frame into a bridge. @@ -1055,6 +1056,20 @@ int ast_bridge_channel_queue_frame(struct ast_bridge_channel *bridge_channel, st return 0; } + if (DEBUG_ATLEAST(1)) { + if (fr->frametype == AST_FRAME_TEXT) { + ast_log(LOG_DEBUG, "Queuing TEXT frame to '%s': %*.s\n", ast_channel_name(bridge_channel->chan), + fr->datalen, (char *)fr->data.ptr); + } else if (fr->frametype == AST_FRAME_TEXT_DATA) { + struct ast_msg_data *msg = fr->data.ptr; + ast_log(LOG_DEBUG, "Queueing TEXT_DATA frame from '%s' to '%s:%s': %s\n", + ast_msg_data_get_attribute(msg, AST_MSG_DATA_ATTR_FROM), + ast_msg_data_get_attribute(msg, AST_MSG_DATA_ATTR_TO), + ast_channel_name(bridge_channel->chan), + ast_msg_data_get_attribute(msg, AST_MSG_DATA_ATTR_BODY)); + } + } + AST_LIST_INSERT_TAIL(&bridge_channel->wr_queue, dup, frame_list); if (ast_alertpipe_write(bridge_channel->alert_pipe)) { ast_log(LOG_ERROR, "We couldn't write alert pipe for %p(%s)... something is VERY wrong\n", @@ -2349,6 +2364,7 @@ static void bridge_channel_handle_write(struct ast_bridge_channel *bridge_channe struct ast_frame *fr; struct sync_payload *sync_payload; int num; + struct ast_msg_data *msg; ast_bridge_channel_lock(bridge_channel); @@ -2381,6 +2397,7 @@ static void bridge_channel_handle_write(struct ast_bridge_channel *bridge_channe AST_LIST_TRAVERSE_SAFE_END; ast_bridge_channel_unlock(bridge_channel); + if (!fr) { /* * Wait some to reduce CPU usage from a tight loop @@ -2404,6 +2421,20 @@ static void bridge_channel_handle_write(struct ast_bridge_channel *bridge_channe break; case AST_FRAME_NULL: break; + case AST_FRAME_TEXT: + ast_debug(1, "Sending TEXT frame to '%s': %*.s\n", + ast_channel_name(bridge_channel->chan), fr->datalen, (char *)fr->data.ptr); + ast_sendtext(bridge_channel->chan, fr->data.ptr); + break; + case AST_FRAME_TEXT_DATA: + msg = (struct ast_msg_data *)fr->data.ptr; + ast_debug(1, "Sending TEXT_DATA frame from '%s' to '%s:%s': %s\n", + ast_msg_data_get_attribute(msg, AST_MSG_DATA_ATTR_FROM), + ast_msg_data_get_attribute(msg, AST_MSG_DATA_ATTR_TO), + ast_channel_name(bridge_channel->chan), + ast_msg_data_get_attribute(msg, AST_MSG_DATA_ATTR_BODY)); + ast_sendtext_data(bridge_channel->chan, msg); + break; default: /* Assume that there is no mapped stream for this */ num = -1; |