From 9d2af5071b4a0ee43b8633f3385d47f5290c2dea Mon Sep 17 00:00:00 2001 From: Terry Wilson Date: Mon, 29 Aug 2011 17:31:40 +0000 Subject: Merged revisions 333681 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/10 ........ r333681 | twilson | 2011-08-29 12:28:59 -0500 (Mon, 29 Aug 2011) | 7 lines Use realtime text when it is negotiated This patch make use of wirte_text() realtime text instead of send_text() if T.140 is in native formats. ASTERISK-17937 Review: https://reviewboard.asterisk.org/r/1356/ ........ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@333689 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- CHANGES | 4 ++++ main/channel.c | 22 +++++++++++++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index 59b5bffb0..c2ab9e50e 100644 --- a/CHANGES +++ b/CHANGES @@ -40,6 +40,10 @@ Text Messaging The MESSAGE() dialplan function and MessageSend() application have been added to go along with this functionality. More detailed usage information can be found on the Asterisk wiki (http://wiki.asterisk.org/). + * If real-time text support (T.140) is negotiated, it will be preferred for + sending text via the SendText application. For example, via SIP, messages + that were once sent via the SIP MESSAGE request would be sent via RTP if + T.140 text is negotiated for a call. Parking ------- diff --git a/main/channel.c b/main/channel.c index 1bc3b7977..b1d09a805 100644 --- a/main/channel.c +++ b/main/channel.c @@ -4586,9 +4586,29 @@ int ast_sendtext(struct ast_channel *chan, const char *text) ast_channel_unlock(chan); return -1; } + + if (ast_strlen_zero(text)) { + ast_channel_unlock(chan); + return 0; + } + CHECK_BLOCKING(chan); - if (chan->tech->send_text) + if (chan->tech->write_text && (ast_format_cap_has_type(chan->nativeformats, AST_FORMAT_TYPE_TEXT))) { + struct ast_frame f; + + f.frametype = AST_FRAME_TEXT; + f.src = "DIALPLAN"; + f.mallocd = AST_MALLOCD_DATA; + f.datalen = strlen(text); + f.data.ptr = ast_strdup(text); + f.offset = 0; + f.seqno = 0; + + ast_format_set(&f.subclass.format, AST_FORMAT_T140, 0); + res = chan->tech->write_text(chan, &f); + } else if (chan->tech->send_text) { res = chan->tech->send_text(chan, text); + } ast_clear_flag(chan, AST_FLAG_BLOCKING); ast_channel_unlock(chan); return res; -- cgit v1.2.3