Author: mherger
Date: Mon Mar 12 10:30:27 2012
New Revision: 9645

URL: http://svn.slimdevices.com/jive?rev=9645&view=rev
Log:
Bug: 12878
Description: don't downgrade firmware within a range of known compatible 
versions

Modified:
    7.8/trunk/squeezeplay/src/squeezeplay/share/jive/slim/SlimServer.lua

Modified: 7.8/trunk/squeezeplay/src/squeezeplay/share/jive/slim/SlimServer.lua
URL: 
http://svn.slimdevices.com/jive/7.8/trunk/squeezeplay/src/squeezeplay/share/jive/slim/SlimServer.lua?rev=9645&r1=9644&r2=9645&view=diff
==============================================================================
--- 7.8/trunk/squeezeplay/src/squeezeplay/share/jive/slim/SlimServer.lua 
(original)
+++ 7.8/trunk/squeezeplay/src/squeezeplay/share/jive/slim/SlimServer.lua Mon 
Mar 12 10:30:27 2012
@@ -73,6 +73,11 @@
 
 -- minimum support server version, can be set per device
 local minimumVersion = "7.4"
+
+-- oldest firmware version which is supposed to be compatible with this 
firmware
+-- use this value to prevent downgrading firmwares unless really necessary
+-- XXXX - to be updated with real version/revision
+local MINIMUM_COMPATIBLE_FIRMWARE = "7.6 r0"
 
 -- list of servers index by id. this weak table is used to enforce
 -- object equality with the server name.
@@ -327,7 +332,30 @@
        local oldUpgradeForce = self.upgradeForce
 
        self.upgradeUrl = url
-       self.upgradeForce = (tonumber(chunk.data.firmwareUpgrade) == 1)
+       self.upgradeForce = false
+
+       if url then
+               local machine = System:getMachine()
+               
+               local versionNew, revisionNew = string.match(url, "\/" .. 
machine .. "_([^_]+)_r([^_]+)\.bin")
+               local versionOld, revisionOld = string.match(JIVE_VERSION, 
"(.+) r(.+)")
+               local versionOldest, revisionOldest = 
string.match(MINIMUM_COMPATIBLE_FIRMWARE, "(.+) r(.+)")
+               
+               if (not versionNew) or (not revisionNew) then
+                       log:info("missing firmware version/revision - ignoring")
+
+               elseif versionOld == versionNew and revisionOld == revisionNew 
then
+                       log:info("we're up to date - no firmware change")
+
+               elseif self:isMoreRecent(versionNew, versionOld) or 
self:isMoreRecent(revisionNew, revisionOld) then
+                       log:info("there's a new firmware available - update!")
+                       self.upgradeForce = true
+
+               elseif self:isMoreRecent(versionOldest, versionNew) or 
self:isMoreRecent(revisionOldest, revisionNew) then
+                       log:info("firmware offered is older than oldest known 
compatible - downgrade")
+                       self.upgradeForce = true
+               end
+       end
 
        log:info(self.name, " firmware=", self.upgradeUrl, " force=", 
self.upgradeForce)
 
@@ -1213,12 +1241,16 @@
        if not self.state.version then
                return nil
        end
-
-       local serVer = string.split("%.", self.state.version)
-       local minVer = string.split("%.", minimumVersion)
-
-       for i,v in ipairs(serVer) do
-               if minVer[i] and v < minVer[i] then
+       
+       return self:isMoreRecent(self.state.version, minimumVersion)
+end
+
+function isMoreRecent(self, new, old)
+       local newVer = string.split("%.", new)
+       local oldVer = string.split("%.", old)
+
+       for i,v in ipairs(newVer) do
+               if oldVer[i] and v < oldVer[i] then
                        return false
                end
        end

_______________________________________________
Jive-checkins mailing list
[email protected]
http://lists.slimdevices.com/mailman/listinfo/jive-checkins

Reply via email to