diff --git a/Sccp_manager.class.php b/Sccp_manager.class.php
index caa8fe3..1d3b1d5 100644
--- a/Sccp_manager.class.php
+++ b/Sccp_manager.class.php
@@ -718,7 +718,7 @@ class Sccp_manager extends \FreePBX_Helpers implements \BMO {
// No site defaults so return chan-sccp defaults
$val = $this->sccpvalues['allow']['systemdefault'];
}
- $siteCodecs = array_fill_keys(explode(',',$val), 1);
+ $siteCodecs = array_fill_keys(explode(';',$val), 1);
switch ($type) {
case 'audio':
$fpbxCodecs = $this->FreePBX->Codecs->getAudio();
diff --git a/install.php b/install.php
index 8ca382c..8f930ee 100644
--- a/install.php
+++ b/install.php
@@ -165,7 +165,7 @@ function Get_DB_config($sccp_compatible)
'transfer' => array('create' => "enum('yes','no') NOT NULL default 'yes'", 'modify' => "enum('yes','no')"),
'vmnum' => array('def_modify' => "*97"),
'musicclass' => array('def_modify' => "default"),
- 'disallow' => array('create' => "VARCHAR(255) NULL DEFAULT NULL"),
+ 'disallow' => array('create' => "VARCHAR(255) NULL DEFAULT 'all'", 'modify' => 'VARCHAR(255)'),
'allow' => array('create' => "VARCHAR(255) NULL DEFAULT NULL"),
'id' => array('create' => 'MEDIUMINT(9) NOT NULL AUTO_INCREMENT, ADD UNIQUE(id);', 'modify' => "MEDIUMINT(9)", 'index' => 'id'),
'echocancel' => array('create' => "enum('yes','no') NOT NULL default 'yes'", 'modify' => "enum('yes','no')"),
@@ -983,7 +983,10 @@ function cleanUpSccpSettings() {
// 2 special cases deny|permit & disallow|allow where need to parse on |.
$newKeyword = explode("|", $valueArray['Name'], 2);
if (isset($newKeyword[1])) {
+ // chan-sccp sets sysdef as comma separated list for sccp.conf, but expects ; separated list
+ // when returned from db
$newSysDef = explode("|", $valueArray['DefaultValue'], 2);
+ $newSysDef = str_replace(',',';', $newSysDef);
$i = 0;
foreach ($newKeyword as $dummy) {
if (array_key_exists($newKeyword[$i],$settingsFromDb)) {
@@ -1032,5 +1035,15 @@ function cleanUpSccpSettings() {
)";
$results = $db->query($sql);
}
+ // have to correct prior verion sccpline lists for allow/disallow and deny permit. Prior
+ // versions used csl, but chan-sccp expects ; separated lists when returned by db.
+
+ outn("
" . _("Replacing invalid values in sccpline") . "");
+ $db->query("UPDATE sccpline SET allow = REPLACE(allow, ',',';') WHERE allow like '%,%'");
+ $db->query("UPDATE sccpline SET disallow = REPLACE(disallow, ',',';') WHERE disallow like '%,%'");
+
+ // Ensure that disallow is set to all if unset (and not NULL)
+ $db->query("UPDATE sccpline SET disallow = 'all' WHERE disallow like ''");
+
}
?>
diff --git a/sccpManClasses/Sccp.class.php.v433 b/sccpManClasses/Sccp.class.php.v433
index b06aa4d..255c50e 100644
--- a/sccpManClasses/Sccp.class.php.v433
+++ b/sccpManClasses/Sccp.class.php.v433
@@ -85,6 +85,13 @@ class Sccp extends \FreePBX\modules\Core\Driver {
}
// This will produce an array where site defaults take precedence over system defaults
$this->line_defaults = array_intersect_key($siteDefaults,$sccpDefaults);
+ // If have no site codecs, use system defaults - must have a codec!
+ if (empty($this->line_defaults['allow'])) {
+ $this->line_defaults['allow'] = $sccpDefaults['allow'];
+ }
+ if (empty($this->line_defaults['disallow'])) {
+ $this->line_defaults['disallow'] = $sccpDefaults['disallow'];
+ }
unset($raw_settings, $siteDefaults, $sccpDefaults);
}
@@ -121,7 +128,7 @@ class Sccp extends \FreePBX\modules\Core\Driver {
$allow_codec[] = str_replace('codec_','',$key);
}
}
- $settings['allow']['value'] = implode(",", $allow_codec);
+ $settings['allow']['value'] = implode(";", $allow_codec);
// Reset to line defaults if no value selected
if (empty($settings['allow']['value'])) {
$settings['allow']['value'] = $this->line_defaults['allow'];
@@ -238,7 +245,7 @@ class Sccp extends \FreePBX\modules\Core\Driver {
$currentComponent->addTabTranslation('sccp',_('SCCP'));
// get site and system defaults
- $systemCodecs = array_fill_keys(explode(',',$this->line_defaults['allow']),true);
+ $systemCodecs = array_fill_keys(explode(';',$this->line_defaults['allow']),true);
$siteAudioCodecs = array_intersect_key($systemCodecs, $this->freepbx->Codecs->getAudio());
$siteVideoCodecs = array_intersect_key($systemCodecs, $this->freepbx->Codecs->getVideo());
@@ -249,7 +256,7 @@ class Sccp extends \FreePBX\modules\Core\Driver {
}
} else {
// have allowed codecs for this line
- foreach (explode(',',$deviceInfo['allow']) as $lineCodec) {
+ foreach (explode(';',$deviceInfo['allow']) as $lineCodec) {
$activeCodecs[] = "devinfo_codec_{$lineCodec}";
}
}
@@ -264,7 +271,7 @@ class Sccp extends \FreePBX\modules\Core\Driver {
}
$tmparr['disallow'] = array('prompttext' => _('Disallowed Codecs'),
- 'value' => $this->line_defaults[(string)$child->name],
+ 'value' => $this->line_defaults['disallow'],
'tt' => 'Codecs that are disallowed. Default and recommended value is all',
'level' => 1,
'section' => $section_с,
diff --git a/sccpManClasses/amInterfaceClasses/Event.class.php b/sccpManClasses/amInterfaceClasses/Event.class.php
index a08c50f..dea0c25 100644
--- a/sccpManClasses/amInterfaceClasses/Event.class.php
+++ b/sccpManClasses/amInterfaceClasses/Event.class.php
@@ -101,7 +101,7 @@ class SCCPShowDevice_Event extends Event
public function getCapabilities()
{
$ret = array();
- $codecs = explode(", ", substr($this->getKey('Capabilities'), 1, -1));
+ $codecs = explode(';', substr($this->getKey('Capabilities'), 1, -1));
foreach ($codecs as $codec) {
$codec_parts = explode(" ", $codec);
$ret[] = array("name" => $codec_parts[0], "value" => substr($codec_parts[1], 1, -1));
@@ -112,7 +112,7 @@ class SCCPShowDevice_Event extends Event
public function getCodecsPreference()
{
$ret = array();
- $codecs = explode(", ", substr($this->getKey('CodecsPreference'), 1, -1));
+ $codecs = explode(';', substr($this->getKey('CodecsPreference'), 1, -1));
foreach ($codecs as $codec) {
$codec_parts = explode(" ", $codec);
$ret[] = array("name" => $codec_parts[0], "value" => substr($codec_parts[1], 1, -1));
diff --git a/sccpManTraits/ajaxHelper.php b/sccpManTraits/ajaxHelper.php
index cc46ec1..da51c2c 100644
--- a/sccpManTraits/ajaxHelper.php
+++ b/sccpManTraits/ajaxHelper.php
@@ -405,7 +405,7 @@ trait ajaxHelper {
// if uncheck all codecs, audiocodecs key is missing so nothing changes in db.
// Unsetting all codecs will now return to chan-sccp defaults.
if (!isset($request['audiocodecs'])) {
- $request['audiocodecs'] = array_fill_keys(explode(',',$this->sccpvalues['allow']['systemdefault']),true);
+ $request['audiocodecs'] = array_fill_keys(explode(';',$this->sccpvalues['allow']['systemdefault']),true);
}
foreach ($request as $key => $value) {
// Originally saved all to sccpvalues. Now will save to db defaults if appropriate
@@ -506,7 +506,7 @@ trait ajaxHelper {
$save_codec[$i] = $keycodeс;
$i++;
};
- $tmpv = implode(",", $save_codec);
+ $tmpv = implode(";", $save_codec);
if (!($this->sccpvalues['allow']['data'] == $tmpv)) {
$save_settings['allow'] = array(
'keyword' => 'allow',
diff --git a/views/server.codec.php b/views/server.codec.php
index 2e2a8a9..89b2a86 100644
--- a/views/server.codec.php
+++ b/views/server.codec.php
@@ -44,7 +44,7 @@ if (empty($sccp_disallow_def)) {