]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Merged revisions 50495,50506 via svnmerge from
authorChristian Richter <christian.richter@beronet.com>
Tue, 23 Jan 2007 10:28:54 +0000 (10:28 +0000)
committerChristian Richter <christian.richter@beronet.com>
Tue, 23 Jan 2007 10:28:54 +0000 (10:28 +0000)
https://origsvn.digium.com/svn/asterisk/branches/1.2

........
r50495 | crichter | 2007-01-11 14:27:52 +0100 (Do, 11 Jan 2007) | 6 lines

* 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)

........
r50506 | crichter | 2007-01-11 15:45:38 +0100 (Do, 11 Jan 2007) | 1 line

when we get L2 UP, the L1 is UP definitely too, so we set the L1 state up as well.
........

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@51649 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_misdn.c
channels/misdn/isdn_lib.c
channels/misdn/isdn_msg_parser.c

index 2510df4372775b8302ad2991ad1953a23da843c7..f0f61056a791d7f16f528c122aaf05e0ff694e8c 100644 (file)
@@ -1879,23 +1879,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;
                }
        }
 
index d655b9305ae71cf3d9f6acc7f91fa89fd32dc42a..0735f6ccee0c6dcd07ac0a1e1af87b4b8fb64ad9 100644 (file)
@@ -1970,7 +1970,9 @@ handle_event_nt(void *dat, void *arg)
                                cb_log(0, stack->port, "%% GOT L2 Activate Info. but we're activated already.. this l2 is faulty, blocking port\n");
                                cb_event(EVENT_PORT_ALARM, &stack->bc[0], glob_mgr->user_data);
                        }
-                       
+               
+                       /* when we get the L2 UP, the L1 is UP definitely too*/
+                       stack->l1link = 1;
                        stack->l2link = 1;
                        stack->l2upcnt=0;
                        
@@ -2821,6 +2823,9 @@ static int handle_mgmt(msg_t *msg)
 
                case SSTATUS_L2_ESTABLISHED:
                        cb_log(3, stack->port, "MGMT: SSTATUS: L2_ESTABLISH \n");
+
+                       /*when the L2 goes UP, L1 needs to be UP too*/
+                       stack->l1link=1;
                        stack->l2link=1;
                        break;
                        
@@ -3612,12 +3617,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);
@@ -3747,6 +3752,16 @@ static 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);
+                                               }
+                                       }
                                }
                        }
                }
index aa6fb73f6a64e5789063da51163cc148dd633aca..1a1223db78cd1344a1672ebbd6cbd39b3f6d6510 100644 (file)
@@ -816,10 +816,14 @@ static msg_t *build_restart (struct isdn_msg msgs[], struct misdn_bchannel *bc,
        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; 
 }