mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-29 18:19:30 +00:00
* 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: https://origsvn.digium.com/svn/asterisk/branches/1.2@50495 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -1623,23 +1623,21 @@ static int misdn_call(struct ast_channel *ast, char *dest, int timeout)
|
|||||||
int r;
|
int r;
|
||||||
struct chan_list *ch=MISDN_ASTERISK_TECH_PVT(ast);
|
struct chan_list *ch=MISDN_ASTERISK_TECH_PVT(ast);
|
||||||
struct misdn_bchannel *newbc;
|
struct misdn_bchannel *newbc;
|
||||||
char *opts=NULL, *ext,*tokb;
|
char *opts=NULL, *ext;
|
||||||
char dest_cp[256];
|
char dest_cp[256];
|
||||||
|
|
||||||
{
|
{
|
||||||
strncpy(dest_cp,dest,sizeof(dest_cp)-1);
|
strncpy(dest_cp,dest,sizeof(dest_cp)-1);
|
||||||
dest_cp[sizeof(dest_cp)]=0;
|
dest_cp[sizeof(dest_cp)]=0;
|
||||||
|
|
||||||
ext=strtok_r(dest_cp,"/",&tokb);
|
ext=dest_cp;
|
||||||
|
strsep(&ext,"/");
|
||||||
if (ext) {
|
if (ext) {
|
||||||
ext=strtok_r(NULL,"/",&tokb);
|
opts=ext;
|
||||||
if (ext) {
|
strsep(&opts,"/");
|
||||||
opts=strtok_r(NULL,"/",&tokb);
|
} else {
|
||||||
} else {
|
ast_log(LOG_WARNING, "Malformed dialstring\n");
|
||||||
chan_misdn_log(0,0,"misdn_call: No Extension given!\n");
|
return -1;
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -3587,12 +3587,12 @@ int misdn_lib_send_restart(int port)
|
|||||||
struct misdn_bchannel dummybc;
|
struct misdn_bchannel dummybc;
|
||||||
memset (&dummybc,0,sizeof(dummybc));
|
memset (&dummybc,0,sizeof(dummybc));
|
||||||
dummybc.port=stack->port;
|
dummybc.port=stack->port;
|
||||||
dummybc.l3_id=MISDN_ID_DUMMY;
|
dummybc.l3_id=MISDN_ID_GLOBAL;
|
||||||
dummybc.nt=stack->nt;
|
dummybc.nt=stack->nt;
|
||||||
|
|
||||||
int max=stack->pri?30:2;
|
int max=stack->pri?30:2;
|
||||||
int i;
|
int i;
|
||||||
for (i=1;i<max;i++) {
|
for (i=1;i<=max;i++) {
|
||||||
dummybc.channel=i;
|
dummybc.channel=i;
|
||||||
cb_log(0, port, "Restarting channel %d\n",i);
|
cb_log(0, port, "Restarting channel %d\n",i);
|
||||||
misdn_lib_send_event(&dummybc, EVENT_RESTART);
|
misdn_lib_send_event(&dummybc, EVENT_RESTART);
|
||||||
@@ -3722,6 +3722,16 @@ void manager_event_handler(void *arg)
|
|||||||
iframe_t *frm = (iframe_t *)msg->data;
|
iframe_t *frm = (iframe_t *)msg->data;
|
||||||
struct misdn_bchannel *bc = find_bc_by_l3id(stack, frm->dinfo);
|
struct misdn_bchannel *bc = find_bc_by_l3id(stack, frm->dinfo);
|
||||||
if (bc) send_msg(glob_mgr->midev, bc, msg);
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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);
|
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));
|
restart=(RESTART_t*)((msg->data+HEADER_LEN));
|
||||||
|
|
||||||
#if DEBUG
|
#if 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);
|
||||||
|
|
||||||
|
cb_log(0,bc->port, "Restarting channel %d\n", bc->channel);
|
||||||
|
|
||||||
return msg;
|
return msg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user