From 491cf508dd486a2b1121ae8e0a2800ef092035db Mon Sep 17 00:00:00 2001 From: crichter Date: Thu, 11 Jan 2007 13:27:52 +0000 Subject: * more additions to make the RESTART message work * added fix for misdn_call to allow SETUPs with empty extensions, replaced the strtok_r functions with strsep for that (inspired by Sandro Cappellazzo, thanks) git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.2@50495 f38db490-d61c-443f-a65b-d21fe96a405b --- channels/chan_misdn.c | 20 +++++++++----------- channels/misdn/isdn_lib.c | 14 ++++++++++++-- channels/misdn/isdn_msg_parser.c | 6 +++++- 3 files changed, 26 insertions(+), 14 deletions(-) diff --git a/channels/chan_misdn.c b/channels/chan_misdn.c index 49531126a..f5499fd9d 100644 --- a/channels/chan_misdn.c +++ b/channels/chan_misdn.c @@ -1623,23 +1623,21 @@ static int misdn_call(struct ast_channel *ast, char *dest, int timeout) int r; struct chan_list *ch=MISDN_ASTERISK_TECH_PVT(ast); struct misdn_bchannel *newbc; - char *opts=NULL, *ext,*tokb; + char *opts=NULL, *ext; char dest_cp[256]; { strncpy(dest_cp,dest,sizeof(dest_cp)-1); dest_cp[sizeof(dest_cp)]=0; - - ext=strtok_r(dest_cp,"/",&tokb); - + + ext=dest_cp; + strsep(&ext,"/"); if (ext) { - ext=strtok_r(NULL,"/",&tokb); - if (ext) { - opts=strtok_r(NULL,"/",&tokb); - } else { - chan_misdn_log(0,0,"misdn_call: No Extension given!\n"); - return -1; - } + opts=ext; + strsep(&opts,"/"); + } else { + ast_log(LOG_WARNING, "Malformed dialstring\n"); + return -1; } } diff --git a/channels/misdn/isdn_lib.c b/channels/misdn/isdn_lib.c index 33a0f8dbf..4888cada2 100644 --- a/channels/misdn/isdn_lib.c +++ b/channels/misdn/isdn_lib.c @@ -3587,12 +3587,12 @@ int misdn_lib_send_restart(int port) struct misdn_bchannel dummybc; memset (&dummybc,0,sizeof(dummybc)); dummybc.port=stack->port; - dummybc.l3_id=MISDN_ID_DUMMY; + dummybc.l3_id=MISDN_ID_GLOBAL; dummybc.nt=stack->nt; int max=stack->pri?30:2; int i; - for (i=1;idata; struct misdn_bchannel *bc = find_bc_by_l3id(stack, frm->dinfo); if (bc) send_msg(glob_mgr->midev, bc, msg); + else { + if (frm->dinfo == MISDN_ID_GLOBAL) { + struct misdn_bchannel dummybc; + memset (&dummybc,0,sizeof(dummybc)); + dummybc.port=stack->port; + dummybc.l3_id=MISDN_ID_GLOBAL; + dummybc.nt=stack->nt; + send_msg(glob_mgr->midev, &dummybc, msg); + } + } } } } diff --git a/channels/misdn/isdn_msg_parser.c b/channels/misdn/isdn_msg_parser.c index dec05f214..da73cb42f 100644 --- a/channels/misdn/isdn_msg_parser.c +++ b/channels/misdn/isdn_msg_parser.c @@ -794,10 +794,14 @@ msg_t *build_restart (struct isdn_msg msgs[], struct misdn_bchannel *bc, int nt) msg_t *msg =(msg_t*)create_l3msg(CC_RESTART | REQUEST, MT_RESTART, bc?bc->l3_id:-1, sizeof(RESTART_t) ,nt); restart=(RESTART_t*)((msg->data+HEADER_LEN)); - + #if DEBUG printf("Building RESTART Msg\n"); #endif + enc_ie_channel_id(&restart->CHANNEL_ID, msg, 1,bc->channel, nt,bc); + + cb_log(0,bc->port, "Restarting channel %d\n", bc->channel); + return msg; } -- cgit v1.2.3