<p>George Joseph has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.asterisk.org/6617">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">bridge_softmix:  Forward TEXT frames<br><br>res_pjsip_messaging queues TEXT frames to the channel when it<br>receives an in-dialog MESSAGE from an endpoint and chan_pjsip will<br>send an MESSAGE when it gets a TEXT frame.  On a normal<br>point-to-point call, the frames are forwarded between the two<br>correctly.  bridge_softmix was not though so messages weren't<br>getting forwarded to conference bridge participants.<br><br>* bridge_softmix now does a ast_bridge_queue_everyone_else.  It also<br>forwards the frame back to the sender as a confirmation and to make<br>client side development a little easier.<br><br>Change-Id: Idacf5900bfd5f22ab8cd235aa56dfad090d18489<br>---<br>M bridges/bridge_softmix.c<br>M channels/chan_pjsip.c<br>M main/bridge_channel.c<br>M res/res_pjsip_messaging.c<br>4 files changed, 37 insertions(+), 4 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/17/6617/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">diff --git a/bridges/bridge_softmix.c b/bridges/bridge_softmix.c<br>index 5e0a485..55008d0 100644<br>--- a/bridges/bridge_softmix.c<br>+++ b/bridges/bridge_softmix.c<br>@@ -1103,6 +1103,25 @@<br> <br> /*!<br>  * \internal<br>+ * \brief Determine what to do with a text frame.<br>+ * \since 13.18.0<br>+ * \since 14.7.0<br>+ * \since 15.1.0<br>+ *<br>+ * \param bridge Which bridge is getting the frame<br>+ * \param bridge_channel Which channel is writing the frame.<br>+ * \param frame What is being written.<br>+ *<br>+ * \return Nothing<br>+ */<br>+static void softmix_bridge_write_text(struct ast_bridge *bridge, struct ast_bridge_channel *bridge_channel, struct ast_frame *frame)<br>+{<br>+    ast_bridge_queue_everyone_else(bridge, bridge_channel, frame);<br>+       ast_bridge_channel_queue_frame(bridge_channel, frame);<br>+}<br>+<br>+/*!<br>+ * \internal<br>  * \brief Determine what to do with a control frame.<br>  * \since 12.0.0<br>  *<br>@@ -1184,6 +1203,11 @@<br>     case AST_FRAME_VIDEO:<br>                 softmix_bridge_write_video(bridge, bridge_channel, frame);<br>            break;<br>+       case AST_FRAME_TEXT:<br>+         ast_debug(1, "Received TEXT frame from channel %s: %*.s\n",<br>+                        ast_channel_name(bridge_channel->chan), frame->datalen, (char *)frame->data.ptr);<br>+           softmix_bridge_write_text(bridge, bridge_channel, frame);<br>+            break;<br>        case AST_FRAME_CONTROL:<br>               res = softmix_bridge_write_control(bridge, bridge_channel, frame);<br>            break;<br>diff --git a/channels/chan_pjsip.c b/channels/chan_pjsip.c<br>index 7520c2b..2ac5b88 100644<br>--- a/channels/chan_pjsip.c<br>+++ b/channels/chan_pjsip.c<br>@@ -2517,8 +2517,6 @@<br>                    data->session->inv_session->cause,<br>                   pjsip_get_status_text(data->session->inv_session->cause)->ptr);<br>   } else {<br>-             ast_debug(3, "Sending in dialog SIP message\n");<br>-<br>                 ast_sip_create_request("MESSAGE", data->session->inv_session->dlg, data->session->endpoint, NULL, NULL, &tdata);<br>                 ast_sip_add_body(tdata, &body);<br>           ast_sip_send_request(tdata, data->session->inv_session->dlg, data->session->endpoint, NULL, NULL);<br>@@ -2537,6 +2535,8 @@<br>      struct ast_sip_channel_pvt *channel = ast_channel_tech_pvt(ast);<br>      struct sendtext_data *data = sendtext_data_create(channel->session, text);<br> <br>+     ast_debug(3, "Sending MESSAGE to %s: %s\n", ast_channel_name(ast), text);<br>+<br>        if (!data) {<br>          return -1;<br>    }<br>diff --git a/main/bridge_channel.c b/main/bridge_channel.c<br>index 89e5571..71e9c53 100644<br>--- a/main/bridge_channel.c<br>+++ b/main/bridge_channel.c<br>@@ -1053,7 +1053,10 @@<br>                bridge_frame_free(dup);<br>               return 0;<br>     }<br>-<br>+ if (fr->frametype == AST_FRAME_TEXT) {<br>+            ast_debug(3, "Queuing TEXT frame to %s: %*.s\n", ast_channel_name(bridge_channel->chan),<br>+                        fr->datalen, (char *)fr->data.ptr);<br>+    }<br>     AST_LIST_INSERT_TAIL(&bridge_channel->wr_queue, dup, frame_list);<br>      if (ast_alertpipe_write(bridge_channel->alert_pipe)) {<br>             ast_log(LOG_ERROR, "We couldn't write alert pipe for %p(%s)... something is VERY wrong\n",<br>@@ -2380,6 +2383,7 @@<br>       AST_LIST_TRAVERSE_SAFE_END;<br> <br>        ast_bridge_channel_unlock(bridge_channel);<br>+<br>         if (!fr) {<br>            /*<br>             * Wait some to reduce CPU usage from a tight loop<br>@@ -2403,6 +2407,11 @@<br>            break;<br>        case AST_FRAME_NULL:<br>          break;<br>+       case AST_FRAME_TEXT:<br>+         ast_debug(3, "Sending TEXT frame to %s: %*.s\n", ast_channel_name(bridge_channel->chan),<br>+                        fr->datalen, (char *)fr->data.ptr);<br>+            ast_sendtext(bridge_channel->chan, fr->data.ptr);<br>+              break;<br>        default:<br>              /* Assume that there is no mapped stream for this */<br>          num = -1;<br>diff --git a/res/res_pjsip_messaging.c b/res/res_pjsip_messaging.c<br>index b6e7a64..f8bd39c 100644<br>--- a/res/res_pjsip_messaging.c<br>+++ b/res/res_pjsip_messaging.c<br>@@ -778,7 +778,7 @@<br>           return 0;<br>     }<br> <br>- ast_debug(3, "Received in dialog SIP message\n");<br>+  ast_debug(3, "Received in-dialog MESSAGE from %s: %s\n", ast_channel_name(session->channel), buf);<br> <br>    memset(&f, 0, sizeof(f));<br>         f.frametype = AST_FRAME_TEXT;<br></pre><p>To view, visit <a href="https://gerrit.asterisk.org/6617">change 6617</a>. To unsubscribe, visit <a href="https://gerrit.asterisk.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.asterisk.org/6617"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: asterisk </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: Idacf5900bfd5f22ab8cd235aa56dfad090d18489 </div>
<div style="display:none"> Gerrit-Change-Number: 6617 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: George Joseph <gjoseph@digium.com> </div>