function _snomAppCmp($appv1, $appv2) { //$appv1 = _snom_normalize_version( $appv1 ); # we trust it has been normalized! $appv2 = _snom_normalize_version($appv2); return strCmp($appv1, $appv2); }
} $ua = trim(@$_SERVER['HTTP_USER_AGENT']); if (preg_match('/^Mozilla\\/\\d\\.\\d\\s*\\(compatible;\\s*/i', $ua, $m)) { $ua = rTrim(subStr($ua, strLen($m[0])), ' )'); } gs_log(GS_LOG_DEBUG, "Snom model {$ua} found."); if (preg_match('/snom-m3/i', $ua, $m)) { $phone_model = 'm3'; } else { $phone_model = 'unknown'; } $phone_type = 'snom-' . $phone_model; # e.g. "snom-m3" # to be used when auto-adding the phone $fw_vers = preg_match('/snom-m3-SIP\\/(\\d+\\.\\d+)/', $ua, $m) ? $m[1] : '0.0'; $fw_vers_nrml = _snom_normalize_version($fw_vers); gs_log(GS_LOG_DEBUG, "Snom phone \"{$mac}\" asks for settings (UA: ...\"{$ua}\") - model: {$phone_model}"); require_once GS_DIR . 'inc/db_connect.php'; require_once GS_DIR . 'inc/nobody-extensions.php'; include_once GS_DIR . 'inc/gs-fns/gs_callforward_get.php'; include_once GS_DIR . 'inc/gs-fns/gs_prov_params_get.php'; include_once GS_DIR . 'inc/gs-fns/gs_user_prov_params_get.php'; $settings = array(); function setting($name, $idx, $val, $attrs = null, $writeable = false) { global $settings; if ($idx === null || $idx === false || $idx < 0) { $settings[$name] = array('v' => $val, 'w' => $writeable, 'a' => $attrs); } else { if (!array_key_exists($name, $settings) || !is_array($settings[$name])) { $settings[$name] = array('_is_array' => true);
$c = new CronRule(); $ok = $c->set_Rule($job['minute'] . ' ' . $job['hour'] . ' ' . $job['day'] . ' ' . $job['month'] . ' ' . $job['dow']); if (!$ok) { gs_log(GS_LOG_WARNING, "Phone {$mac}: Job " . $job['id'] . " has a bad cron rule (" . $c->errMsg . "). Deleting ..."); $db->execute('DELETE FROM `prov_jobs` WHERE `id`=' . (int) $job['id'] . ' AND `running`=0'); unset($c); continue; } if (!$c->validate_time()) { gs_log(GS_LOG_DEBUG, "Phone {$mac}: Job " . $job['id'] . ": Rule does not match"); unset($c); continue; } unset($c); gs_log(GS_LOG_DEBUG, "Phone {$mac}: Job " . $job['id'] . ": Rule match"); $fw_new_vers = _snom_normalize_version($job['data']); if (subStr($fw_new_vers, 0, 2) == '00') { gs_log(GS_LOG_NOTICE, "Phone {$mac}: Bad new fw version {$fw_new_vers}"); $db->execute('DELETE FROM `prov_jobs` WHERE `id`=' . (int) $job['id'] . ' AND `running`=0'); continue; } $firmware_name = 'm9-' . $fw_new_vers . '.bin'; if (!file_exists($firmware_path . $firmware_name) || !is_readable($firmware_path . $firmware_name)) { gs_log(GS_LOG_NOTICE, "Phone {$mac}: " . $firmware_path . $firmware_name . " not exits or not readable"); $db->execute('DELETE FROM `prov_jobs` WHERE `id`=' . (int) $job['id'] . ' AND `running`=0'); continue; } if ($fw_new_vers == $fw_vers_nrml) { gs_log(GS_LOG_NOTICE, "Phone {$mac}: FW {$fw_vers_nrml} == {$fw_new_vers}"); $db->execute('DELETE FROM `prov_jobs` WHERE `id`=' . (int) $job['id'] . ' AND `running`=0'); continue;