aboutsummaryrefslogtreecommitdiffstats
path: root/channels/chan_skinny.c
diff options
context:
space:
mode:
authorwedhorn <wedhorn@f38db490-d61c-443f-a65b-d21fe96a405b>2011-05-06 23:07:55 +0000
committerwedhorn <wedhorn@f38db490-d61c-443f-a65b-d21fe96a405b>2011-05-06 23:07:55 +0000
commit2d487374f0ae94293a7622214105ec5b94619456 (patch)
tree414f2b1b801ff00cd72f1366f25b047bd652e55a /channels/chan_skinny.c
parent621ac03e3f440f87c9047920ba0586202bb7c515 (diff)
Only allow voicemail if substate is OFFHOOK or no channel active (UNSET).
(closes issue #17901) Reported by: salecha git-svn-id: http://svn.digium.com/svn/asterisk/trunk@318019 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels/chan_skinny.c')
-rw-r--r--channels/chan_skinny.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/channels/chan_skinny.c b/channels/chan_skinny.c
index 9e1436f44..cd3ea4876 100644
--- a/channels/chan_skinny.c
+++ b/channels/chan_skinny.c
@@ -1185,6 +1185,7 @@ static int gendigittimeout = 8000;
/* How long to wait for an extra digit, if there is an ambiguous match */
static int matchdigittimeout = 3000;
+#define SUBSTATE_UNSET 0
#define SUBSTATE_OFFHOOK 1
#define SUBSTATE_ONHOOK 2
#define SUBSTATE_RINGOUT 3
@@ -4706,6 +4707,8 @@ static void setsubstate_offhook(struct skinny_subchannel *sub)
transmit_start_tone(d, SKINNY_DIALTONE, l->instance, sub->callid);
transmit_selectsoftkeys(d, l->instance, sub->callid, KEYDEF_OFFHOOK);
+ sub->substate = SUBSTATE_OFFHOOK;
+
/* start the switch thread */
if (ast_pthread_create(&t, NULL, skinny_ss, sub->owner)) {
ast_log(LOG_WARNING, "Unable to create switch thread: %s\n", strerror(errno));
@@ -5181,23 +5184,26 @@ static int handle_stimulus_message(struct skinny_req *req, struct skinnysession
/* XXX determine the best way to pull off a conference. Meetme? */
break;
case STIMULUS_VOICEMAIL:
- if (skinnydebug)
+ if (skinnydebug) {
ast_verb(1, "Received Stimulus: Voicemail(%d/%d)\n", instance, callreference);
+ }
if (!sub || !sub->owner) {
c = skinny_new(l, AST_STATE_DOWN, NULL, SKINNY_OUTGOING);
} else {
c = sub->owner;
}
+
if (!c) {
ast_log(LOG_WARNING, "Unable to create channel for %s@%s\n", l->name, d->name);
- } else {
- sub = c->tech_pvt;
+ break;
+ }
+
+ sub = c->tech_pvt;
+ if (sub->substate == SUBSTATE_UNSET || sub->substate == SUBSTATE_OFFHOOK){
l = sub->line;
l->activesub = sub;
-
setsubstate_dialing(sub,l->vmexten);
-
}
break;
case STIMULUS_CALLPARK: