aboutsummaryrefslogtreecommitdiffstats
path: root/channels
diff options
context:
space:
mode:
Diffstat (limited to 'channels')
-rw-r--r--channels/chan_misdn.c14
-rw-r--r--channels/misdn/isdn_lib.c6
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;