From 0daea08ff18d35fca56997b02a2f9595b2d932d9 Mon Sep 17 00:00:00 2001
From: thl-cmk <thl-cmk@outlook.com>
Date: Mon, 17 Apr 2023 11:04:14 +0200
Subject: [PATCH] fixed device update check use version instead of image

---
 pnp/CHANGELOG           | 1 +
 pnp/images.toml         | 7 ++++++-
 pnp/open-pnp.py         | 6 +++---
 pnp/open_pnp_classes.py | 2 ++
 4 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/pnp/CHANGELOG b/pnp/CHANGELOG
index 4ddcdfb..a21e9b4 100644
--- a/pnp/CHANGELOG
+++ b/pnp/CHANGELOG
@@ -25,3 +25,4 @@
             changed to load settings from config file (open-pnp.toml by default) in the SETTINGS.__init__
             don't exit if cfg_file not found (not strictly needed, can all set viy cli), just print a warning
             fixed: --config-file option (was cfg_file instead of config-file)
+2023-04-17: fixed device update check use version instead of image
diff --git a/pnp/images.toml b/pnp/images.toml
index abdec39..6d9633e 100644
--- a/pnp/images.toml
+++ b/pnp/images.toml
@@ -57,4 +57,9 @@ version = "15.2(7)E7"
 md5 = "11f9750e99be42792eddef7268e58e54"
 size = 16260096 
 models = ["WS-C2960L-24TS-LL"]
-           
\ No newline at end of file
+
+["c2960s-universalk9-mz.152-2.E9.bin"]
+version = "15.2(2)E9"
+md5 = "EA604D030B378B6C5C3DDA3D501AC2F5"
+size = 16800768 
+models = ["WS-C2960S-F48TS-L", "WS-C2960S-F24TS-L"]
\ No newline at end of file
diff --git a/pnp/open-pnp.py b/pnp/open-pnp.py
index 6e62274..2e3b7d6 100755
--- a/pnp/open-pnp.py
+++ b/pnp/open-pnp.py
@@ -41,7 +41,7 @@
 # 2023-32-07: changed '_' in cli options to '-' -> better readable/more bash like
 # 2023-03-13: added '--no-default-cfg' option
 # 2023-04-11: added flask options to remove whitespaces by default, changed version format (major.minor.micro-date)
-
+# 2023-04-17: fixed device update check use version instead of image
 #
 # pip install flask xmltodict requests ifaddr tomli
 #
@@ -268,7 +268,7 @@ def update_device_info(data: Dict[str, Any]):
     udi = data['pnp']['@udi']
     device = devices[udi]
 
-    device.version = data['pnp']['response']['imageInfo']['versionString']
+    device.version = data['pnp']['response']['imageInfo']['versionString'].strip()
     device.image = data['pnp']['response']['imageInfo']['imageFile'].split(':')[1]
     device.refresh_data = False
     device.last_contact = strftime(SETTINGS.time_format)
@@ -284,7 +284,7 @@ def update_device_info(data: Dict[str, Any]):
 
 def check_update(udi: str):
     device = devices[udi]
-    if device.image == device.target_image.image:
+    if device.version == device.target_image.version:
         device.pnp_flow = PNPFLOW.UPDATE_DOWN
     else:
         device.pnp_flow = PNPFLOW.UPDATE_NEEDED
diff --git a/pnp/open_pnp_classes.py b/pnp/open_pnp_classes.py
index fd7f3d4..2688fef 100644
--- a/pnp/open_pnp_classes.py
+++ b/pnp/open_pnp_classes.py
@@ -35,6 +35,7 @@ class ErrorCodes:
         1816: 'Error verifying checksum for Image',
         1829: 'Image copy was unsuccessful',
         1803: 'Source file not found',
+        1817: 'Running Image checksum same as provided checksum. Upgrade not needed',
     }
 
     def __init__(self):
@@ -52,6 +53,7 @@ class ErrorCodes:
         self.PNP_ERROR_BAD_CHECKSUM = 1816
         self.PNP_ERROR_IMAGE_COPY_UNSUCCESSFUL = 1829
         self.PNP_ERROR_FILE_NOT_FOUND = 1803
+        self.PNP_ERROR_MD5_IDENTICAL = 1817
 
     def readable(self, error_code: int):
         return self.__readable.get(error_code, f'unknown: {error_code}')
-- 
GitLab