diff options
author | crichter <crichter@f38db490-d61c-443f-a65b-d21fe96a405b> | 2006-09-28 11:03:05 +0000 |
---|---|---|
committer | crichter <crichter@f38db490-d61c-443f-a65b-d21fe96a405b> | 2006-09-28 11:03:05 +0000 |
commit | 95a561a3f8ae180d7d6828462418d28486043756 (patch) | |
tree | 412b3ccb9fabdd8c30453939ad397718503868fa /channels | |
parent | 6ab53db6e30b9ba2ccc89b6d3052a34f9fcad161 (diff) |
Merged revisions 43764 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.2
........
r43764 | crichter | 2006-09-27 14:51:03 +0200 (Mi, 27 Sep 2006) | 1 line
fixed a bug which led to chan_list zombies, when the call could not be properly established in misdn_call. also removed the ACK_HDLC stuff which is not really needed.
........
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.4@43852 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels')
-rw-r--r-- | channels/chan_misdn.c | 15 | ||||
-rw-r--r-- | channels/misdn/isdn_lib.c | 15 | ||||
-rw-r--r-- | channels/misdn/isdn_lib.h | 4 |
3 files changed, 9 insertions, 25 deletions
diff --git a/channels/chan_misdn.c b/channels/chan_misdn.c index 84e4c1c54..e6ac85079 100644 --- a/channels/chan_misdn.c +++ b/channels/chan_misdn.c @@ -110,7 +110,7 @@ int misdn_jb_empty(struct misdn_jb *jb, char *data, int len); enum misdn_chan_state { - MISDN_NOTHING, /*!< at beginning */ + MISDN_NOTHING=0, /*!< at beginning */ MISDN_WAITING4DIGS, /*!< when waiting for infos */ MISDN_EXTCANTMATCH, /*!< when asterisk couldnt match our ext */ MISDN_DIALING, /*!< when pbx_start */ @@ -1917,8 +1917,6 @@ static int misdn_call(struct ast_channel *ast, char *dest, int timeout) else chan_misdn_log(2,port,"NO OPTS GIVEN\n"); - ch->state=MISDN_CALLING; - r=misdn_lib_send_event( newbc, EVENT_SETUP ); /** we should have l3id after sending setup **/ @@ -1939,6 +1937,8 @@ static int misdn_call(struct ast_channel *ast, char *dest, int timeout) ast->hangupcause=16; if (newbc->nt) stop_bc_tones(ch); + + ch->state=MISDN_CALLING; return 0; } @@ -2246,8 +2246,9 @@ static int misdn_hangup(struct ast_channel *ast) bc=p->bc; - if (ast->_state == AST_STATE_RESERVED) { + if (ast->_state == AST_STATE_RESERVED || p->state == MISDN_NOTHING) { /* between request and call */ + ast_log(LOG_DEBUG, "State Reserved (or nothing) => chanIsAvail\n"); MISDN_ASTERISK_TECH_PVT(ast)=NULL; cl_dequeue_chan(&cl_te, p); @@ -4138,10 +4139,10 @@ cb_events(enum event_e event, struct misdn_bchannel *bc, void *user_data) cb_log(1,bc->port," --> found holded ch\n"); if (ch->state == MISDN_CONNECTED ) { misdn_transfer_bc(ch, holded_ch) ; + hangup_chan(ch); + // release_chan(bc); + break; } - hangup_chan(ch); - release_chan(bc); - break; } stop_bc_tones(ch); diff --git a/channels/misdn/isdn_lib.c b/channels/misdn/isdn_lib.c index b0d2fbe9d..19268d0e6 100644 --- a/channels/misdn/isdn_lib.c +++ b/channels/misdn/isdn_lib.c @@ -1005,12 +1005,6 @@ int setup_bc(struct misdn_bchannel *bc) } else if ( bc->hdlc ) { cb_log(2, stack->port," --> HDLC Mode\n"); -#ifdef ACK_HDLC - bc->ack_hdlc=(sem_t*)malloc(sizeof(sem_t)); - if ( sem_init((sem_t*)bc->ack_hdlc, 1, 0)<0 ) - sem_init((sem_t*)bc->ack_hdlc, 0, 0); -#endif - pid.protocol[1] = ISDN_PID_L1_B_64HDLC ; pid.protocol[2] = ISDN_PID_L2_B_TRANS ; pid.protocol[3] = ISDN_PID_L3_B_USER; @@ -2481,7 +2475,6 @@ static int handle_bchan(msg_t *msg) #endif free_msg(msg); - return 1; case DL_DATA|RESPONSE: #if MISDN_DEBUG @@ -3255,7 +3248,6 @@ int misdn_lib_send_event(struct misdn_bchannel *bc, enum event_e event ) /*holded_bc->upset=0; holded_bc->active=0;*/ bc_state_change(holded_bc,BCHAN_CLEANED); - cb_event( EVENT_NEW_BC, bc, holded_bc); } break; @@ -3953,13 +3945,6 @@ int misdn_lib_tx2misdn_frm(struct misdn_bchannel *bc, void *data, int len) cb_log(9, stack->port, "Writing %d bytes 2 mISDN\n",len); r=mISDN_write(stack->midev, buf, frm->len + mISDN_HEADER_LEN, TIMEOUT_INFINIT); -#ifdef ACK_HDLC - if (bc->hdlc && bc->ack_hdlc) { - cb_log(4,stack->port,"Awaiting Acknowledge [%d]\n",len); - sem_wait((sem_t*)bc->ack_hdlc); - cb_log(4,stack->port,"Acknowledged\n"); - } -#endif return 0; } diff --git a/channels/misdn/isdn_lib.h b/channels/misdn/isdn_lib.h index d849a7ce8..4289b42ba 100644 --- a/channels/misdn/isdn_lib.h +++ b/channels/misdn/isdn_lib.h @@ -59,7 +59,7 @@ enum tone_e { -#define MAX_BCHANS 30 +#define MAX_BCHANS 31 enum bchannel_state { BCHAN_CLEANED=0, @@ -197,8 +197,6 @@ struct misdn_bchannel { /* int b_addr; */ int layer_id; - void *ack_hdlc; - int layer; /*state stuff*/ |