diff --git a/.dok/image/sip_model.jpg b/.dok/image/sip_model.jpg new file mode 100644 index 0000000..f8a0fbc Binary files /dev/null and b/.dok/image/sip_model.jpg differ diff --git a/Sccp_manager.class.php b/Sccp_manager.class.php index 7a4f54a..3850ed9 100644 --- a/Sccp_manager.class.php +++ b/Sccp_manager.class.php @@ -1930,18 +1930,23 @@ class Sccp_manager extends \FreePBX_Helpers implements \BMO { if (!empty($dev_config['type'])) { if (strpos($dev_config['type'],'sip') !== false) { $sccp_native = false; - $data_tmp =$this->sipconfigs->getSipConfig(); + $tmp_bind =$this->sipconfigs->getSipConfig(); $dev_ext_config = $this->dbinterface->get_db_SccpTableData("SccpDevice", array('name' => $dev_id, 'fields'=>'sip_ext')); - $data_value = array_merge($data_value, $dev_ext_config, $data_tmp); + $data_value = array_merge($data_value, $dev_ext_config); $data_tmp = explode(';',$dev_ext_config['sip_lines']); foreach ($data_tmp as $value) { $tmp_line = explode(',',$value); switch ($tmp_line[0]) { case 'line': $dev_line_data= $this->sipconfigs->get_db_sip_TableData('DeviceById',array('id'=>$tmp_line[1])); + $f_linetype = ($dev_line_data['dial'] == 'PJSIP')? 'pjsip':'sip'; + $dev_line_data['sbind'] = $tmp_bind[$f_linetype]; if (!empty($dev_line_data)) { $data_value['siplines'][] = $dev_line_data; } + if ($tmp_line[2] =='default') { + $data_value['sbind']=$tmp_bind[$f_linetype]; + } break; case 'speeddial': $data_value['speeddial'][] = array("name"=>$tmp_line[1],"dial"=>$tmp_line[2]); @@ -1951,10 +1956,12 @@ class Sccp_manager extends \FreePBX_Helpers implements \BMO { break; } } -// return print_r($data_tmp ,true); +// return print_r($data_value ,true); // return print_r($dev_line_data,true); } } +// return print_r($dev_config ,true); + foreach ($this->sccpvalues as $key => $value) { $data_value[$key] = $value['data']; } diff --git a/Sccp_manager.inc/sipconfigs.class.php b/Sccp_manager.inc/sipconfigs.class.php index 461f8d3..224e548 100644 --- a/Sccp_manager.inc/sipconfigs.class.php +++ b/Sccp_manager.inc/sipconfigs.class.php @@ -61,26 +61,48 @@ class sipconfigs { } } - + public function getSipConfig() { $result = array(); - $def_sip_proto = 'sip'; - $def_proto = 'tcp'; - $supp_proto = ''; +// $def_sip_proto = 'sip'; +// $def_proto = 'tcp'; +// $supp_proto = ''; - $result['sipport'] = \FreePBX::Sipsettings()->getConfig('bindport'); - $result['tlsport'] = \FreePBX::Sipsettings()->getConfig('tlsbindport'); - $tmp_sipsetigs = \FreePBX::Sipsettings()->getChanSipSettings(); - $tmp_sip_binds = \FreePBX::Sipsettings()->getBinds(); +// $result['sipport'] = \FreePBX::Sipsettings()->getConfig('bindport'); +// $result['tlsport'] = \FreePBX::Sipsettings()->getConfig('tlsbindport'); +// $tmp_sipsetigs = \FreePBX::Sipsettings()->getChanSipSettings(); + $tmp_binds = \FreePBX::Sipsettings()->getBinds(); + $if_list = $this->paren_class ->getIP_information2('ip4'); +/* $tmp_bind_ip = !empty($tmp_sipsetigs['externhost_val']) ? $tmp_sipsetigs['externhost_val'] : ''; $tmp_bind_ip = !empty($tmp_sipsetigs['externip_val']) ? $tmp_sipsetigs['externip_val'] : $tmp_bind_ip; $tmp_bind_ip = !empty($tmp_sipsetigs['bindaddr']) ? $tmp_sipsetigs['bindaddr'] : $tmp_bind_ip; - + */ + $tmp_binds = is_array($tmp_binds) ? $tmp_binds: array(); + foreach($tmp_binds as $f_protocol => $f_bind) { + foreach($f_bind as $f_ip => $f_port) { + if (($f_ip == '0.0.0.0') || ($f_ip == '[::]')) { + foreach($if_list as $f_if => $f_data) { + if ($f_data['ip'] == "127.0.0.1") { + continue; + } + $result[$f_protocol][$f_data['ip']]=$f_port; + $result[$f_protocol][$f_data['ip']]['ip']=$f_data['ip']; + } + } else { + $result[$f_protocol][$f_ip]=$f_port; + $result[$f_protocol][$f_ip]['ip']=$f_ip; + } + } + } + return $result; +/* // $result['sipbind'] = $tmp_bind_ip; if (empty($tmp_sip_binds[$def_sip_proto])){ $def_proto = 'pjsip'; } + return $result; foreach ($tmp_sip_binds[$def_sip_proto] as $key => $value) { if (empty($value[$def_proto])) { @@ -99,6 +121,36 @@ class sipconfigs { } $result['sipbind'] = $tmp_bind_ip; $result['sipsuportproto'] = $supp_proto; + + $binds= array(); + $driver = \FreePBX::Config()->get_conf_setting('ASTSIPDRIVER'); + if ($driver == "both" || $driver == "chan_pjsip") { + $b = \FreePBX::Sipsettings()->getConfig("binds"); + $b = is_array($b) ? $b : array(); + foreach($b as $protocol => $bind) { + foreach($bind as $ip => $state) { + if($state != "on") { + continue; + } + $p = \FreePBX::Sipsettings()->getConfig($protocol."port-".$ip); + $result['nb3'.$protocol] = $p; + if ($flatten) { + $binds['pjsip']['[::]'][$protocol] = $p; + } else { + $binds['pjsip'][$ip][$protocol] = $p; + } + } + } + } else { + $binds['pjsip'] = array("0.0.0.0" => array()); + } + + $result['nd'] = $driver; + + $result['nb'] = $binds; + $result['nb2'] = $b; return $result; + * + */ } } diff --git a/Sccp_manager.inc/xmlinterface.class.php b/Sccp_manager.inc/xmlinterface.class.php index 7b13818..a828430 100644 --- a/Sccp_manager.inc/xmlinterface.class.php +++ b/Sccp_manager.inc/xmlinterface.class.php @@ -417,6 +417,7 @@ class xmlinterface { return $res; } + /* private function get_server_sip_bind($data_values = array()) { $res = array(); @@ -444,6 +445,8 @@ class xmlinterface { } return $res; } + * + */ function create_SEP_SIP_XML($store_path = '', $data_values = array(), $dev_config = array(), $dev_id = '', $lang_info = array()) { @@ -481,7 +484,16 @@ class xmlinterface { $xml_template = $data_path . '/templates/SEP0000000000.cnf.xml_79df_sip_template'; } $xml_name = $store_path . '/' . $dev_id . '.cnf.xml'; - $sip_bind = $this->get_server_sip_bind($data_values); + //$sip_bind = $this->get_server_sip_bind($data_values); + $sip_bind = $data_values['sbind']; + $bind_proto = 'tcp'; + $bind_ip_def = ''; + foreach($sip_bind as $key => $value) { + if (empty($bind_ip_def)) { + $bind_ip_def = $key; + $bind_proto = (isset($value['tcp'])) ? 'tcp' : 'udp'; + } + } if (file_exists($xml_template)) { $xml_work = simplexml_load_file($xml_template); @@ -569,13 +581,13 @@ class xmlinterface { case 'callManagerGroup': $xnode = &$xml_node->$dkey->members; $ifc = 0; - foreach ($sip_bind as $bind_value) { + foreach ($sip_bind as $bind_ip => $bind_value) { $xnode_obj = clone $xnode->member; $xnode_obj['priority'] = $ifc; $xnode_obj->callManager->name = $data_values['servername']; - $xnode_obj->callManager->ports->sipPort = $bind_value['port']; - $xnode_obj->callManager->ports->securedSipPort = $bind_value['tlsport']; - $xnode_obj->callManager->processNodeName = $bind_value['ip']; + $xnode_obj->callManager->ports->sipPort = $bind_value[$bind_proto]; +// $xnode_obj->callManager->ports->securedSipPort = $bind_value['tlsport']; + $xnode_obj->callManager->processNodeName = $bind_ip; if ($ifc === 0) { $this->replaceSimpleXmlNode($xnode->member, $xnode_obj); } else { @@ -599,13 +611,13 @@ class xmlinterface { } switch ($dkey) { case 'sipProxies': - $xnode = &$xml_node->$dkey; - $xnode->backupProxy = $sip_bind[0]['ip']; - $xnode->backupProxyPort = $sip_bind[0]['port']; - $xnode->emergencyProxy = $sip_bind[0]['ip']; - $xnode->emergencyProxyPort = $sip_bind[0]['port']; - $xnode->outboundProxy = $sip_bind[0]['ip']; - $xnode->outboundProxyPort = $sip_bind[0]['port']; + $xnode = &$xml_node->$dkey; + $xnode->backupProxy = $bind_ip_def; + $xnode->backupProxyPort = $sip_bind[$bind_ip_def][$bind_proto]; + $xnode->emergencyProxy = $bind_proto; + $xnode->emergencyProxyPort = $sip_bind[$bind_ip_def][$bind_proto]; + $xnode->outboundProxy = $bind_proto; + $xnode->outboundProxyPort = $sip_bind[$bind_ip_def][$bind_proto]; $xnode->registerWithProxy = "true"; break; @@ -621,8 +633,8 @@ class xmlinterface { //$xnode_obj->proxy = $data_values['bindaddr']; $xnode_obj-> featureID = "9"; if ($xnode_obj->proxy != 'USECALLMANAGER') { - $xnode_obj->proxy = $sip_bind[0]['ip']; - $xnode_obj->port = $sip_bind[0]['port']; + $xnode_obj->proxy = $bind_proto; + $xnode_obj->port = $sip_bind[$bind_ip_def][$bind_proto]; } foreach ($var_xml_sipline as $line_key => $line_val) { diff --git a/conf/Sccp.class.php.v433 b/conf/Sccp.class.php.v433 index 6ab4417..4dd5cfb 100644 --- a/conf/Sccp.class.php.v433 +++ b/conf/Sccp.class.php.v433 @@ -43,7 +43,7 @@ class Sccp extends \FreePBX\modules\Core\Driver { "prettyName" => _("Sccp Custom Driver"), "shortName" => "SCCP", "description" => _("Sccp Device"), - "Version" => "11.3.v434", + "Version" => "11.3.v434m", "about" => "Sccp mysql class Base ver: 11.3, Sccp ver: 434" ); } @@ -80,10 +80,18 @@ class Sccp extends \FreePBX\modules\Core\Driver { } // die(print_r($settings)); + $tech = Array(); + $sql = "DESCRIBE `sccpline`"; + foreach ($this->database->query($sql) as $row) { + $tech[$row["Field"]]=$row["Field"]; + } + +// die(print_r($tech)); $sql = 'REPLACE INTO sccpline (name'; $sqlv = 'values ("'.$id.'"'; foreach($this->data_fld as $key => $val) { + if (isset($tech[$key])) { switch ($key) { case 'incominglimit': $sql .= ', '.$key; @@ -113,6 +121,7 @@ class Sccp extends \FreePBX\modules\Core\Driver { } break; } + } } $sql .= ") ".$sqlv.");"; // die(print_r($sql)); @@ -144,7 +153,7 @@ class Sccp extends \FreePBX\modules\Core\Driver { // print_r($sql); try { $sth->execute(array($id)); - $tech = $sth->fetch(); + $tech = $sth->fetch(); $tech['dial']='SCCP/'.$id; } catch(\Exception $e) {} diff --git a/conf/sccpgeneral.xml.v431 b/conf/sccpgeneral.xml.v431 index 7f79fec..e7199f7 100644 --- a/conf/sccpgeneral.xml.v431 +++ b/conf/sccpgeneral.xml.v431 @@ -1039,8 +1039,9 @@ and open the template in the editor. Base Version before all crash :-) description 000000000 sccp-custom + - The information in the upper right corner of the device screen + The information in the upper right corner of the device screen. Only English letters and digits ! diff --git a/conf/sccpgeneral.xml.v433 b/conf/sccpgeneral.xml.v433 index e48fe8e..3f678b3 100644 --- a/conf/sccpgeneral.xml.v433 +++ b/conf/sccpgeneral.xml.v433 @@ -1098,8 +1098,9 @@ and open the template in the editor. Base Version before all crash :-) _description 000000000 sccp-custom + - The information in the upper right corner of the device screen + The information in the upper right corner of the device screen. Only English letters and digits ! diff --git a/conf/sccpsimple.xml.v431 b/conf/sccpsimple.xml.v431 index 45b96e0..2cfeaac 100644 --- a/conf/sccpsimple.xml.v431 +++ b/conf/sccpsimple.xml.v431 @@ -1041,8 +1041,9 @@ and open the template in the editor. Base Version before all crash :-) description 000000000 sccp-custom + - The information in the upper right corner of the device screen + The information in the upper right corner of the device screen. Only English letters and digits ! diff --git a/conf/sccpsimple.xml.v433 b/conf/sccpsimple.xml.v433 index cd77d6d..7e26196 100644 --- a/conf/sccpsimple.xml.v433 +++ b/conf/sccpsimple.xml.v433 @@ -1095,8 +1095,9 @@ and open the template in the editor. Base Version before all crash :-) description 000000000 sccp-custom + - The information in the upper right corner of the device screen + The information in the upper right corner of the device screen. Only English letters and digits ! diff --git a/views/server.info.php b/views/server.info.php index e2def53..76122f3 100644 --- a/views/server.info.php +++ b/views/server.info.php @@ -105,6 +105,9 @@ if ($mysql_info['Value'] <= '2000') { //$tmp_data_list = $amp_conf; //$tmp_data_list=FreePBX::create()->Sipsettings->getConfig('bindport'); // $tmp_data_list=FreePBX::Sipsettings()->getChanSipSettings(); + $tmp_data_list=$this->sipconfigs->getSipConfig(); + //$tmp_data_list=FreePBX::Sipsettings()->getBinds(); + // $tmp_data_list = \FreePBX::Sipsettings()->getSipPortOwner(); // $tmp_data_list=$this->dbinterface->get_db_SccpTableData('SccpExtension'); // $tmp_data_list=$this->dbinterface->get_db_SccpTableData('SccpDevice', array('type'=>'cisco-sip'));