when receiving disconnect with inband info, we don't send release immediately, we...
authorChristian Richter <christian.richter@beronet.com>
Tue, 7 Mar 2006 12:17:35 +0000 (12:17 +0000)
committerChristian Richter <christian.richter@beronet.com>
Tue, 7 Mar 2006 12:17:35 +0000 (12:17 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@12315 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_misdn.c

index 4d61f05..f4e204b 100644 (file)
@@ -130,6 +130,7 @@ enum misdn_chan_state {
        MISDN_ALERTING, /*!<  when Alerting */
        MISDN_BUSY, /*!<  when BUSY */
        MISDN_CONNECTED, /*!<  when connected */
+       MISDN_DISCONNECTED, /*!<  when connected */
        MISDN_BRIDGED, /*!<  when bridged */
        MISDN_CLEANING, /*!< when hangup from * but we were connected before */
        MISDN_HUNGUP_FROM_MISDN, /*!< when DISCONNECT/RELEASE/REL_COMP  cam from misdn */
@@ -1929,6 +1930,11 @@ static int misdn_hangup(struct ast_channel *ast)
       
                        p->state=MISDN_CLEANING; /* MISDN_HUNGUP_FROM_AST; */
                        break;
+               case MISDN_DISCONNECTED:
+                       chan_misdn_log(2, bc->port, " --> * State Disconnected\n");
+                       misdn_lib_send_event( bc, EVENT_RELEASE);
+                       p->state=MISDN_CLEANING; /* MISDN_HUNGUP_FROM_AST; */
+                       break;
 
                case MISDN_CLEANING:
                        break;
@@ -2936,9 +2942,14 @@ static void send_cause2ast(struct ast_channel *ast, struct misdn_bchannel*bc) {
        case 4:
        case 22:
        case 27:
+               /*
+                * Not Queueing the Congestion anymore, since we want to hear
+                * the inband message
+                *
                chan_misdn_log(1, bc?bc->port:0, " --> * SEND: Queue Congestion pid:%d\n", bc?bc->pid:-1);
                
                ast_queue_control(ast, AST_CONTROL_CONGESTION);
+               */
                break;
                
        case 21:
@@ -3424,6 +3435,8 @@ cb_events(enum event_e event, struct misdn_bchannel *bc, void *user_data)
                           dialled number, or perhaps even giving an
                           alternative number, then play it instead of
                           immediately releasing the call */
+                       chan_misdn_log(0,bc->port, " --> Inband Info Avail, not sending RELEASE\n");
+                       ch->state = MISDN_DISCONNECTED;
                        start_bc_tones(ch);
                        break;
                }