]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Make sure we clear the prompt status message on a hangup.
authorJason Parker <jparker@digium.com>
Thu, 2 Aug 2007 18:42:36 +0000 (18:42 +0000)
committerJason Parker <jparker@digium.com>
Thu, 2 Aug 2007 18:42:36 +0000 (18:42 +0000)
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: https://origsvn.digium.com/svn/asterisk/branches/1.4@77947 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_skinny.c

index 52c413244e1448ea3a1d96fc59e78c0176a35fe2..a070d6a59049762bd49f5109db2b10f1dfdefc50 100644 (file)
@@ -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)
 {