]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
automerge commit
authorAutomerge Script <automerge@asterisk.org>
Tue, 30 Jan 2007 14:59:43 +0000 (14:59 +0000)
committerAutomerge Script <automerge@asterisk.org>
Tue, 30 Jan 2007 14:59:43 +0000 (14:59 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@52855 65c4cc65-6c06-0410-ace0-fbb531ad65f3

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

index f6b172ab8e1a5e406eadbd27291ee89f9db0906c..1a3a5a29ebfef28c8df24a46b9462cb717fa60fe 100644 (file)
@@ -3734,6 +3734,8 @@ cb_events(enum event_e event, struct misdn_bchannel *bc, void *user_data)
                                strncat(bc->dad,bc->infos_pending, l - strlen(bc->dad));
                                bc->dad[l-1] = 0;
                        }       
+               
+                       if (!ch->ast) break;
                        {
                                int l = sizeof(ch->ast->exten);
                                strncpy(ch->ast->exten, bc->dad, l);
@@ -3752,7 +3754,6 @@ cb_events(enum event_e event, struct misdn_bchannel *bc, void *user_data)
        break;
        case EVENT_PROCEEDING:
        {
-               
                if ( misdn_cap_is_speech(bc->capability) &&
                     misdn_inband_avail(bc) ) {
                        start_bc_tones(ch);
@@ -3760,10 +3761,14 @@ cb_events(enum event_e event, struct misdn_bchannel *bc, void *user_data)
 
                ch->state = MISDN_PROCEEDING;
                
+               if (!ch->ast) break;
+
                ast_queue_control(ch->ast, AST_CONTROL_PROCEEDING);
        }
        break;
        case EVENT_PROGRESS:
+
+
                if (!bc->nt ) {
                        if ( misdn_cap_is_speech(bc->capability) &&
                             misdn_inband_avail(bc)
@@ -3771,9 +3776,10 @@ cb_events(enum event_e event, struct misdn_bchannel *bc, void *user_data)
                                start_bc_tones(ch);
                        }
                        
-                       ast_queue_control(ch->ast, AST_CONTROL_PROGRESS);
-                       
                        ch->state=MISDN_PROGRESS;
+
+                       if (!ch->ast) break;
+                       ast_queue_control(ch->ast, AST_CONTROL_PROGRESS);
                }
                break;
                
@@ -3782,6 +3788,8 @@ cb_events(enum event_e event, struct misdn_bchannel *bc, void *user_data)
        {
                ch->state = MISDN_ALERTING;
                
+               if (!ch->ast) break;
+
                ast_queue_control(ch->ast, AST_CONTROL_RINGING);
                ast_setstate(ch->ast, AST_STATE_RINGING);
                
@@ -3804,7 +3812,9 @@ cb_events(enum event_e event, struct misdn_bchannel *bc, void *user_data)
        {
                /*we answer when we've got our very new L3 ID from the NT stack */
                misdn_lib_send_event(bc,EVENT_CONNECT_ACKNOWLEDGE);
-       
+
+               if (!ch->ast) break;
+
                struct ast_channel *bridged=AST_BRIDGED_P(ch->ast);
                stop_indicate(ch);
 
@@ -3827,8 +3837,10 @@ cb_events(enum event_e event, struct misdn_bchannel *bc, void *user_data)
                
                start_bc_tones(ch);
                
-               
                ch->state = MISDN_CONNECTED;
+               
+               if (!ch->ast) break;
+
                ast_queue_control(ch->ast, AST_CONTROL_ANSWER);
        }
        break;
@@ -3836,7 +3848,7 @@ cb_events(enum event_e event, struct misdn_bchannel *bc, void *user_data)
        /*we might not have an ch->ast ptr here anymore*/
        if (ch) {
                struct chan_list *holded_ch=find_holded(cl_te, bc);
-       
+               
                chan_misdn_log(3,bc->port," --> org:%d nt:%d, inbandavail:%d state:%d\n", ch->orginator, bc->nt, misdn_inband_avail(bc), ch->state);
                if ( ch->orginator==ORG_AST && !bc->nt && misdn_inband_avail(bc) && ch->state != MISDN_CONNECTED) {
                        /* If there's inband information available (e.g. a
@@ -3849,8 +3861,10 @@ cb_events(enum event_e event, struct misdn_bchannel *bc, void *user_data)
                        ch->state=MISDN_DISCONNECTED;
                        start_bc_tones(ch);
 
-                       if (ch->ast) ch->ast->hangupcause=bc->cause;
-                       ast_queue_control(ch->ast, AST_CONTROL_BUSY);
+                       if (ch->ast) {
+                               ch->ast->hangupcause=bc->cause;
+                               ast_queue_control(ch->ast, AST_CONTROL_BUSY);
+                       }
                        ch->need_busy=0;
                        break;
                }
@@ -3966,7 +3980,8 @@ cb_events(enum event_e event, struct misdn_bchannel *bc, void *user_data)
                        frame.src = NULL;
                        frame.data = bc->bframe ;
                        
-                       ast_queue_frame(ch->ast,&frame);
+                       if (ch->ast) 
+                               ast_queue_frame(ch->ast,&frame);
                } else {
                        fd_set wrfs;
                        struct timeval tv;
index d090ad86c0ded950701db7edfb8f741b31de61df..14cf13818970cde2df9b245399049dd3dbbaa4f9 100644 (file)
@@ -2857,23 +2857,12 @@ msg_t *fetch_msg(int midev)
 {
        msg_t *msg=alloc_msg(MAX_MSG_SIZE);
        int r;
-/*     fd_set rdfs; */
 
        if (!msg) {
                cb_log(0, 0, "fetch_msg: alloc msg failed !!");
                return NULL;
        }
 
-#if 0
-       FD_ZERO(&rdfs);
-       FD_SET(midev,&rdfs);
-  
-       mISDN_select(FD_SETSIZE, &rdfs, NULL, NULL, NULL);
-       //select(FD_SETSIZE, &rdfs, NULL, NULL, NULL);
-  
-       if (FD_ISSET(midev, &rdfs)) {
-#endif
-
        AGAIN:
                r=mISDN_read(midev,msg->data,MAX_MSG_SIZE, TIMEOUT_10SEC);
                msg->len=r;
@@ -2895,15 +2884,11 @@ msg_t *fetch_msg(int midev)
                        cb_log(0,0,"mISDN_read returned :%d error:%s (%d)\n",r,strerror(errno),errno); 
                }
 
-               return msg;
-
 #if 0
-       } else {
-               printf ("Select timeout\n");
-       }
+               if  (!(frm->prim == (DL_DATA|INDICATION) )|| (frm->prim == (PH_DATA|INDICATION)))
+                       cb_log(0,0,"prim: %x dinfo:%x addr:%x msglen:%d frm->len:%d\n",frm->prim, frm->dinfo, frm->addr, msg->len,frm->len );
 #endif
-  
-       return NULL;
+               return msg;
 }
 
 
@@ -3942,8 +3927,6 @@ char *manager_isdn_get_info(enum event_e event)
 void manager_bchannel_activate(struct misdn_bchannel *bc)
 {
        char buf[128];
-       iframe_t *ifrm;
-       int ret;
 
        struct misdn_stack *stack=get_stack_by_bc(bc);
 
@@ -3959,19 +3942,7 @@ void manager_bchannel_activate(struct misdn_bchannel *bc)
        
        mISDN_write_frame(stack->midev, buf, bc->addr | FLG_MSG_DOWN,  DL_ESTABLISH | REQUEST, 0,0, NULL, TIMEOUT_1SEC);
 
-       ret=mISDN_read(stack->midev,buf,128,TIMEOUT_10SEC);
-
-       ifrm=(iframe_t*)buf;
-       
-       if (ret>0) {
-               if (ifrm->prim== (DL_ESTABLISH|CONFIRM)) {
-                       cb_log(2,stack->port,"bchan: DL_ESTABLISH|CNF\n");
-               }
-       }
-       
-       
        return ;
-  
 }
 
 
@@ -4005,8 +3976,6 @@ void manager_bchannel_deactivate(struct misdn_bchannel * bc)
        char buf[128];  
        mISDN_write_frame(stack->midev, buf, bc->addr | FLG_MSG_DOWN, DL_RELEASE|REQUEST,0,0,NULL, TIMEOUT_1SEC);
 
-       mISDN_read(stack->midev, buf, 128, TIMEOUT_1SEC);
-
        clear_ibuffer(bc->astbuf);
        
        bc_state_change(bc,BCHAN_RELEASE);