aboutsummaryrefslogtreecommitdiffstats
path: root/channels
diff options
context:
space:
mode:
authorautomerge <automerge@f38db490-d61c-443f-a65b-d21fe96a405b>2007-01-30 14:59:43 +0000
committerautomerge <automerge@f38db490-d61c-443f-a65b-d21fe96a405b>2007-01-30 14:59:43 +0000
commitf9c1927b746c3cd9ece3eb0a544d749bed8beb73 (patch)
treebc43f04fdb0ec300ebf3e30f0554bf8123d657f5 /channels
parentb8b42dbda6026fa0a8c28b987ae5373e6518072e (diff)
automerge commit
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.2-netsec@52855 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels')
-rw-r--r--channels/chan_misdn.c33
-rw-r--r--channels/misdn/isdn_lib.c37
2 files changed, 27 insertions, 43 deletions
diff --git a/channels/chan_misdn.c b/channels/chan_misdn.c
index f6b172ab8..1a3a5a29e 100644
--- a/channels/chan_misdn.c
+++ b/channels/chan_misdn.c
@@ -3734,6 +3734,8 @@ cb_events(enum event_e event, struct misdn_bchannel *bc, void *user_data)
strncat(bc->dad,bc->infos_pending, l - strlen(bc->dad));
bc->dad[l-1] = 0;
}
+
+ if (!ch->ast) break;
{
int l = sizeof(ch->ast->exten);
strncpy(ch->ast->exten, bc->dad, l);
@@ -3752,7 +3754,6 @@ cb_events(enum event_e event, struct misdn_bchannel *bc, void *user_data)
break;
case EVENT_PROCEEDING:
{
-
if ( misdn_cap_is_speech(bc->capability) &&
misdn_inband_avail(bc) ) {
start_bc_tones(ch);
@@ -3760,10 +3761,14 @@ cb_events(enum event_e event, struct misdn_bchannel *bc, void *user_data)
ch->state = MISDN_PROCEEDING;
+ if (!ch->ast) break;
+
ast_queue_control(ch->ast, AST_CONTROL_PROCEEDING);
}
break;
case EVENT_PROGRESS:
+
+
if (!bc->nt ) {
if ( misdn_cap_is_speech(bc->capability) &&
misdn_inband_avail(bc)
@@ -3771,9 +3776,10 @@ cb_events(enum event_e event, struct misdn_bchannel *bc, void *user_data)
start_bc_tones(ch);
}
- ast_queue_control(ch->ast, AST_CONTROL_PROGRESS);
-
ch->state=MISDN_PROGRESS;
+
+ if (!ch->ast) break;
+ ast_queue_control(ch->ast, AST_CONTROL_PROGRESS);
}
break;
@@ -3782,6 +3788,8 @@ cb_events(enum event_e event, struct misdn_bchannel *bc, void *user_data)
{
ch->state = MISDN_ALERTING;
+ if (!ch->ast) break;
+
ast_queue_control(ch->ast, AST_CONTROL_RINGING);
ast_setstate(ch->ast, AST_STATE_RINGING);
@@ -3804,7 +3812,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 */
misdn_lib_send_event(bc,EVENT_CONNECT_ACKNOWLEDGE);
-
+
+ if (!ch->ast) break;
+
struct ast_channel *bridged=AST_BRIDGED_P(ch->ast);
stop_indicate(ch);
@@ -3827,8 +3837,10 @@ cb_events(enum event_e event, struct misdn_bchannel *bc, void *user_data)
start_bc_tones(ch);
-
ch->state = MISDN_CONNECTED;
+
+ if (!ch->ast) break;
+
ast_queue_control(ch->ast, AST_CONTROL_ANSWER);
}
break;
@@ -3836,7 +3848,7 @@ cb_events(enum event_e event, struct misdn_bchannel *bc, void *user_data)
/*we might not have an ch->ast ptr here anymore*/
if (ch) {
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);
if ( ch->orginator==ORG_AST && !bc->nt && misdn_inband_avail(bc) && ch->state != MISDN_CONNECTED) {
/* If there's inband information available (e.g. a
@@ -3849,8 +3861,10 @@ cb_events(enum event_e event, struct misdn_bchannel *bc, void *user_data)
ch->state=MISDN_DISCONNECTED;
start_bc_tones(ch);
- if (ch->ast) ch->ast->hangupcause=bc->cause;
- ast_queue_control(ch->ast, AST_CONTROL_BUSY);
+ if (ch->ast) {
+ ch->ast->hangupcause=bc->cause;
+ ast_queue_control(ch->ast, AST_CONTROL_BUSY);
+ }
ch->need_busy=0;
break;
}
@@ -3966,7 +3980,8 @@ cb_events(enum event_e event, struct misdn_bchannel *bc, void *user_data)
frame.src = NULL;
frame.data = bc->bframe ;
- ast_queue_frame(ch->ast,&frame);
+ if (ch->ast)
+ ast_queue_frame(ch->ast,&frame);
} else {
fd_set wrfs;
struct timeval tv;
diff --git a/channels/misdn/isdn_lib.c b/channels/misdn/isdn_lib.c
index d090ad86c..14cf13818 100644
--- a/channels/misdn/isdn_lib.c
+++ b/channels/misdn/isdn_lib.c
@@ -2857,23 +2857,12 @@ msg_t *fetch_msg(int midev)
{
msg_t *msg=alloc_msg(MAX_MSG_SIZE);
int r;
-/* fd_set rdfs; */
if (!msg) {
cb_log(0, 0, "fetch_msg: alloc msg failed !!");
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:
r=mISDN_read(midev,msg->data,MAX_MSG_SIZE, TIMEOUT_10SEC);
msg->len=r;
@@ -2895,15 +2884,11 @@ msg_t *fetch_msg(int midev)
cb_log(0,0,"mISDN_read returned :%d error:%s (%d)\n",r,strerror(errno),errno);
}
- return msg;
-
#if 0
- } else {
- printf ("Select timeout\n");
- }
+ if (!(frm->prim == (DL_DATA|INDICATION) )|| (frm->prim == (PH_DATA|INDICATION)))
+ 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
-
- return NULL;
+ return msg;
}
@@ -3942,8 +3927,6 @@ char *manager_isdn_get_info(enum event_e event)
void manager_bchannel_activate(struct misdn_bchannel *bc)
{
char buf[128];
- iframe_t *ifrm;
- int ret;
struct misdn_stack *stack=get_stack_by_bc(bc);
@@ -3959,19 +3942,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);
- 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 ;
-
}
@@ -4005,8 +3976,6 @@ void manager_bchannel_deactivate(struct misdn_bchannel * bc)
char buf[128];
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);
bc_state_change(bc,BCHAN_RELEASE);