diff options
Diffstat (limited to 'channels')
-rw-r--r-- | channels/chan_misdn.c | 14 | ||||
-rw-r--r-- | channels/misdn/isdn_lib.c | 6 |
2 files changed, 10 insertions, 10 deletions
diff --git a/channels/chan_misdn.c b/channels/chan_misdn.c index c76facee5..37afcc9f6 100644 --- a/channels/chan_misdn.c +++ b/channels/chan_misdn.c @@ -2261,12 +2261,8 @@ static int misdn_indication(struct ast_channel *ast, int cond, const void *data, chan_misdn_log(1, p->bc->port, " --> * IND :\tcongestion pid:%d\n",p->bc?p->bc->pid:-1); p->bc->out_cause=42; - if (p->state != MISDN_CONNECTED) { - start_bc_tones(p); - misdn_lib_send_event( p->bc, EVENT_RELEASE); - } else { - misdn_lib_send_event( p->bc, EVENT_DISCONNECT); - } + start_bc_tones(p); + misdn_lib_send_event( p->bc, EVENT_DISCONNECT); if (p->bc->nt) { hanguptone_indicate(p); @@ -3789,7 +3785,9 @@ cb_events(enum event_e event, struct misdn_bchannel *bc, void *user_data) if ( stop_tone ) { stop_indicate(ch); } - + + if (!ch->ast) break; + if (ch->state == MISDN_WAITING4DIGS ) { /* Ok, incomplete Setup, waiting till extension exists */ @@ -4340,8 +4338,6 @@ cb_events(enum event_e event, struct misdn_bchannel *bc, void *user_data) case EVENT_RELEASE: { - bc->out_cause=16; - hangup_chan(ch); release_chan(bc); diff --git a/channels/misdn/isdn_lib.c b/channels/misdn/isdn_lib.c index 8f587e5d0..13e6a8207 100644 --- a/channels/misdn/isdn_lib.c +++ b/channels/misdn/isdn_lib.c @@ -463,7 +463,7 @@ static int find_free_chan_in_stack(struct misdn_stack *stack, struct misdn_bchan static int empty_chan_in_stack(struct misdn_stack *stack, int channel) { - if (channel<=0 || channel>=MAX_BCHANS) { + if (channel<=0 || channel>MAX_BCHANS) { cb_log(0,stack?stack->port:0, "empty_chan_in_stack: cannot empty channel %d\n",channel); return -1; } @@ -1534,8 +1534,10 @@ static int handle_event ( struct misdn_bchannel *bc, enum event_e event, iframe_ if (bc->channel>0) empty_chan_in_stack(stack,bc->channel); int tmpcause=bc->cause; + int tmp_out_cause=bc->out_cause; empty_bc(bc); bc->cause=tmpcause; + bc->out_cause=tmp_out_cause; clean_up_bc(bc); break; default: @@ -3331,8 +3333,10 @@ int misdn_lib_send_event(struct misdn_bchannel *bc, enum event_e event ) if (bc->channel>0) empty_chan_in_stack(stack,bc->channel); int tmpcause=bc->cause; + int tmp_out_cause=bc->out_cause; empty_bc(bc); bc->cause=tmpcause; + bc->out_cause=tmp_out_cause; clean_up_bc(bc); } break; |