summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Mudgett <rmudgett@digium.com>2011-02-03 00:29:46 +0000
committerRichard Mudgett <rmudgett@digium.com>2011-02-03 00:29:46 +0000
commitf71322f239acc308d713a6a73aed0c6009fb9e77 (patch)
treeccf2529598d647d5b802c71c3627ed1f294c2c68
parent274032620051cf36d7bca098a85b25ae4a239515 (diff)
Merged revisions 305923 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.8 ................ r305923 | rmudgett | 2011-02-02 18:24:40 -0600 (Wed, 02 Feb 2011) | 24 lines Merged revisions 305889 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.6.2 ................ r305889 | rmudgett | 2011-02-02 18:15:07 -0600 (Wed, 02 Feb 2011) | 17 lines Merged revisions 305888 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r305888 | rmudgett | 2011-02-02 18:02:43 -0600 (Wed, 02 Feb 2011) | 8 lines Minor AST_FRAME_TEXT related issues. * Include the null terminator in the buffer length. When the frame is queued it is copied. If the null terminator is not part of the frame buffer length, the receiver could see garbage appended onto it. * Add channel lock protection with ast_sendtext(). * Fixed AMI SendText action ast_sendtext() return value check. ........ ................ ................ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@305939 65c4cc65-6c06-0410-ace0-fbb531ad65f3
-rw-r--r--apps/app_sendtext.c2
-rw-r--r--channels/chan_sip.c2
-rw-r--r--main/channel.c7
-rw-r--r--main/manager.c4
4 files changed, 9 insertions, 6 deletions
diff --git a/apps/app_sendtext.c b/apps/app_sendtext.c
index 99dbeea7e..2624fe505 100644
--- a/apps/app_sendtext.c
+++ b/apps/app_sendtext.c
@@ -98,10 +98,10 @@ static int sendtext_exec(struct ast_channel *chan, const char *data)
return 0;
}
status = "FAILURE";
- ast_channel_unlock(chan);
if (!ast_sendtext(chan, ast_str_buffer(str))) {
status = "SUCCESS";
}
+ ast_channel_unlock(chan);
pbx_builtin_setvar_helper(chan, "SENDTEXTSTATUS", status);
return 0;
}
diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index 760c2ce81..d5ee01345 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -15475,7 +15475,7 @@ static void receive_message(struct sip_pvt *p, struct sip_request *req)
f.subclass.integer = 0;
f.offset = 0;
f.data.ptr = buf;
- f.datalen = strlen(buf);
+ f.datalen = strlen(buf) + 1;
ast_queue_frame(p->owner, &f);
transmit_response(p, "202 Accepted", req); /* We respond 202 accepted, since we relay the message */
return;
diff --git a/main/channel.c b/main/channel.c
index 06ee8bb85..0cabf2d7e 100644
--- a/main/channel.c
+++ b/main/channel.c
@@ -4466,13 +4466,18 @@ char *ast_recvtext(struct ast_channel *chan, int timeout)
int ast_sendtext(struct ast_channel *chan, const char *text)
{
int res = 0;
+
+ ast_channel_lock(chan);
/* Stop if we're a zombie or need a soft hangup */
- if (ast_test_flag(chan, AST_FLAG_ZOMBIE) || ast_check_hangup(chan))
+ if (ast_test_flag(chan, AST_FLAG_ZOMBIE) || ast_check_hangup(chan)) {
+ ast_channel_unlock(chan);
return -1;
+ }
CHECK_BLOCKING(chan);
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;
}
diff --git a/main/manager.c b/main/manager.c
index 896c7b84c..40804bf31 100644
--- a/main/manager.c
+++ b/main/manager.c
@@ -3245,12 +3245,10 @@ static int action_sendtext(struct mansession *s, const struct message *m)
return 0;
}
- ast_channel_lock(c);
res = ast_sendtext(c, textmsg);
- ast_channel_unlock(c);
c = ast_channel_unref(c);
- if (res > 0) {
+ if (res >= 0) {
astman_send_ack(s, m, "Success");
} else {
astman_send_error(s, m, "Failure");