aboutsummaryrefslogtreecommitdiffstats
path: root/channels
diff options
context:
space:
mode:
authorcrichter <crichter@f38db490-d61c-443f-a65b-d21fe96a405b>2007-01-11 13:27:52 +0000
committercrichter <crichter@f38db490-d61c-443f-a65b-d21fe96a405b>2007-01-11 13:27:52 +0000
commit491cf508dd486a2b1121ae8e0a2800ef092035db (patch)
tree002ea638049ea68b231160899a1ba75e6b204db5 /channels
parent42d84412db13373edb94eeef8f757d804233fbda (diff)
* 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
Diffstat (limited to 'channels')
-rw-r--r--channels/chan_misdn.c20
-rw-r--r--channels/misdn/isdn_lib.c14
-rw-r--r--channels/misdn/isdn_msg_parser.c6
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;i<max;i++) {
+ for (i=1;i<=max;i++) {
dummybc.channel=i;
cb_log(0, port, "Restarting channel %d\n",i);
misdn_lib_send_event(&dummybc, EVENT_RESTART);
@@ -3722,6 +3722,16 @@ void manager_event_handler(void *arg)
iframe_t *frm = (iframe_t *)msg->data;
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;
}