]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
removed FIXUP state. added check for channel allocation conflict when we create a...
authorChristian Richter <christian.richter@beronet.com>
Thu, 14 Dec 2006 13:03:49 +0000 (13:03 +0000)
committerChristian Richter <christian.richter@beronet.com>
Thu, 14 Dec 2006 13:03:49 +0000 (13:03 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@48467 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_misdn.c
channels/misdn/isdn_lib.c

index 9049ba753b6b20b8c9f348e93ce54add464f8c6a..a40735236fafe074772f43962798776f0b09a9e7 100644 (file)
@@ -124,7 +124,6 @@ enum misdn_chan_state {
        /* misdn_hangup */
        MISDN_HOLDED, /*!< if this chan is holded */
        MISDN_HOLD_DISCONNECT, /*!< if this chan is holded */
-       MISDN_FIXUP/*!< if this chan is holded */
   
 };
 
@@ -684,7 +683,6 @@ static struct state_struct state_array[] = {
        {MISDN_HUNGUP_FROM_MISDN,"HUNGUP_FROM_MISDN"}, /* when DISCONNECT/RELEASE/REL_COMP  cam from misdn */
        {MISDN_HOLDED,"HOLDED"}, /* when DISCONNECT/RELEASE/REL_COMP  cam from misdn */
        {MISDN_HOLD_DISCONNECT,"HOLD_DISCONNECT"}, /* when DISCONNECT/RELEASE/REL_COMP  cam from misdn */
-       {MISDN_FIXUP,"FIXUP"}, /**/
        {MISDN_HUNGUP_FROM_AST,"HUNGUP_FROM_AST"} /* when DISCONNECT/RELEASE/REL_COMP came out of */
        /* misdn_hangup */
 };
@@ -1831,7 +1829,6 @@ static int misdn_fixup(struct ast_channel *oldast, struct ast_channel *ast)
        chan_misdn_log(1, p->bc?p->bc->port:0, "* IND: Got Fixup State:%s L3id:%x\n", misdn_get_ch_state(p), p->l3id);
        
        p->ast = ast ;
-       p->state=MISDN_FIXUP;
   
        return 0;
 }
@@ -1998,7 +1995,6 @@ static int misdn_hangup(struct ast_channel *ast)
        if (ast->_state == AST_STATE_RESERVED || 
                p->state == MISDN_NOTHING || 
                p->state == MISDN_HOLDED || 
-               p->state == MISDN_FIXUP || 
                p->state == MISDN_HOLD_DISCONNECT ) {
 
                CLEAN_CH:
index 72b7d8243944cb9fe8aa5a454cdcd47177a66647..46be979543ff5f070050da8240f4804d2baaa791 100644 (file)
@@ -667,9 +667,15 @@ int set_chan_in_stack(struct misdn_stack *stack, int channel)
 
        cb_log(4,stack->port,"set_chan_in_stack: %d\n",channel);
        if (channel >=1 ) {
-               stack->channels[channel-1] = 1;
+               if (!stack->channels[channel-1])
+                       stack->channels[channel-1] = 1;
+               else {
+                       cb_log(0,stack->port,"channel already in use:%d\n", channel );
+                       return -1;
+               }
        } else {
                cb_log(0,stack->port,"couldn't set channel %d in\n", channel );
+               return -1;
        }
   
        return 0;
@@ -1479,7 +1485,13 @@ int handle_event ( struct misdn_bchannel *bc, enum event_e event, iframe_t *frm)
                        }  
 
                        if (bc->channel >0 && bc->channel<255) {
-                               set_chan_in_stack(stack ,bc->channel);
+                               int ret=set_chan_in_stack(stack ,bc->channel);
+                               if (event == EVENT_SETUP && ret<0){
+                                       /* empty bchannel */
+                                       bc->channel=0;
+                                       bc->out_cause=44;
+                                       misdn_lib_send_event(bc,EVENT_RELEASE_COMPLETE);
+                               }
                        }
 
 #if 0
@@ -2024,9 +2036,16 @@ handle_event_nt(void *dat, void *arg)
                        switch (event) {
                                case EVENT_SETUP:
                                        if (bc->channel>0 && bc->channel<255) {
+                                               if (stack->ptp)  {
+                                                       int ret=set_chan_in_stack(stack, bc->channel);
+                                                       if (event==EVENT_SETUP && ret<0){
+                                                               /* empty bchannel */
+                                                               bc->channel=0;
+                                                               bc->out_cause=44;
+                                                               misdn_lib_send_event(bc,EVENT_RELEASE_COMPLETE);
+                                                       }
 
-                                               if (stack->ptp) 
-                                                       set_chan_in_stack(stack, bc->channel);
+                                               }
                                                else 
                                                        cb_log(3,stack->port," --> PTMP but channel requested\n");