Merged revisions 89172 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r89172 | crichter | 2007-11-12 12:23:57 +0100 (Mo, 12 Nov 2007) | 1 line added restart all interfaces Restart_Indicator, to automatically send a RESTART after the L2 of a PTP Port comes up. Also fixed some places where we have send a RELEASE without need for it. ........ git-svn-id: http://svn.digium.com/svn/asterisk/trunk@89178 f38db490-d61c-443f-a65b-d21fe96a405b
This commit is contained in:
parent
4b753c1924
commit
6bc7693d58
|
@ -2655,6 +2655,7 @@ static int misdn_hangup(struct ast_channel *ast)
|
||||||
start_bc_tones(p);
|
start_bc_tones(p);
|
||||||
hanguptone_indicate(p);
|
hanguptone_indicate(p);
|
||||||
|
|
||||||
|
p->state=MISDN_CLEANING;
|
||||||
if (bc->need_disconnect)
|
if (bc->need_disconnect)
|
||||||
misdn_lib_send_event( bc, EVENT_DISCONNECT);
|
misdn_lib_send_event( bc, EVENT_DISCONNECT);
|
||||||
break;
|
break;
|
||||||
|
@ -2690,7 +2691,8 @@ static int misdn_hangup(struct ast_channel *ast)
|
||||||
/*p->state=MISDN_CLEANING;*/
|
/*p->state=MISDN_CLEANING;*/
|
||||||
break;
|
break;
|
||||||
case MISDN_DISCONNECTED:
|
case MISDN_DISCONNECTED:
|
||||||
misdn_lib_send_event( bc, EVENT_RELEASE);
|
if (bc->need_release)
|
||||||
|
misdn_lib_send_event( bc, EVENT_RELEASE);
|
||||||
p->state = MISDN_CLEANING; /* MISDN_HUNGUP_FROM_AST; */
|
p->state = MISDN_CLEANING; /* MISDN_HUNGUP_FROM_AST; */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -2708,13 +2710,15 @@ static int misdn_hangup(struct ast_channel *ast)
|
||||||
chan_misdn_log(1, bc->port, " --> out_cause %d\n", bc->out_cause);
|
chan_misdn_log(1, bc->port, " --> out_cause %d\n", bc->out_cause);
|
||||||
|
|
||||||
bc->out_cause = -1;
|
bc->out_cause = -1;
|
||||||
misdn_lib_send_event(bc, EVENT_RELEASE);
|
if (bc->need_release)
|
||||||
|
misdn_lib_send_event(bc, EVENT_RELEASE);
|
||||||
p->state = MISDN_CLEANING;
|
p->state = MISDN_CLEANING;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if (bc->nt) {
|
if (bc->nt) {
|
||||||
bc->out_cause = -1;
|
bc->out_cause = -1;
|
||||||
misdn_lib_send_event(bc, EVENT_RELEASE);
|
if (bc->need_release)
|
||||||
|
misdn_lib_send_event(bc, EVENT_RELEASE);
|
||||||
p->state = MISDN_CLEANING;
|
p->state = MISDN_CLEANING;
|
||||||
} else {
|
} else {
|
||||||
if (bc->need_disconnect)
|
if (bc->need_disconnect)
|
||||||
|
|
|
@ -779,15 +779,12 @@ static int misdn_lib_get_l1_down(struct misdn_stack *stack)
|
||||||
/* Pull Up L1 */
|
/* Pull Up L1 */
|
||||||
iframe_t act;
|
iframe_t act;
|
||||||
act.prim = PH_DEACTIVATE | REQUEST;
|
act.prim = PH_DEACTIVATE | REQUEST;
|
||||||
act.addr = (stack->upper_id | FLG_MSG_DOWN) ;
|
act.addr = stack->lower_id|FLG_MSG_DOWN;
|
||||||
|
|
||||||
|
|
||||||
act.dinfo = 0;
|
act.dinfo = 0;
|
||||||
act.len = 0;
|
act.len = 0;
|
||||||
|
|
||||||
|
cb_log(1, stack->port, "SENDING PH_DEACTIVATE | REQ\n");
|
||||||
return mISDN_write(stack->midev, &act, mISDN_HEADER_LEN+act.len, TIMEOUT_1SEC);
|
return mISDN_write(stack->midev, &act, mISDN_HEADER_LEN+act.len, TIMEOUT_1SEC);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -2004,6 +2001,15 @@ handle_event_nt(void *dat, void *arg)
|
||||||
cb_event(EVENT_PORT_ALARM, &stack->bc[0], glob_mgr->user_data);
|
cb_event(EVENT_PORT_ALARM, &stack->bc[0], glob_mgr->user_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (stack->ptp && !stack->restart_sent) {
|
||||||
|
/* make sure we restart the interface of the
|
||||||
|
* other side */
|
||||||
|
stack->restart_sent=1;
|
||||||
|
misdn_lib_send_restart(stack->port, -1);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* when we get the L2 UP, the L1 is UP definitely too*/
|
||||||
stack->l2link = 1;
|
stack->l2link = 1;
|
||||||
stack->l2upcnt=0;
|
stack->l2upcnt=0;
|
||||||
|
|
||||||
|
@ -3699,30 +3705,29 @@ int misdn_lib_send_restart(int port, int channel)
|
||||||
struct misdn_stack *stack=find_stack_by_port(port);
|
struct misdn_stack *stack=find_stack_by_port(port);
|
||||||
struct misdn_bchannel dummybc;
|
struct misdn_bchannel dummybc;
|
||||||
/*default is all channels*/
|
/*default is all channels*/
|
||||||
int max = stack->pri ? 30 : 2;
|
|
||||||
int i = 1;
|
|
||||||
|
|
||||||
cb_log(0, port, "Sending Restarts on this port.\n");
|
cb_log(0, port, "Sending Restarts on this port.\n");
|
||||||
|
|
||||||
misdn_make_dummy(&dummybc, stack->port, MISDN_ID_GLOBAL, stack->nt, 0);
|
misdn_make_dummy(&dummybc, stack->port, MISDN_ID_GLOBAL, stack->nt, 0);
|
||||||
|
|
||||||
/*if a channel is specified we restart only this one*/
|
/*default is all channels*/
|
||||||
if (channel > 0) {
|
if (channel <0) {
|
||||||
i=channel;
|
dummybc.channel=-1;
|
||||||
max=channel;
|
cb_log(0, port, "Restarting and all Interfaces\n");
|
||||||
|
misdn_lib_send_event(&dummybc, EVENT_RESTART);
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (;i<=max;i++) {
|
/*if a channel is specified we restart only this one*/
|
||||||
|
if (channel >0) {
|
||||||
int cnt;
|
int cnt;
|
||||||
dummybc.channel=i;
|
dummybc.channel=channel;
|
||||||
cb_log(0, port, "Restarting and cleaning channel %d\n",i);
|
cb_log(0, port, "Restarting and cleaning channel %d\n",channel);
|
||||||
misdn_lib_send_event(&dummybc, EVENT_RESTART);
|
misdn_lib_send_event(&dummybc, EVENT_RESTART);
|
||||||
/*do we need to wait before we get an EVENT_RESTART_ACK ?*/
|
|
||||||
|
|
||||||
/* clean up chan in stack, to be sure we don't think it's
|
/* clean up chan in stack, to be sure we don't think it's
|
||||||
* in use anymore */
|
* in use anymore */
|
||||||
for (cnt=0; cnt<=stack->b_num; cnt++) {
|
for (cnt=0; cnt<=stack->b_num; cnt++) {
|
||||||
if (stack->bc[cnt].channel == i) {
|
if (stack->bc[cnt].channel == channel) {
|
||||||
empty_bc(&stack->bc[cnt]);
|
empty_bc(&stack->bc[cnt]);
|
||||||
clean_up_bc(&stack->bc[cnt]);
|
clean_up_bc(&stack->bc[cnt]);
|
||||||
stack->bc[cnt].in_use=0;
|
stack->bc[cnt].in_use=0;
|
||||||
|
|
|
@ -80,6 +80,9 @@ struct misdn_stack {
|
||||||
time_t l2establish;
|
time_t l2establish;
|
||||||
|
|
||||||
int l1link;
|
int l1link;
|
||||||
|
|
||||||
|
int restart_sent;
|
||||||
|
|
||||||
int midev;
|
int midev;
|
||||||
|
|
||||||
int nt;
|
int nt;
|
||||||
|
|
|
@ -840,8 +840,13 @@ static msg_t *build_restart (struct isdn_msg msgs[], struct misdn_bchannel *bc,
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
printf("Building RESTART Msg\n");
|
printf("Building RESTART Msg\n");
|
||||||
#endif
|
#endif
|
||||||
enc_ie_channel_id(&restart->CHANNEL_ID, msg, 1,bc->channel, nt,bc);
|
|
||||||
enc_ie_restart_ind(&restart->RESTART_IND, msg, 0x80, nt, bc);
|
if (bc->channel > 0) {
|
||||||
|
enc_ie_channel_id(&restart->CHANNEL_ID, msg, 1,bc->channel, nt,bc);
|
||||||
|
enc_ie_restart_ind(&restart->RESTART_IND, msg, 0x80, nt, bc);
|
||||||
|
} else {
|
||||||
|
enc_ie_restart_ind(&restart->RESTART_IND, msg, 0x87, nt, bc);
|
||||||
|
}
|
||||||
|
|
||||||
cb_log(0,bc->port, "Restarting channel %d\n", bc->channel);
|
cb_log(0,bc->port, "Restarting channel %d\n", bc->channel);
|
||||||
return msg;
|
return msg;
|
||||||
|
|
Reference in New Issue