diff options
author | Terry Wilson <twilson@digium.com> | 2011-08-29 17:31:40 +0000 |
---|---|---|
committer | Terry Wilson <twilson@digium.com> | 2011-08-29 17:31:40 +0000 |
commit | 9d2af5071b4a0ee43b8633f3385d47f5290c2dea (patch) | |
tree | 464d8cc6f6b1a662ef7adcfdb09ce995aa253aa6 | |
parent | a91b1149b92bdff05d3e1499c6ae75954bfeb770 (diff) |
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
-rw-r--r-- | CHANGES | 4 | ||||
-rw-r--r-- | main/channel.c | 22 |
2 files changed, 25 insertions, 1 deletions
@@ -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; |