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'));