aboutsummaryrefslogtreecommitdiffstats
path: root/src/daemon_clients/squishhandler.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/daemon_clients/squishhandler.h')
-rw-r--r--src/daemon_clients/squishhandler.h90
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