#ifndef ISMAS_CLIENT_H_INCLUDED #define ISMAS_CLIENT_H_INCLUDED #include #include #include struct PSAInstalled { struct VersionInfo { QString created; QString reason; QString lastCommit; } versionInfo; struct Tariff { // VersionInfo versionInfo; QString name; QString version; QString project; int zone; int size; QString blob; QString lastCommit; QString info; QString loadTime; } tariff; struct HardWare { QString linuxVersion; QString cpuSerial; } hw; struct Opkg { // VersionInfo versionInfo; int size; QString blob; QString lastCommit; QString loadTime; } opkg; struct DC { // VersionInfo versionInfo; QString versionHW; QString versionSW; QString gitBlob; QString gitLastCommit; int size; } dc; struct SoftWare { QString apismVersion; QString atbQTVersion; QString atbUpdateToolVersion; } sw; struct PluginVersion { QString deviceController; QString ingenicoISelfCC; QString mobilisisCalculatePrice; QString mobilisisCalculatePriceConfigUi; QString prmCalculatePrice; QString prmCalculatePriceConfigUi; QString tcpZVT; } pluginVersion; struct DC2C { // VersionInfo versionInfo; QString name; QString blob; int size; }; DC2C cash; DC2C conf; DC2C device; DC2C print[32]; QString ptuPackageVersion; explicit PSAInstalled() { tariff.name = "N/A"; tariff.version = "N/A"; tariff.project = "N/A"; tariff.zone = -1; tariff.size = -1; tariff.blob = "N/A"; tariff.info = "N/A"; tariff.loadTime = "N/A"; hw.linuxVersion = "N/A"; hw.cpuSerial = "N/A"; opkg.size = -1; opkg.blob = "N/A"; opkg.lastCommit = "N/A"; opkg.loadTime = "N/A"; dc.versionHW = "N/A"; dc.versionSW = "N/A"; dc.gitBlob = "N/A"; dc.gitLastCommit = "N/A"; dc.size = -1; sw.apismVersion = "N/A"; sw.atbQTVersion = "N/A"; sw.atbUpdateToolVersion = "N/A"; pluginVersion.deviceController = "N/A"; pluginVersion.ingenicoISelfCC = "N/A"; pluginVersion.mobilisisCalculatePrice = "N/A"; pluginVersion.mobilisisCalculatePriceConfigUi = "N/A"; pluginVersion.prmCalculatePrice = "N/A"; pluginVersion.prmCalculatePriceConfigUi = "N/A"; pluginVersion.tcpZVT = "N/A"; cash.name = "N/A"; cash.blob = "N/A"; cash.size = -1; conf.name = "N/A"; conf.blob = "N/A"; conf.size = -1; device.size = -1; device.blob = "N/A"; device.size = -1; for (int i=0; i < 32; ++i) { print[i].size = -1; print[i].blob = "N/A"; print[i].size = -1; } } }; class IsmasClient : public QObject { Q_OBJECT int m_progressInPercent; public: explicit IsmasClient() : m_progressInPercent(1) {} enum APISM { DB_PORT = 7777, DIRECT_PORT = 7778 }; enum RESULT_CODE { SUCCESS=0, // if between 00:00 - 04:00 Wait-button state not WAIT, then we assume // that's an automatic nightly (not-necessary) update NO_UPDATE_NECESSARY=1, // if APISM reports the ISMAS is not available (15x, 6s delay each) ISMAS_NO_CONNECTION_ERROR=2, // if not within 00:00-04:00 and WAIT-button was not in state WAIT ISMAS_TRIGGER_ERROR=3, // cloning git repo. not possible GIT_CLONE_ERROR=4, // pulling from remote git server not possible GIT_PULL_ERROR=5, // fetching from remote git server not possible GIT_FETCH_ERROR=6, // merging fetched data not possible GIT_MERGE_ERROR=7, // check sanity of local customer-repository failed GIT_CHECK_REPOSITORY_ERROR=8, // switch/checkout of branch (i.e. zone) on error GIT_SWITCH_BRANCH_ERROR=9, // fetch/pull of new branch failed. the new branch was not available // when installing via SD-card followed by intial clone during the // update process. GIT_FETCH_NEW_BRANCH_ERROR=10, // error computing git-blob hash-value GIT_HASH_ERROR=11, // update for general json files failed. JSON_FILES_UPDATE_ERROR=12, // error downloading config-json-files to device controller JSON_FILES_DOWNLOAD_ERROR=13, // error downloading device-controller DC_DOWNLOAD_ERROR=14, // error rsyncing json/ini-files to local filesystem RSYN_ERROR=15, // HASH_VALUE_ERROR=14, // HW_COMPATIBILITY_ERROR=15, OPKG_COMMANDS_ERROR=16, // CLEANUP_ERROR=18, UPDATE_IN_ERROR_STATE=99 }; enum REASON { TIME_TRIGGERED = 0, SERVICE, DEV_TEST, ENTRIES }; static char const *reason[REASON::ENTRIES]; static std::optional sendRequestReceiveResponse(int port, QString const &request); static QString getReasonForLastSendVersion(); int getProgressInPercent() const {return m_progressInPercent; } void setProgressInPercent(int procent) { m_progressInPercent = procent; } QString updateNewsToIsmas(char const *event, int percent, int resultCode, char const *step, char const *step_result, char const *version); QString updateOfPSAStarted(QString const &version = QString()); // start of update process QString cloneAndCheckoutCustomerRepository(QString const &info, QString const &version = QString()); // clone and checkout customer repository QString checkoutBranch(QString const &info, QString const &version = QString()); // checkout branch QString errorBackendNotConnected(QString const &info, QString const &version = QString()); // checkout branch QString errorGitClone(QString const &info, QString const &version = QString()); QString backendConnected(QString const &info, QString const &version = QString()); QString updateTriggerSet(QString const &info, QString const &version = QString()); QString errorUpdateTrigger(QString const &info, QString const &version = QString()); QString gitFetch(QString const &info, QString const &version = QString()); QString execOpkgCommand(QString const &info, QString const &version = QString()); QString rsyncFile(QString const &info, QString const &version = QString()); QString errorGitFetch(int resultCode, QString const &info, QString const &version = QString()); QString updateOfPSAActivated(QString const &version = QString()); // and update accepted QString updateOfPSASucceeded(QString const &version = QString()); // update process succeeded QString updateOfPSAContinues(QString currentStage, QString currentStageInfo, QString const &version = QString()); QString updateOfPSAFailed(int resultCode, QString step, QString reason, QString const &version = QString()); QString sanityCheckFailed(int resultCode, QString reason, QString const &version = QString()); QString jsonParseFailed(int resultCode, QString reason, QString const &version = QString()); std::optional finalResult(int resultCode, QString reason, QString const &version = QString()); // legacy QString updateOfPSASendVersion(PSAInstalled const &psa); #if 0 enum class UPDATE_COMPONENT { TARIFF, SOFTWARE_ATBQT, SOFTWARE_APISM, SOFTWARE_ATB_UPDATE_TOOL, CONFIG_PTU5_CPU_SERIAL, CONFIG_DEVICE_CONTROLLER, CONFIG_PRINTER, CONFIG_BNA, PLUGIN_ATB_DEVICE_CONTROLLER, PLUGIN_INGENICO_CC, PLUGIN_MOBILISIS_CALC_PRICE, PLUGIN_MOBILISIS_CALC_PRICE_UI, PLUGIN_PRM_CALC_PRICE, PLUGIN_PRM_CALC_PRICE_UI, PLUGIN_TCP_ZVT_CC, OPKG_COMMANDS, HARDWARE_DEVICES, OS, DC2C_CASH_JSON, DC2C_CONF_JSON, DC2C_DEVICE_JSON, DC2C_PRINT01_JSON, DC2C_PRINT02_JSON, DC2C_PRINT03_JSON, DC2C_PRINT04_JSON, DC2C_PRINT05_JSON, DC2C_PRINT06_JSON, DC2C_PRINT07_JSON, DC2C_PRINT08_JSON, DC2C_PRINT09_JSON, DC2C_PRINT10_JSON, DC2C_PRINT11_JSON, DC2C_PRINT12_JSON, DC2C_PRINT13_JSON, DC2C_PRINT14_JSON, DC2C_PRINT15_JSON, DC2C_PRINT16_JSON, DC2C_PRINT17_JSON, DC2C_PRINT18_JSON, DC2C_PRINT19_JSON, DC2C_PRINT20_JSON, DC2C_PRINT21_JSON, DC2C_PRINT22_JSON, DC2C_PRINT23_JSON, DC2C_PRINT24_JSON, DC2C_PRINT25_JSON, DC2C_PRINT26_JSON, DC2C_PRINT27_JSON, DC2C_PRINT28_JSON, DC2C_PRINT29_JSON, DC2C_PRINT30_JSON, DC2C_PRINT31_JSON, DC2C_PRINT32_JSON, }; QString sendLastVersion(UPDATE_COMPONENT comp, PSAInstalled const &psa); #endif private: static void printDebugMessage(int port, QString const &clientIP, int clientPort, QString const &message); static void printInfoMessage(int port, QString const &clientIP, int clientPort, QString const &message); static void printErrorMessage(int port, QString const &clientIP, int clientPort, QString const &message); }; #endif // ISMAS_CLIENT_H_INCLUDED