diff options
Diffstat (limited to 'src/daemon_clients/squishhandler.h')
-rw-r--r-- | src/daemon_clients/squishhandler.h | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/src/daemon_clients/squishhandler.h b/src/daemon_clients/squishhandler.h new file mode 100644 index 0000000..366c624 --- /dev/null +++ b/src/daemon_clients/squishhandler.h @@ -0,0 +1,90 @@ +/* Copyright (C) 2022 The Qt Company Ltd. + * + * SPDX-License-Identifier: GPL-3.0-only WITH Qt-GPL-exception-1.0 +*/ +#pragma once + +#include "clienthandler.h" + +class SquishHandler : public ClientHandler { + + public: + SquishHandler(const RequestInfo &request, const LicdSetup &settings) + : ClientHandler(request, settings) + { + m_updateInterval = utils::strToInt(m_settings.get("squish_report_interval")); + m_request.operation = OP_ADD_RESERVATION; + m_request.startTimestamp = utils::getTimestampNow(); + } + + bool isLicenseRequestDue() override { return true; } + bool isCachedReservationValid(std::string &reply) override { return true; } + + void buildRequestJson() override + { + std::stringstream pay; + pay << "{"; + pay<< "\"license_number\":" << "\"" << m_request.licenseId << "\","; + pay << "\"user_id\":" << "\"" << m_request.userId << "\","; + pay << "\"hw_id\":" << "\"" << m_settings.get("hw_id") << "\","; + pay << "\"operation\":" << "\"" << m_request.operation << "\","; + pay << "\"src\":" << "\"" << m_request.appName << "\","; + pay << "\"host_os\":" << "\"" << m_settings.get("host_os") << "\","; + pay << "\"src_version\":" << "\"" << m_request.appVersion << "\","; + pay << "\"email\":" << "\"" << m_request.email << "\""; + pay << "}"; + m_request.payload = pay.str(); + m_floatingLicense = true; + } + + int parseAndSaveResponse(std::string &response) override + { + JsonHandler json(response); + // response JSON is converted to a reply string to the client from now on + std::stringstream ss; + m_license.status = (json.get("status") == "true") ? true : false; + + + if (m_license.status) { + ss << replyString[e_license_granted]; + ss << " expiry_date=" << json.get("expiry_date"); + ss << " license_id=" << json.get("license_number"); + ss << " reservation_id=" << json.get("reservation_id"); + response = ss.str(); + } else { + if (json.get("message") == "License fully reserved") { + response = replyString[e_license_pool_full]; + } else { + response = replyString[e_license_rejected]; + } + // Do not save the response json, just return + return 1; + } + m_license.message = json.get("message"); + m_license.license_id = json.get("license_number"); + m_license.user_id = json.get("user_id"); + m_license.reservation_id = json.get("reservation_id"); + m_license.license_key = json.get("license_key"); + m_license.parent_reservation_id = json.get("parent_reservvation_id"); + m_license.operation = "add"; + // Add timestamp into license JSON + struct timeval tp; + gettimeofday(&tp, NULL); + uint64_t timeNow = tp.tv_sec; + + // Save the JSON, adding timestamp + json.add("last_timestamp", timeNow); + int result = utils::writeToFile(m_request.licenseFile, json.dump(4)); + if (result != 0) { + std::cout << "ERROR saving license file: '" << m_request.licenseFile << "': " << strerror(result) << std::endl; + } + return 0; + } + + void release() override + { + m_request.operation = OP_REMOVE_RESERVATION; + m_request.stopTimestamp = utils::getTimestampNow(); + buildRequestJson(); + } +};
\ No newline at end of file |