Index: channels/chan_skinny.c =================================================================== --- channels/chan_skinny.c (revision 76979) +++ channels/chan_skinny.c (working copy) @@ -1629,16 +1629,6 @@ { struct skinny_req *req; - if (!(req = req_alloc(sizeof(struct call_state_message), CALL_STATE_MESSAGE))) - return; - - if (state == SKINNY_ONHOOK) { - transmit_speaker_mode(s, SKINNY_SPEAKEROFF); - } - req->data.callstate.callState = htolel(state); - req->data.callstate.lineInstance = htolel(instance); - req->data.callstate.callReference = htolel(callid); - transmit_response(s, req); if (state == SKINNY_OFFHOOK) { if (!(req = req_alloc(sizeof(struct activate_call_plane_message), ACTIVATE_CALL_PLANE_MESSAGE))) return; @@ -1646,6 +1636,8 @@ req->data.activatecallplane.lineInstance = htolel(instance); transmit_response(s, req); } else if (state == SKINNY_ONHOOK) { + transmit_speaker_mode(s, SKINNY_SPEAKEROFF); + if (!(req = req_alloc(sizeof(struct activate_call_plane_message), ACTIVATE_CALL_PLANE_MESSAGE))) return; @@ -1666,6 +1658,14 @@ req->data.stopmedia.passThruPartyId = htolel(callid); transmit_response(s, req); } + + if (!(req = req_alloc(sizeof(struct call_state_message), CALL_STATE_MESSAGE))) + return; + + req->data.callstate.callState = htolel(state); + req->data.callstate.lineInstance = htolel(instance); + req->data.callstate.callReference = htolel(callid); + transmit_response(s, req); } static void transmit_callinfo(struct skinnysession *s, const char *fromname, const char *fromnum, const char *toname, const char *tonum, int instance, int callid, int calltype)