aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcrichter <crichter@f38db490-d61c-443f-a65b-d21fe96a405b>2007-01-03 08:24:00 +0000
committercrichter <crichter@f38db490-d61c-443f-a65b-d21fe96a405b>2007-01-03 08:24:00 +0000
commit6cf2558efac75849f789b887b9714c11e831293e (patch)
tree4389e25cf6c066fc2671fc0bd18f79aca116f58a
parentad31b1cdc74c2f5c402f720c2b8a35dbcba6e479 (diff)
* Added check for bridging in misdn_call to avoid setting echocancellation
when 2 mISDN channels are involved and when bridging is set. That lead to a kernel panic before under different situations, because we switched about 2 times between hardware bridging and echocancelation * readded MISDN_URATE variable which got lost before, this should make app_v110 work again * fixed typo git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.2@49303 f38db490-d61c-443f-a65b-d21fe96a405b
-rw-r--r--channels/chan_misdn.c33
-rw-r--r--channels/misdn/isdn_lib.c3
2 files changed, 16 insertions, 20 deletions
diff --git a/channels/chan_misdn.c b/channels/chan_misdn.c
index bd4f9e6e5..b4e383537 100644
--- a/channels/chan_misdn.c
+++ b/channels/chan_misdn.c
@@ -1694,6 +1694,15 @@ static int misdn_call(struct ast_channel *ast, char *dest, int timeout)
misdn_set_opt_exec(ast,opts);
else
chan_misdn_log(2,port,"NO OPTS GIVEN\n");
+
+ /*check for bridging*/
+ int bridging;
+ misdn_cfg_get( 0, MISDN_GEN_BRIDGING, &bridging, sizeof(int));
+ if (bridging && ch->other_ch) {
+ chan_misdn_log(0, port, "Disabling EC on both Sides\n");
+ ch->bc->ec_enable=0;
+ ch->other_ch->bc->ec_enable=0;
+ }
r=misdn_lib_send_event( newbc, EVENT_SETUP );
@@ -1769,7 +1778,6 @@ static int misdn_answer(struct ast_channel *ast)
}
p->state = MISDN_CONNECTED;
- misdn_lib_echo(p->bc,0);
stop_indicate(p);
if ( ast_strlen_zero(p->bc->cad) ) {
@@ -2316,27 +2324,12 @@ enum ast_bridge_result misdn_bridge (struct ast_channel *c0,
if (ch1 && ch2 ) ;
else
return -1;
-
int bridging;
misdn_cfg_get( 0, MISDN_GEN_BRIDGING, &bridging, sizeof(int));
if (bridging) {
- int ec;
- misdn_cfg_get( ch1->bc->port, MISDN_CFG_ECHOCANCEL, &ec, sizeof(int));
- if ( ec ) {
- chan_misdn_log(2, ch1->bc->port, "Disabling Echo Cancellor when Bridged\n");
- ch1->bc->ec_enable=0;
- manager_ec_disable(ch1->bc);
- }
- misdn_cfg_get( ch2->bc->port, MISDN_CFG_ECHOCANCEL, &ec, sizeof(int));
- if ( ec ) {
- chan_misdn_log(2, ch2->bc->port, "Disabling Echo Cancellor when Bridged\n");
- ch2->bc->ec_enable=0;
- manager_ec_disable(ch2->bc);
- }
/* trying to make a mISDN_dsp conference */
chan_misdn_log(1, ch1->bc->port, "I SEND: Making conference with Number:%d\n", ch1->bc->pid +1);
-
misdn_lib_bridge(ch1->bc,ch2->bc);
}
@@ -3229,6 +3222,11 @@ void export_ch(struct ast_channel *chan, struct misdn_bchannel *bc, struct chan_
sprintf(tmp,"%d",bc->sending_complete);
pbx_builtin_setvar_helper(chan,"MISDN_ADDRESS_COMPLETE",tmp);
}
+
+ if (bc->urate) {
+ sprintf(tmp,"%d",bc->urate);
+ pbx_builtin_setvar_helper(chan,"MISDN_URATE",tmp);
+ }
}
@@ -3243,7 +3241,6 @@ cb_events(enum event_e event, struct misdn_bchannel *bc, void *user_data)
if (event != EVENT_BCHAN_DATA && event != EVENT_TONE_GENERATE) { /* Debug Only Non-Bchan */
int debuglevel=1;
-
if ( event==EVENT_CLEANUP && !user_data)
debuglevel=5;
@@ -3787,8 +3784,6 @@ cb_events(enum event_e event, struct misdn_bchannel *bc, void *user_data)
misdn_lib_send_event(bc,EVENT_CONNECT_ACKNOWLEDGE);
struct ast_channel *bridged=AST_BRIDGED_P(ch->ast);
-
- misdn_lib_echo(bc,0);
stop_indicate(ch);
if (bridged && !strcasecmp(bridged->tech->type,"mISDN")) {
diff --git a/channels/misdn/isdn_lib.c b/channels/misdn/isdn_lib.c
index 84a7cca0f..6ad11b70d 100644
--- a/channels/misdn/isdn_lib.c
+++ b/channels/misdn/isdn_lib.c
@@ -448,7 +448,7 @@ static int find_free_chan_in_stack(struct misdn_stack *stack, int channel)
int empty_chan_in_stack(struct misdn_stack *stack, int channel)
{
if (channel<=0 || channel>=MAX_BCHANS) {
- cb_log(0,stack?stack->port:0, "empty_chan_inst_stack: cannot empty channel %d\n",channel);
+ cb_log(0,stack?stack->port:0, "empty_chan_in_stack: cannot empty channel %d\n",channel);
return -1;
}
@@ -3575,6 +3575,7 @@ int misdn_lib_pid_restart(int pid)
if (bc) {
manager_clean_bc(bc);
}
+ return 0;
}
int misdn_lib_port_restart(int port)