diff --git a/channels/chan_misdn.c b/channels/chan_misdn.c index 96b1fa46d592a043e7095219b7b0f84fdc1c724c..ba9aacc877d5c3a5c3b5629d8ca400556a3e3000 100644 --- a/channels/chan_misdn.c +++ b/channels/chan_misdn.c @@ -3322,6 +3322,16 @@ cb_events(enum event_e event, struct misdn_bchannel *bc, void *user_data) + } + + /* check if we should jump into s when we have no dad */ + { + int im; + misdn_cfg_get( bc->port, MISDN_CFG_IMMEDIATE, &im, sizeof(im)); + if ( im && ast_strlen_zero(bc->dad) ) { + do_immediate_setup(bc, ch , chan); + break; + } } diff --git a/channels/misdn/isdn_lib.c b/channels/misdn/isdn_lib.c index b0e9477d07b0f6f883bd9eff5a18041688dc37f8..bb4da69213bee4ab64ba73bad8e4554f7d468274 100644 --- a/channels/misdn/isdn_lib.c +++ b/channels/misdn/isdn_lib.c @@ -1553,6 +1553,7 @@ handle_event_nt(void *dat, void *arg) manager_t *mgr = (manager_t *)dat; msg_t *msg = (msg_t *)arg; mISDNuser_head_t *hh; + int reject=0; struct misdn_stack *stack=find_stack_by_mgr(mgr); int port; @@ -1681,8 +1682,8 @@ handle_event_nt(void *dat, void *arg) if (bc) { int myprocid=bc->l3_id&0x0000ffff; hh->dinfo=(hh->dinfo&0xffff0000)|myprocid; - cb_log(3,stack->port,"Repaired reject Bug, new dinfo: %x\n",hh->dinfo); - return 0; + cb_log(3,stack->port,"Reject dinfo: %x cause:%d\n",hh->dinfo,bc->cause); + reject=1; } } } @@ -1833,9 +1834,18 @@ handle_event_nt(void *dat, void *arg) if(!isdn_get_info(msgs_g,event,1)) { cb_log(4, stack->port, "Unknown Event Ind: prim %x dinfo %x\n",hh->prim, hh->dinfo); } else { + if (reject) { + switch(bc->cause){ + case 17: + cb_log(1, stack->port, "Siemens Busy reject..\n"); + + break; + default: + return 0; + } + } cb_event(event, bc, glob_mgr->user_data); } - } else { cb_log(4, stack->port, "No BC found with l3id: prim %x dinfo %x\n",hh->prim, hh->dinfo);