summaryrefslogtreecommitdiff
path: root/channels
diff options
context:
space:
mode:
Diffstat (limited to 'channels')
-rw-r--r--channels/chan_skinny.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/channels/chan_skinny.c b/channels/chan_skinny.c
index 727a51a15..fa861e97e 100644
--- a/channels/chan_skinny.c
+++ b/channels/chan_skinny.c
@@ -3180,7 +3180,9 @@ static void *skinny_ss(void *data)
} else if (res == 0) {
ast_debug(1, "Not enough digits (%s) (and no ambiguous match)...\n", d->exten);
memset(d->exten, 0, sizeof(d->exten));
- transmit_tone(d, SKINNY_REORDER, l->instance, sub->callid);
+ if (l->hookstate == SKINNY_OFFHOOK) {
+ transmit_tone(d, SKINNY_REORDER, l->instance, sub->callid);
+ }
if (sub->owner && sub->owner->_state != AST_STATE_UP) {
ast_indicate(c, -1);
ast_hangup(c);
@@ -3190,9 +3192,11 @@ static void *skinny_ss(void *data)
((d->exten[0] != '*') || (!ast_strlen_zero(d->exten) > 2))) {
ast_log(LOG_WARNING, "Can't match [%s] from '%s' in context %s\n", d->exten, c->cid.cid_num ? c->cid.cid_num : "<Unknown Caller>", c->context);
memset(d->exten, 0, sizeof(d->exten));
- transmit_tone(d, SKINNY_REORDER, l->instance, sub->callid);
- /* hang out for 3 seconds to let congestion play */
- ast_safe_sleep(c, 3000);
+ if (l->hookstate == SKINNY_OFFHOOK) {
+ transmit_tone(d, SKINNY_REORDER, l->instance, sub->callid);
+ /* hang out for 3 seconds to let congestion play */
+ ast_safe_sleep(c, 3000);
+ }
break;
}
if (!timeout) {
@@ -3312,6 +3316,7 @@ static int skinny_hangup(struct ast_channel *ast)
transmit_closereceivechannel(d, sub);
transmit_stopmediatransmission(d, sub);
transmit_lamp_indication(d, STIMULUS_LINE, l->instance, SKINNY_LAMP_BLINK);
+ transmit_tone(d, SKINNY_SILENCE, l->instance, sub->callid);
} else { /* we are killing a background sub on the line with other subs*/
ast_verb(4,"Killing inactive sub %d\n", sub->callid);
if (AST_LIST_NEXT(sub, list)) {
@@ -3332,6 +3337,7 @@ static int skinny_hangup(struct ast_channel *ast)
transmit_stopmediatransmission(d, sub);
transmit_speaker_mode(d, SKINNY_SPEAKEROFF);
transmit_ringer_mode(d, SKINNY_RING_OFF);
+ transmit_tone(d, SKINNY_SILENCE, l->instance, sub->callid);
/* we should check to see if we can start the ringer if another line is ringing */
}
}
@@ -4579,9 +4585,9 @@ static int handle_offhook_message(struct skinny_req *req, struct skinnysession *
if (sub && sub->outgoing) {
/* We're answering a ringing call */
ast_queue_control(sub->owner, AST_CONTROL_ANSWER);
- transmit_callstateonly(d, sub, SKINNY_CONNECTED);
+ transmit_callstate(d, l->instance, SKINNY_OFFHOOK, sub->callid);
transmit_tone(d, SKINNY_SILENCE, l->instance, sub->callid);
- transmit_callstate(d, l->instance, SKINNY_CONNECTED, sub->callid);
+ transmit_callstateonly(d, sub, SKINNY_CONNECTED);
transmit_selectsoftkeys(d, l->instance, sub->callid, KEYDEF_CONNECTED);
start_rtp(sub);
ast_setstate(sub->owner, AST_STATE_UP);