From 14a4e74db2352146b7972d1d7ec62d2342b40f78 Mon Sep 17 00:00:00 2001 From: DonLakeFlyer Date: Thu, 3 Dec 2020 11:36:23 -0800 Subject: [PATCH] Switch COMPONENT_INFORMATION compression to lzma --- qgroundcontrol.pro | 7 +- qgroundcontrol.qrc | 2 + src/Compression/QGCLZMA.cc | 97 +++++++++++++++++++++++++++ src/Compression/QGCLZMA.h | 21 ++++++ src/Compression/QGCZlib.cc | 85 +++++++++++++++++++++++ src/Compression/QGCZlib.h | 21 ++++++ src/QGCZlib.cc | 85 ----------------------- src/QGCZlib.h | 21 ------ src/Vehicle/ComponentInformationManager.cc | 6 +- src/comm/MockLink.Parameter.MetaData.json.xz | Bin 0 -> 50692 bytes src/comm/MockLink.Version.MetaData.json.xz | Bin 0 -> 192 bytes src/comm/MockLink.cc | 4 +- src/comm/MockLinkFTP.cc | 6 +- 13 files changed, 240 insertions(+), 115 deletions(-) create mode 100644 src/Compression/QGCLZMA.cc create mode 100644 src/Compression/QGCLZMA.h create mode 100644 src/Compression/QGCZlib.cc create mode 100644 src/Compression/QGCZlib.h delete mode 100644 src/QGCZlib.cc delete mode 100644 src/QGCZlib.h create mode 100644 src/comm/MockLink.Parameter.MetaData.json.xz create mode 100644 src/comm/MockLink.Version.MetaData.json.xz diff --git a/qgroundcontrol.pro b/qgroundcontrol.pro index d0e29de..9f6f937 100644 --- a/qgroundcontrol.pro +++ b/qgroundcontrol.pro @@ -383,6 +383,7 @@ INCLUDEPATH += \ src/api \ src/AnalyzeView \ src/Camera \ + src/Compression \ src/AutoPilotPlugins \ src/FlightDisplay \ src/FlightMap \ @@ -568,6 +569,8 @@ HEADERS += \ src/Camera/QGCCameraIO.h \ src/Camera/QGCCameraManager.h \ src/CmdLineOptParser.h \ + src/Compression/QGCLZMA.h \ + src/Compression/QGCZlib.h \ src/FirmwarePlugin/PX4/px4_custom_mode.h \ src/FollowMe/FollowMe.h \ src/Joystick/Joystick.h \ @@ -639,7 +642,6 @@ HEADERS += \ src/QGCQGeoCoordinate.h \ src/QGCTemporaryFile.h \ src/QGCToolbox.h \ - src/QGCZlib.h \ src/QmlControls/AppMessages.h \ src/QmlControls/EditPositionDialogController.h \ src/QmlControls/FlightPathSegment.h \ @@ -801,6 +803,8 @@ SOURCES += \ src/Camera/QGCCameraIO.cc \ src/Camera/QGCCameraManager.cc \ src/CmdLineOptParser.cc \ + src/Compression/QGCLZMA.cc \ + src/Compression/QGCZlib.cc \ src/FollowMe/FollowMe.cc \ src/Joystick/Joystick.cc \ src/Joystick/JoystickManager.cc \ @@ -868,7 +872,6 @@ SOURCES += \ src/QGCQGeoCoordinate.cc \ src/QGCTemporaryFile.cc \ src/QGCToolbox.cc \ - src/QGCZlib.cc \ src/QmlControls/AppMessages.cc \ src/QmlControls/EditPositionDialogController.cc \ src/QmlControls/FlightPathSegment.cc \ diff --git a/qgroundcontrol.qrc b/qgroundcontrol.qrc index 224442b..b163ae2 100644 --- a/qgroundcontrol.qrc +++ b/qgroundcontrol.qrc @@ -337,6 +337,8 @@ src/comm/PX4MockLink.params src/comm/MockLink.Version.MetaData.json src/comm/MockLink.Version.MetaData.json.gz + src/comm/MockLink.Version.MetaData.json.xz + src/comm/MockLink.Parameter.MetaData.json.xz src/comm/MockLink.Parameter.MetaData.json diff --git a/src/Compression/QGCLZMA.cc b/src/Compression/QGCLZMA.cc new file mode 100644 index 0000000..ee42155 --- /dev/null +++ b/src/Compression/QGCLZMA.cc @@ -0,0 +1,97 @@ +/**************************************************************************** + * + * (c) 2009-2020 QGROUNDCONTROL PROJECT + * + * QGroundControl is licensed according to the terms in the file + * COPYING.md in the root of the source code directory. + * + ****************************************************************************/ + +#include "QGCLZMA.h" + +#include +#include +#include + +#include "lzma.h" + +bool QGCLZMA::inflateLZMAFile(const QString& lzmaFilename, const QString& decompressedFilename) +{ + bool success = true; + const int cBuffer = 1024 * 5; + unsigned char inputBuffer[cBuffer]; + unsigned char outputBuffer[cBuffer]; + lzma_stream lzmaStrm = LZMA_STREAM_INIT; + + QFile inputFile(lzmaFilename); + if (!inputFile.open(QIODevice::ReadOnly)) { + qWarning() << "QGCLZMA::inflateLZMAFile: open input file failed" << lzmaFilename << inputFile.errorString(); + return false; + } + + QFile outputFile(decompressedFilename); + if (!outputFile.open(QIODevice::WriteOnly | QIODevice::Truncate)) { + qWarning() << "QGCLZMA::inflateLZMAFile: open input file failed" << outputFile.fileName() << outputFile.errorString(); + return false; + } + + // UINT64_MAX - used as much memory as needed to decode + int lzmaRetCode = lzma_alone_decoder(&lzmaStrm, UINT64_MAX); + if (lzmaRetCode != LZMA_OK) { + qWarning() << "QGCLZMA::inflateLZMAFile: lzma_alone_decoder failed:" << lzmaRetCode; + return false; + } + + // When LZMA_CONCATENATED flag was used when initializing the decoder, + // we need to tell lzma_code() when there will be no more input. + // This is done by setting action to LZMA_FINISH instead of LZMA_RUN + // in the same way as it is done when encoding. + // + // When LZMA_CONCATENATED isn't used, there is no need to use + // LZMA_FINISH to tell when all the input has been read, but it + // is still OK to use it if you want. When LZMA_CONCATENATED isn't + // used, the decoder will stop after the first .xz stream. In that + // case some unused data may be left in lzmaStrm.next_in. + lzma_action action = LZMA_RUN; + + lzmaStrm.next_in = nullptr; + lzmaStrm.avail_in = 0; + lzmaStrm.next_out = nullptr; + lzmaStrm.avail_out = cBuffer; + + do { + lzmaStrm.avail_in = static_cast(inputFile.read((char*)inputBuffer, cBuffer)); + if (lzmaStrm.avail_in == 0) { + break; + } + lzmaStrm.next_in = inputBuffer; + + do { + lzmaStrm.avail_out = cBuffer; + lzmaStrm.next_out = outputBuffer; + + lzmaRetCode = lzma_code(&lzmaStrm, action); + if (lzmaRetCode != LZMA_OK && lzmaRetCode != LZMA_STREAM_END) { + qWarning() << "QGCLZMA::inflateLZMAFile: inflate failed:" << lzmaRetCode; + goto Error; + } + + unsigned cBytesInflated = cBuffer - lzmaStrm.avail_out; + qint64 cBytesWritten = outputFile.write((char*)outputBuffer, static_cast(cBytesInflated)); + if (cBytesWritten != cBytesInflated) { + qWarning() << "QGCLZMA::inflateLZMAFile: output file write failed:" << outputFile.fileName() << outputFile.errorString(); + goto Error; + + } + } while (lzmaStrm.avail_out == 0); + } while (lzmaRetCode != LZMA_STREAM_END); + +Out: + lzma_end(&lzmaStrm); + + return success; + +Error: + success = false; + goto Out; +} diff --git a/src/Compression/QGCLZMA.h b/src/Compression/QGCLZMA.h new file mode 100644 index 0000000..807b880 --- /dev/null +++ b/src/Compression/QGCLZMA.h @@ -0,0 +1,21 @@ +/**************************************************************************** + * + * (c) 2009-2020 QGROUNDCONTROL PROJECT + * + * QGroundControl is licensed according to the terms in the file + * COPYING.md in the root of the source code directory. + * + ****************************************************************************/ + +#pragma once + +#include + +class QGCLZMA +{ +public: + /// Decompresses the specified file to the specified directory + /// @param lzmaFilename Fully qualified path to lzma file + /// @param decompressedFilename Fully qualified path to for file to decompress to + static bool inflateLZMAFile(const QString& lzmaFilename, const QString& decompressedFilename); +}; diff --git a/src/Compression/QGCZlib.cc b/src/Compression/QGCZlib.cc new file mode 100644 index 0000000..77ad1e9 --- /dev/null +++ b/src/Compression/QGCZlib.cc @@ -0,0 +1,85 @@ +/**************************************************************************** + * + * (c) 2009-2020 QGROUNDCONTROL PROJECT + * + * QGroundControl is licensed according to the terms in the file + * COPYING.md in the root of the source code directory. + * + ****************************************************************************/ + +#include "QGCZlib.h" + +#include +#include +#include + +#include "zlib.h" + +bool QGCZlib::inflateGzipFile(const QString& gzippedFileName, const QString& decompressedFilename) +{ + bool success = true; + int ret; + const int cBuffer = 1024 * 5; + unsigned char inputBuffer[cBuffer]; + unsigned char outputBuffer[cBuffer]; + z_stream strm; + + QFile inputFile(gzippedFileName); + if (!inputFile.open(QIODevice::ReadOnly)) { + qWarning() << "QGCZlib::inflateGzipFile: open input file failed" << gzippedFileName << inputFile.errorString(); + return false; + } + + QFile outputFile(decompressedFilename); + if (!outputFile.open(QIODevice::WriteOnly | QIODevice::Truncate)) { + qWarning() << "QGCZlib::inflateGzipFile: open input file failed" << outputFile.fileName() << outputFile.errorString(); + return false; + } + + strm.zalloc = nullptr; + strm.zfree = nullptr; + strm.opaque = nullptr; + strm.avail_in = 0; + strm.next_in = nullptr; + + ret = inflateInit2(&strm, 16+MAX_WBITS); + if (ret != Z_OK) { + qWarning() << "QGCZlib::inflateGzipFile: inflateInit2 failed:" << ret; + goto Error; + } + + do { + strm.avail_in = static_cast(inputFile.read((char*)inputBuffer, cBuffer)); + if (strm.avail_in == 0) { + break; + } + strm.next_in = inputBuffer; + + do { + strm.avail_out = cBuffer; + strm.next_out = outputBuffer; + + ret = inflate(&strm, Z_NO_FLUSH); + if (ret != Z_OK && ret != Z_STREAM_END) { + qWarning() << "QGCZlib::inflateGzipFile: inflate failed:" << ret; + goto Error; + } + + unsigned cBytesInflated = cBuffer - strm.avail_out; + qint64 cBytesWritten = outputFile.write((char*)outputBuffer, static_cast(cBytesInflated)); + if (cBytesWritten != cBytesInflated) { + qWarning() << "QGCZlib::inflateGzipFile: output file write failed:" << outputFile.fileName() << outputFile.errorString(); + goto Error; + + } + } while (strm.avail_out == 0); + } while (ret != Z_STREAM_END); + +Out: + inflateEnd(&strm); + return success; + +Error: + success = false; + goto Out; +} diff --git a/src/Compression/QGCZlib.h b/src/Compression/QGCZlib.h new file mode 100644 index 0000000..e5fce05 --- /dev/null +++ b/src/Compression/QGCZlib.h @@ -0,0 +1,21 @@ +/**************************************************************************** + * + * (c) 2009-2020 QGROUNDCONTROL PROJECT + * + * QGroundControl is licensed according to the terms in the file + * COPYING.md in the root of the source code directory. + * + ****************************************************************************/ + +#pragma once + +#include + +class QGCZlib +{ +public: + /// Decompresses the specified file to the specified directory + /// @param gzipFilename Fully qualified path to gzip file + /// @param decompressedFilename Fully qualified path to for file to decompress to + static bool inflateGzipFile(const QString& gzippedFileName, const QString& decompressedFilename); +}; diff --git a/src/QGCZlib.cc b/src/QGCZlib.cc deleted file mode 100644 index 77ad1e9..0000000 --- a/src/QGCZlib.cc +++ /dev/null @@ -1,85 +0,0 @@ -/**************************************************************************** - * - * (c) 2009-2020 QGROUNDCONTROL PROJECT - * - * QGroundControl is licensed according to the terms in the file - * COPYING.md in the root of the source code directory. - * - ****************************************************************************/ - -#include "QGCZlib.h" - -#include -#include -#include - -#include "zlib.h" - -bool QGCZlib::inflateGzipFile(const QString& gzippedFileName, const QString& decompressedFilename) -{ - bool success = true; - int ret; - const int cBuffer = 1024 * 5; - unsigned char inputBuffer[cBuffer]; - unsigned char outputBuffer[cBuffer]; - z_stream strm; - - QFile inputFile(gzippedFileName); - if (!inputFile.open(QIODevice::ReadOnly)) { - qWarning() << "QGCZlib::inflateGzipFile: open input file failed" << gzippedFileName << inputFile.errorString(); - return false; - } - - QFile outputFile(decompressedFilename); - if (!outputFile.open(QIODevice::WriteOnly | QIODevice::Truncate)) { - qWarning() << "QGCZlib::inflateGzipFile: open input file failed" << outputFile.fileName() << outputFile.errorString(); - return false; - } - - strm.zalloc = nullptr; - strm.zfree = nullptr; - strm.opaque = nullptr; - strm.avail_in = 0; - strm.next_in = nullptr; - - ret = inflateInit2(&strm, 16+MAX_WBITS); - if (ret != Z_OK) { - qWarning() << "QGCZlib::inflateGzipFile: inflateInit2 failed:" << ret; - goto Error; - } - - do { - strm.avail_in = static_cast(inputFile.read((char*)inputBuffer, cBuffer)); - if (strm.avail_in == 0) { - break; - } - strm.next_in = inputBuffer; - - do { - strm.avail_out = cBuffer; - strm.next_out = outputBuffer; - - ret = inflate(&strm, Z_NO_FLUSH); - if (ret != Z_OK && ret != Z_STREAM_END) { - qWarning() << "QGCZlib::inflateGzipFile: inflate failed:" << ret; - goto Error; - } - - unsigned cBytesInflated = cBuffer - strm.avail_out; - qint64 cBytesWritten = outputFile.write((char*)outputBuffer, static_cast(cBytesInflated)); - if (cBytesWritten != cBytesInflated) { - qWarning() << "QGCZlib::inflateGzipFile: output file write failed:" << outputFile.fileName() << outputFile.errorString(); - goto Error; - - } - } while (strm.avail_out == 0); - } while (ret != Z_STREAM_END); - -Out: - inflateEnd(&strm); - return success; - -Error: - success = false; - goto Out; -} diff --git a/src/QGCZlib.h b/src/QGCZlib.h deleted file mode 100644 index e5fce05..0000000 --- a/src/QGCZlib.h +++ /dev/null @@ -1,21 +0,0 @@ -/**************************************************************************** - * - * (c) 2009-2020 QGROUNDCONTROL PROJECT - * - * QGroundControl is licensed according to the terms in the file - * COPYING.md in the root of the source code directory. - * - ****************************************************************************/ - -#pragma once - -#include - -class QGCZlib -{ -public: - /// Decompresses the specified file to the specified directory - /// @param gzipFilename Fully qualified path to gzip file - /// @param decompressedFilename Fully qualified path to for file to decompress to - static bool inflateGzipFile(const QString& gzippedFileName, const QString& decompressedFilename); -}; diff --git a/src/Vehicle/ComponentInformationManager.cc b/src/Vehicle/ComponentInformationManager.cc index a644657..d1ca7bd 100644 --- a/src/Vehicle/ComponentInformationManager.cc +++ b/src/Vehicle/ComponentInformationManager.cc @@ -10,7 +10,7 @@ #include "ComponentInformationManager.h" #include "Vehicle.h" #include "FTPManager.h" -#include "QGCZlib.h" +#include "QGCLZMA.h" #include "JsonHelper.h" #include "CompInfoVersion.h" #include "CompInfoParam.h" @@ -210,9 +210,9 @@ QString RequestMetaDataTypeStateMachine::_downloadCompleteJsonWorker(const QStri { QString outputFileName = fileName; - if (fileName.endsWith(".gz", Qt::CaseInsensitive)) { + if (fileName.endsWith(".lzma", Qt::CaseInsensitive)) { outputFileName = (QDir(QStandardPaths::writableLocation(QStandardPaths::TempLocation)).absoluteFilePath(inflatedFileName)); - if (QGCZlib::inflateGzipFile(fileName, outputFileName)) { + if (QGCLZMA::inflateLZMAFile(fileName, outputFileName)) { QFile(fileName).remove(); } else { qCWarning(ComponentInformationManagerLog) << "Inflate of compressed json failed" << inflatedFileName; diff --git a/src/comm/MockLink.Parameter.MetaData.json.xz b/src/comm/MockLink.Parameter.MetaData.json.xz new file mode 100644 index 0000000000000000000000000000000000000000..da9f6b5642fd90bab110ec824e8cfcfb21e9d080 GIT binary patch literal 50692 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%0D!(ybm}W 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