diff --git a/channels/chan_skinny.c b/channels/chan_skinny.c index 01ed1b3e894c33987bf487c374cb61f3546beafc..570bf28779454cf3e9b5455c8a6409e966fd5c06 100644 --- a/channels/chan_skinny.c +++ b/channels/chan_skinny.c @@ -3125,25 +3125,6 @@ static void update_connectedline(struct skinny_subchannel *sub, const void *data SKINNY_DEBUG(DEBUG_SUB, 3, "Sub %d - Updating\n", sub->callid); send_callinfo(sub); - if (ast_channel_state(sub->owner) == AST_STATE_UP) { - transmit_callstate(d, l->instance, sub->callid, SKINNY_CONNECTED); - transmit_displaypromptstatus(d, "Connected", 0, l->instance, sub->callid); - } else { - if (sub->calldirection == SKINNY_INCOMING) { - transmit_callstate(d, l->instance, sub->callid, SKINNY_RINGIN); - transmit_displaypromptstatus(d, "Ring-In", 0, l->instance, sub->callid); - } else { - if (!sub->ringing) { - transmit_callstate(d, l->instance, sub->callid, SKINNY_RINGOUT); - transmit_displaypromptstatus(d, "Ring-Out", 0, l->instance, sub->callid); - sub->ringing = 1; - } else { - transmit_callstate(d, l->instance, sub->callid, SKINNY_PROGRESS); - transmit_displaypromptstatus(d, "Call Progress", 0, l->instance, sub->callid); - sub->progress = 1; - } - } - } } static void mwi_event_cb(const struct ast_event *event, void *userdata) @@ -5265,6 +5246,9 @@ static void setsubstate(struct skinny_subchannel *sub, int state) ast_log(LOG_WARNING, "Cannot set substate to SUBSTATE_RINGOUT from %s (on call-%d)\n", substate2str(sub->substate), sub->callid); return; } + if (sub->substate != SUBSTATE_PROGRESS) { + transmit_callstate(d, l->instance, sub->callid, SKINNY_PROGRESS); + } if (!d->earlyrtp) { transmit_start_tone(d, SKINNY_ALERT, l->instance, sub->callid); @@ -5308,6 +5292,9 @@ static void setsubstate(struct skinny_subchannel *sub, int state) sub->substate = SUBSTATE_CALLWAIT; break; case SUBSTATE_CONNECTED: + if (sub->substate == SUBSTATE_RINGIN) { + transmit_callstate(d, l->instance, sub->callid, SKINNY_OFFHOOK); + } if (sub->substate == SUBSTATE_HOLD) { ast_queue_control(sub->owner, AST_CONTROL_UNHOLD); transmit_connect(d, sub);