diff --git a/channels/chan_skinny.c b/channels/chan_skinny.c index 727a51a15f1866529920148cadf2b27c00712bc7..fa861e97e428b6f96d4780b3dc4e307d1fd1b0c0 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);