diff options
author | qwell <qwell@f38db490-d61c-443f-a65b-d21fe96a405b> | 2007-08-02 18:42:36 +0000 |
---|---|---|
committer | qwell <qwell@f38db490-d61c-443f-a65b-d21fe96a405b> | 2007-08-02 18:42:36 +0000 |
commit | b4db36099ebb03ff7908e4af044e66f3433cca98 (patch) | |
tree | 0f848162b20162e295a63ece37081e74ce7071ba /channels | |
parent | f9d48abc33716acc6c3072c4768a11b210ca0282 (diff) |
Make sure we clear the prompt status message on a hangup.
Also rearrange messages to better fit with what a wireshark trace shows it should be.
Issue 10299, initial patch and solution by sbisker, modified by me to fit with wireshark trace.
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.4@77947 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels')
-rw-r--r-- | channels/chan_skinny.c | 87 |
1 files changed, 45 insertions, 42 deletions
diff --git a/channels/chan_skinny.c b/channels/chan_skinny.c index 52c413244..a070d6a59 100644 --- a/channels/chan_skinny.c +++ b/channels/chan_skinny.c @@ -1489,48 +1489,6 @@ static void transmit_microphone_mode(struct skinnysession *s, int mode) transmit_response(s, req); } */ -static void transmit_callstate(struct skinnysession *s, int instance, int state, unsigned callid) -{ - struct skinny_req *req; - - if (state == SKINNY_OFFHOOK) { - if (!(req = req_alloc(sizeof(struct activate_call_plane_message), ACTIVATE_CALL_PLANE_MESSAGE))) - return; - - 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; - - req->data.activatecallplane.lineInstance = htolel(instance); - transmit_response(s, req); - - if (!(req = req_alloc(sizeof(struct close_receive_channel_message), CLOSE_RECEIVE_CHANNEL_MESSAGE))) - return; - - req->data.closereceivechannel.conferenceId = htolel(callid); - req->data.closereceivechannel.partyId = htolel(callid); - transmit_response(s, req); - - if (!(req = req_alloc(sizeof(struct stop_media_transmission_message), STOP_MEDIA_TRANSMISSION_MESSAGE))) - return; - - req->data.stopmedia.conferenceId = htolel(callid); - 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) { @@ -1744,6 +1702,51 @@ static void transmit_dialednumber(struct skinnysession *s, const char *text, int transmit_response(s, req); } +static void transmit_callstate(struct skinnysession *s, int instance, int state, unsigned callid) +{ + struct skinny_req *req; + + if (state == SKINNY_ONHOOK) { + if (!(req = req_alloc(sizeof(struct close_receive_channel_message), CLOSE_RECEIVE_CHANNEL_MESSAGE))) + return; + + req->data.closereceivechannel.conferenceId = htolel(callid); + req->data.closereceivechannel.partyId = htolel(callid); + transmit_response(s, req); + + if (!(req = req_alloc(sizeof(struct stop_media_transmission_message), STOP_MEDIA_TRANSMISSION_MESSAGE))) + return; + + req->data.stopmedia.conferenceId = htolel(callid); + req->data.stopmedia.passThruPartyId = htolel(callid); + transmit_response(s, req); + + transmit_speaker_mode(s, SKINNY_SPEAKEROFF); + + transmit_displaypromptstatus(s, NULL, 0, instance, callid); + } + + 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); + + if (state == SKINNY_ONHOOK) { + transmit_selectsoftkeys(s, 0, 0, KEYDEF_ONHOOK); + } + + if (state == SKINNY_OFFHOOK || state == SKINNY_ONHOOK) { + if (!(req = req_alloc(sizeof(struct activate_call_plane_message), ACTIVATE_CALL_PLANE_MESSAGE))) + return; + + req->data.activatecallplane.lineInstance = htolel(instance); + transmit_response(s, req); + } +} + /* static int has_voicemail(struct skinny_line *l) { |