|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
c028602 |
From 27281c691ee1b1c632fcfd8c99f7b4a2d9fa8921 Mon Sep 17 00:00:00 2001
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
79d1ed7 |
From: David Woodhouse <dwmw2@infradead.org>
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
79d1ed7 |
Date: Tue, 20 Sep 2011 09:21:47 -0500
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
c028602 |
Subject: [PATCH 8/9] Fix two problems with app_sms.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
79d1ed7 |
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
79d1ed7 |
Firstly, the 'flags' field on the stack in sms_exec() is
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
79d1ed7 |
uninitialised, causing it to use the wrong protocol in some cases.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
79d1ed7 |
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
79d1ed7 |
Secondly, when disconnect supervision is not working or
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
79d1ed7 |
inbanddisconnect=yes is set in chan_dahdi.conf, app_sms was failing to
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
79d1ed7 |
terminate the call after it sent the REL(ease) message and the peer
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
79d1ed7 |
stopped talking to it. This patch fixes the code to handle the 'bad
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
79d1ed7 |
stop bit' message more gracefully in that case, and hang up the call.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
79d1ed7 |
---
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
3ec7f26 |
apps/app_sms.c | 12 +++++++++---
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
3ec7f26 |
1 file changed, 9 insertions(+), 3 deletions(-)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
79d1ed7 |
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
79d1ed7 |
diff --git a/apps/app_sms.c b/apps/app_sms.c
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
c028602 |
index 08b90d1..b6c4ade 100644
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
79d1ed7 |
--- a/apps/app_sms.c
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
79d1ed7 |
+++ b/apps/app_sms.c
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
79d1ed7 |
@@ -216,6 +216,7 @@ static const unsigned short escapes[] = {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
79d1ed7 |
typedef struct sms_s {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
79d1ed7 |
unsigned char hangup; /*!< we are done... */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
79d1ed7 |
unsigned char err; /*!< set for any errors */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
79d1ed7 |
+ unsigned char sent_rel:1; /*!< have sent REL message... */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
79d1ed7 |
unsigned char smsc:1; /*!< we are SMSC */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
79d1ed7 |
unsigned char rx:1; /*!< this is a received message */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
79d1ed7 |
char queue[30]; /*!< queue name */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
79d1ed7 |
@@ -1464,6 +1465,7 @@ static void sms_nextoutgoing (sms_t * h)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
79d1ed7 |
} else {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
79d1ed7 |
h->omsg[0] = 0x94; /* SMS_REL */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
79d1ed7 |
h->omsg[1] = 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
79d1ed7 |
+ h->sent_rel = 1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
79d1ed7 |
}
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
79d1ed7 |
}
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
79d1ed7 |
sms_messagetx(h);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
79d1ed7 |
@@ -1801,8 +1803,12 @@ static void sms_process(sms_t * h, int samples, signed short *data)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
79d1ed7 |
h->iphasep -= 80;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
79d1ed7 |
if (h->ibitn++ == 9) { /* end of byte */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
79d1ed7 |
if (!bit) { /* bad stop bit */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
3ec7f26 |
- ast_log(LOG_NOTICE, "bad stop bit\n");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
79d1ed7 |
- h->ierr = 0xFF; /* unknown error */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
79d1ed7 |
+ if (h->sent_rel) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
79d1ed7 |
+ h->hangup = 1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
79d1ed7 |
+ } else {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
79d1ed7 |
+ ast_log(LOG_NOTICE, "bad stop bit\n");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
79d1ed7 |
+ h->ierr = 0xFF; /* unknown error */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
79d1ed7 |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
79d1ed7 |
} else {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
79d1ed7 |
if (h->ibytep < sizeof(h->imsg)) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
79d1ed7 |
h->imsg[h->ibytep] = h->ibytev;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
79d1ed7 |
@@ -1864,7 +1870,7 @@ static int sms_exec(struct ast_channel *chan, const char *data)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
79d1ed7 |
int res = -1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
79d1ed7 |
sms_t h = { 0 };
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
79d1ed7 |
/* argument parsing support */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
79d1ed7 |
- struct ast_flags flags;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
79d1ed7 |
+ struct ast_flags flags = { 0 };
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
79d1ed7 |
char *parse, *sms_opts[OPTION_ARG_ARRAY_SIZE] = { 0, };
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
79d1ed7 |
char *p;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
79d1ed7 |
AST_DECLARE_APP_ARGS(sms_args,
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
79d1ed7 |
--
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
c028602 |
1.7.12.1
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
79d1ed7 |
|