added pmp_l1_check option, to avoid l1 checking for group calls on PMP ports
authorChristian Richter <christian.richter@beronet.com>
Wed, 15 Feb 2006 19:32:45 +0000 (19:32 +0000)
committerChristian Richter <christian.richter@beronet.com>
Wed, 15 Feb 2006 19:32:45 +0000 (19:32 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@10225 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_misdn.c
channels/misdn/chan_misdn_config.h
channels/misdn/isdn_lib.c
channels/misdn/isdn_lib.h
channels/misdn_config.c
configs/misdn.conf.sample

index 606c4ce..68adc5e 100644 (file)
@@ -2306,8 +2306,9 @@ static struct ast_channel *misdn_request(const char *type, int format, void *dat
                                        
                                        if (!strcasecmp(cfg_group, group)) {
                                                int port_up;
-                                       
-                                               port_up = misdn_lib_port_up(port);
+                                               int check;
+                                               misdn_cfg_get(port, MISDN_CFG_PMP_L1_CHECK, &check, sizeof(int));
+                                               port_up = misdn_lib_port_up(port, check);
                                                
                                                if ( port_up )  {
                                                        newbc = misdn_lib_get_free_bc(port, robin_channel);
@@ -2333,12 +2334,14 @@ static struct ast_channel *misdn_request(const char *type, int format, void *dat
                                 port=misdn_cfg_get_next_port(port)) {
                                
                                misdn_cfg_get( port, MISDN_CFG_GROUPNAME, cfg_group, BUFFERSIZE);
-                               
+
+                               chan_misdn_log(3,port, "Group [%s] Port [%d]\n", group, port);
                                if (!strcasecmp(cfg_group, group)) {
                                        int port_up;
+                                       int check;
+                                       misdn_cfg_get(port, MISDN_CFG_PMP_L1_CHECK, &check, sizeof(int));
+                                       port_up = misdn_lib_port_up(port, check);
                                        
-                                       port_up = misdn_lib_port_up(port);
-
                                        chan_misdn_log(4, port, "portup:%d\n", port_up);
                                        
                                        if ( port_up )  {
index 8e2b260..84f346a 100644 (file)
@@ -26,6 +26,7 @@ enum misdn_cfg_elements {
        MISDN_CFG_RXGAIN,              /* int */
        MISDN_CFG_TXGAIN,              /* int */
        MISDN_CFG_TE_CHOOSE_CHANNEL,   /* int (bool) */
+       MISDN_CFG_PMP_L1_CHECK,        /* int (bool) */
        MISDN_CFG_CONTEXT,             /* char[] */
        MISDN_CFG_LANGUAGE,            /* char[] */
        MISDN_CFG_MUSICCLASS,            /* char[] */
index 8605bff..ee0e988 100644 (file)
@@ -1460,27 +1460,25 @@ int misdn_lib_send_facility(struct misdn_bchannel *bc, enum facility_type fac, v
 }
 
 
-int misdn_lib_port_up(int port)
+int misdn_lib_port_up(int port, int check)
 {
        struct misdn_stack *stack;
-       
+
+
        for (stack=glob_mgr->stack_list;
             stack;
             stack=stack->next) {
                
+               if ( !stack->ptp && !check) return 1;
+               
                if (stack->port == port) {
-                       if (stack->nt) {
-                               if (stack->l1link)
-                                       return 1;
-                               else
-                                       return 0;
-                       } else {
-                               if (stack->l1link)
-                                       return 1;
-                               else
-                                       return 0;
+                       if (stack->l1link)
+                               return 1;
+                       else {
+                               cb_log(-1,port, "Port down [%s]\n",
+                                      stack->ptp?"PP":"PMP");
+                               return 0;
                        }
-
                }
        }
   
index 7780424..7590b3e 100644 (file)
@@ -335,7 +335,7 @@ void manager_ph_control(struct misdn_bchannel *bc, int c1, int c2);
 int misdn_lib_port_restart(int port);
 int misdn_lib_get_port_info(int port);
 
-int misdn_lib_port_up(int port);
+int misdn_lib_port_up(int port, int notcheck);
 
 int misdn_lib_get_port_up (int port) ;
      
index c3a884f..7716ce3 100644 (file)
@@ -87,6 +87,7 @@ static const struct misdn_cfg_spec port_spec[] = {
        { "rxgain", MISDN_CFG_RXGAIN, MISDN_CTYPE_INT, "0", NONE },
        { "txgain", MISDN_CFG_TXGAIN, MISDN_CTYPE_INT, "0", NONE },
        { "te_choose_channel", MISDN_CFG_TE_CHOOSE_CHANNEL, MISDN_CTYPE_BOOL, "no", NONE },
+       { "pmp_l1_check", MISDN_CFG_PMP_L1_CHECK, MISDN_CTYPE_BOOL, "yes", NONE },
        { "context", MISDN_CFG_CONTEXT, MISDN_CTYPE_STR, "default", NONE },
        { "language", MISDN_CFG_LANGUAGE, MISDN_CTYPE_STR, "en", NONE },
        { "musicclass", MISDN_CFG_MUSICCLASS, MISDN_CTYPE_STR, "default", NONE },
index 0dba621..09ade12 100644 (file)
@@ -142,6 +142,19 @@ txgain=0
 te_choose_channel=no
 
 
+
+;
+; This option defines, if chan_misdn should check the L1 on  a PMP 
+; before makeing a group call on it. The L1 may go down for PMP Ports
+; so we might need this.
+; But be aware! a broken or plugged off cable might be used for a group call
+; as well, since chan_misdn has no chance to distinguish if the L1 is down
+; because of a lost Link or because the Provider shut it down...
+;
+; default: yes
+;
+pmp_l1_check=yes
+
 ;
 ; Send Setup_Acknowledge on incoming calls anyway (instead of PROCEEDING), 
 ; this requests additional Infos, so we can waitfordigits