blob: c9446d196b853981ce2243a0965707642ae924fd (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
/* 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 CliToolHandler : public virtual ClientHandler {
public:
CliToolHandler(const RequestInfo &request, const LicdSetup &settings)
: ClientHandler(request, settings) {}
bool isLicenseRequestDue() override { return true; }
bool isCachedReservationValid(std::string &reply) override { return false; }
private:
void buildRequestJson() override
{
if (m_request.reqType == RequestType::server_version) {
m_request.payload = "";
return;
}
// Permanent operation:
std::stringstream pay;
pay << "{";
pay<< "\"license_number\":" << "\"" << m_request.licenseId << "\",";
pay << "\"user_id\":" << "\"" << m_request.userId << "\",";
pay << "\"operation\":" << "\"" << m_request.operation << "\"";
pay << "}";
m_request.payload = pay.str();
}
int parseAndSaveResponse(std::string &response) override
{
JsonHandler json(response);
std::stringstream ss;
if (m_request.reqType == RequestType::long_term_request) {
// long-term request: Have "message" field from response JSON directly as a reply to the user
response = json.get("message");
if (json.get("status") != "true" ) {
if (response == "License fully reserved") {
response = replyString[e_license_pool_full];
} else if (response.find("cannot be early released") != std::string::npos) {
response = replyString[e_no_permanent_to_release];
} else {
response = replyString[e_license_rejected];
}
// Do not touch the license file, just return
return 1;
}
} else if (m_request.reqType == RequestType::server_version) {
response = "Qt License Server v";
response += json.get("version");
return 0; // Do not touch cached license files pls.
}
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();
// Add timestamp into license JSON
json.add("last_timestamp", utils::getTimestampNow());
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;
}
};
|