mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-30 02:26:23 +00:00
Merged revisions 53324 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4 ................ r53324 | crichter | 2007-02-07 10:22:44 +0100 (Mi, 07 Feb 2007) | 9 lines Merged revisions 52843 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.2 ........ r52843 | crichter | 2007-01-30 15:38:08 +0100 (Di, 30 Jan 2007) | 1 line fixed some possible segfaults. also fixed an very important bug which occurs on high load (when calls are very fast generated) ........ ................ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@53334 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -4145,6 +4145,8 @@ cb_events(enum event_e event, struct misdn_bchannel *bc, void *user_data)
|
|||||||
strncat(bc->dad,bc->infos_pending, l - strlen(bc->dad));
|
strncat(bc->dad,bc->infos_pending, l - strlen(bc->dad));
|
||||||
bc->dad[l-1] = 0;
|
bc->dad[l-1] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!ch->ast) break;
|
||||||
{
|
{
|
||||||
int l = sizeof(ch->ast->exten);
|
int l = sizeof(ch->ast->exten);
|
||||||
strncpy(ch->ast->exten, bc->dad, l);
|
strncpy(ch->ast->exten, bc->dad, l);
|
||||||
@@ -4171,10 +4173,16 @@ cb_events(enum event_e event, struct misdn_bchannel *bc, void *user_data)
|
|||||||
|
|
||||||
ch->state = MISDN_PROCEEDING;
|
ch->state = MISDN_PROCEEDING;
|
||||||
|
|
||||||
|
if (!ch->ast) break;
|
||||||
|
|
||||||
ast_queue_control(ch->ast, AST_CONTROL_PROCEEDING);
|
ast_queue_control(ch->ast, AST_CONTROL_PROCEEDING);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case EVENT_PROGRESS:
|
case EVENT_PROGRESS:
|
||||||
|
|
||||||
|
if (bc->channel)
|
||||||
|
update_name(ch->ast,bc->port,bc->channel);
|
||||||
|
|
||||||
if (!bc->nt ) {
|
if (!bc->nt ) {
|
||||||
if ( misdn_cap_is_speech(bc->capability) &&
|
if ( misdn_cap_is_speech(bc->capability) &&
|
||||||
misdn_inband_avail(bc)
|
misdn_inband_avail(bc)
|
||||||
@@ -4182,9 +4190,10 @@ cb_events(enum event_e event, struct misdn_bchannel *bc, void *user_data)
|
|||||||
start_bc_tones(ch);
|
start_bc_tones(ch);
|
||||||
}
|
}
|
||||||
|
|
||||||
ast_queue_control(ch->ast, AST_CONTROL_PROGRESS);
|
|
||||||
|
|
||||||
ch->state=MISDN_PROGRESS;
|
ch->state=MISDN_PROGRESS;
|
||||||
|
|
||||||
|
if (!ch->ast) break;
|
||||||
|
ast_queue_control(ch->ast, AST_CONTROL_PROGRESS);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -4193,6 +4202,8 @@ cb_events(enum event_e event, struct misdn_bchannel *bc, void *user_data)
|
|||||||
{
|
{
|
||||||
ch->state = MISDN_ALERTING;
|
ch->state = MISDN_ALERTING;
|
||||||
|
|
||||||
|
if (!ch->ast) break;
|
||||||
|
|
||||||
ast_queue_control(ch->ast, AST_CONTROL_RINGING);
|
ast_queue_control(ch->ast, AST_CONTROL_RINGING);
|
||||||
ast_setstate(ch->ast, AST_STATE_RINGING);
|
ast_setstate(ch->ast, AST_STATE_RINGING);
|
||||||
|
|
||||||
@@ -4215,7 +4226,9 @@ cb_events(enum event_e event, struct misdn_bchannel *bc, void *user_data)
|
|||||||
{
|
{
|
||||||
/*we answer when we've got our very new L3 ID from the NT stack */
|
/*we answer when we've got our very new L3 ID from the NT stack */
|
||||||
misdn_lib_send_event(bc,EVENT_CONNECT_ACKNOWLEDGE);
|
misdn_lib_send_event(bc,EVENT_CONNECT_ACKNOWLEDGE);
|
||||||
|
|
||||||
|
if (!ch->ast) break;
|
||||||
|
|
||||||
struct ast_channel *bridged=AST_BRIDGED_P(ch->ast);
|
struct ast_channel *bridged=AST_BRIDGED_P(ch->ast);
|
||||||
stop_indicate(ch);
|
stop_indicate(ch);
|
||||||
|
|
||||||
@@ -4238,8 +4251,10 @@ cb_events(enum event_e event, struct misdn_bchannel *bc, void *user_data)
|
|||||||
|
|
||||||
start_bc_tones(ch);
|
start_bc_tones(ch);
|
||||||
|
|
||||||
|
|
||||||
ch->state = MISDN_CONNECTED;
|
ch->state = MISDN_CONNECTED;
|
||||||
|
|
||||||
|
if (!ch->ast) break;
|
||||||
|
|
||||||
ast_queue_control(ch->ast, AST_CONTROL_ANSWER);
|
ast_queue_control(ch->ast, AST_CONTROL_ANSWER);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -4247,7 +4262,7 @@ cb_events(enum event_e event, struct misdn_bchannel *bc, void *user_data)
|
|||||||
/*we might not have an ch->ast ptr here anymore*/
|
/*we might not have an ch->ast ptr here anymore*/
|
||||||
if (ch) {
|
if (ch) {
|
||||||
struct chan_list *holded_ch=find_holded(cl_te, bc);
|
struct chan_list *holded_ch=find_holded(cl_te, bc);
|
||||||
|
|
||||||
chan_misdn_log(3,bc->port," --> org:%d nt:%d, inbandavail:%d state:%d\n", ch->orginator, bc->nt, misdn_inband_avail(bc), ch->state);
|
chan_misdn_log(3,bc->port," --> org:%d nt:%d, inbandavail:%d state:%d\n", ch->orginator, bc->nt, misdn_inband_avail(bc), ch->state);
|
||||||
if ( ch->orginator==ORG_AST && !bc->nt && misdn_inband_avail(bc) && ch->state != MISDN_CONNECTED) {
|
if ( ch->orginator==ORG_AST && !bc->nt && misdn_inband_avail(bc) && ch->state != MISDN_CONNECTED) {
|
||||||
/* If there's inband information available (e.g. a
|
/* If there's inband information available (e.g. a
|
||||||
@@ -4259,6 +4274,12 @@ cb_events(enum event_e event, struct misdn_bchannel *bc, void *user_data)
|
|||||||
|
|
||||||
ch->state=MISDN_DISCONNECTED;
|
ch->state=MISDN_DISCONNECTED;
|
||||||
start_bc_tones(ch);
|
start_bc_tones(ch);
|
||||||
|
|
||||||
|
if (ch->ast) {
|
||||||
|
ch->ast->hangupcause=bc->cause;
|
||||||
|
ast_queue_control(ch->ast, AST_CONTROL_BUSY);
|
||||||
|
}
|
||||||
|
ch->need_busy=0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4374,7 +4395,8 @@ cb_events(enum event_e event, struct misdn_bchannel *bc, void *user_data)
|
|||||||
frame.src = NULL;
|
frame.src = NULL;
|
||||||
frame.data = bc->bframe ;
|
frame.data = bc->bframe ;
|
||||||
|
|
||||||
ast_queue_frame(ch->ast,&frame);
|
if (ch->ast)
|
||||||
|
ast_queue_frame(ch->ast,&frame);
|
||||||
} else {
|
} else {
|
||||||
fd_set wrfs;
|
fd_set wrfs;
|
||||||
struct timeval tv;
|
struct timeval tv;
|
||||||
|
@@ -2859,23 +2859,12 @@ static msg_t *fetch_msg(int midev)
|
|||||||
{
|
{
|
||||||
msg_t *msg=alloc_msg(MAX_MSG_SIZE);
|
msg_t *msg=alloc_msg(MAX_MSG_SIZE);
|
||||||
int r;
|
int r;
|
||||||
/* fd_set rdfs; */
|
|
||||||
|
|
||||||
if (!msg) {
|
if (!msg) {
|
||||||
cb_log(0, 0, "fetch_msg: alloc msg failed !!");
|
cb_log(0, 0, "fetch_msg: alloc msg failed !!");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
FD_ZERO(&rdfs);
|
|
||||||
FD_SET(midev,&rdfs);
|
|
||||||
|
|
||||||
mISDN_select(FD_SETSIZE, &rdfs, NULL, NULL, NULL);
|
|
||||||
//select(FD_SETSIZE, &rdfs, NULL, NULL, NULL);
|
|
||||||
|
|
||||||
if (FD_ISSET(midev, &rdfs)) {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
AGAIN:
|
AGAIN:
|
||||||
r=mISDN_read(midev,msg->data,MAX_MSG_SIZE, TIMEOUT_10SEC);
|
r=mISDN_read(midev,msg->data,MAX_MSG_SIZE, TIMEOUT_10SEC);
|
||||||
msg->len=r;
|
msg->len=r;
|
||||||
@@ -2897,15 +2886,11 @@ static msg_t *fetch_msg(int midev)
|
|||||||
cb_log(0,0,"mISDN_read returned :%d error:%s (%d)\n",r,strerror(errno),errno);
|
cb_log(0,0,"mISDN_read returned :%d error:%s (%d)\n",r,strerror(errno),errno);
|
||||||
}
|
}
|
||||||
|
|
||||||
return msg;
|
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
} else {
|
if (!(frm->prim == (DL_DATA|INDICATION) )|| (frm->prim == (PH_DATA|INDICATION)))
|
||||||
printf ("Select timeout\n");
|
cb_log(0,0,"prim: %x dinfo:%x addr:%x msglen:%d frm->len:%d\n",frm->prim, frm->dinfo, frm->addr, msg->len,frm->len );
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
return msg;
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void misdn_lib_isdn_l1watcher(int port)
|
void misdn_lib_isdn_l1watcher(int port)
|
||||||
@@ -3914,8 +3899,6 @@ char *manager_isdn_get_info(enum event_e event)
|
|||||||
void manager_bchannel_activate(struct misdn_bchannel *bc)
|
void manager_bchannel_activate(struct misdn_bchannel *bc)
|
||||||
{
|
{
|
||||||
char buf[128];
|
char buf[128];
|
||||||
iframe_t *ifrm;
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
struct misdn_stack *stack=get_stack_by_bc(bc);
|
struct misdn_stack *stack=get_stack_by_bc(bc);
|
||||||
|
|
||||||
@@ -3931,19 +3914,7 @@ void manager_bchannel_activate(struct misdn_bchannel *bc)
|
|||||||
|
|
||||||
mISDN_write_frame(stack->midev, buf, bc->addr | FLG_MSG_DOWN, DL_ESTABLISH | REQUEST, 0,0, NULL, TIMEOUT_1SEC);
|
mISDN_write_frame(stack->midev, buf, bc->addr | FLG_MSG_DOWN, DL_ESTABLISH | REQUEST, 0,0, NULL, TIMEOUT_1SEC);
|
||||||
|
|
||||||
ret=mISDN_read(stack->midev,buf,128,TIMEOUT_10SEC);
|
|
||||||
|
|
||||||
ifrm=(iframe_t*)buf;
|
|
||||||
|
|
||||||
if (ret>0) {
|
|
||||||
if (ifrm->prim== (DL_ESTABLISH|CONFIRM)) {
|
|
||||||
cb_log(2,stack->port,"bchan: DL_ESTABLISH|CNF\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
return ;
|
return ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -3977,8 +3948,6 @@ void manager_bchannel_deactivate(struct misdn_bchannel * bc)
|
|||||||
char buf[128];
|
char buf[128];
|
||||||
mISDN_write_frame(stack->midev, buf, bc->addr | FLG_MSG_DOWN, DL_RELEASE|REQUEST,0,0,NULL, TIMEOUT_1SEC);
|
mISDN_write_frame(stack->midev, buf, bc->addr | FLG_MSG_DOWN, DL_RELEASE|REQUEST,0,0,NULL, TIMEOUT_1SEC);
|
||||||
|
|
||||||
mISDN_read(stack->midev, buf, 128, TIMEOUT_1SEC);
|
|
||||||
|
|
||||||
clear_ibuffer(bc->astbuf);
|
clear_ibuffer(bc->astbuf);
|
||||||
|
|
||||||
bc_state_change(bc,BCHAN_RELEASE);
|
bc_state_change(bc,BCHAN_RELEASE);
|
||||||
|
Reference in New Issue
Block a user