LicenseSpring C++ SDK
Easily add Software Licensing to your application
LicenseHandler.h
Go to the documentation of this file.
1 #ifndef LS_C_LICENSE_HANDLER_H
2 #define LS_C_LICENSE_HANDLER_H
3 
4 #include "Configuration.h"
5 #include "ProductDetails.h"
6 #include "Customer.h"
7 #include "InstallationFile.h"
8 #include "LicenseFeature.h"
9 #include "LicenseID.h"
10 #include <stdint.h>
11 
12 #ifdef __cplusplus
13 extern "C"
14 {
15 #endif
16 
17  LS_API typedef struct LSCustomField
18  {
19  char *name;
20  char *value;
21  int nameSize;
22  int valueSize;
23  } LSCustomField;
24 
25  // handler can be casted to LSLicenseHandler*
26  LS_API typedef void (*LSWatchdogCallback)(
27  const char *message, enum LSErrorCode errorCode, void *handler);
28 
29  LS_API typedef struct LSLicenseHandler
30  {
31  // current configuration if present gets deleted automatically
32  void (*reconfigure)(struct LSLicenseHandler *self, struct LSConfiguration *config);
33 
34  // ---------- Requests to the LicenseSpring backend ----------
35  bool (*isOnline)(struct LSLicenseHandler *self);
36  LSProductDetails *(*getProductDetailsWithCustomFieldsAndEnv)(struct LSLicenseHandler *self,
37  bool includeLatestVersion, bool includeCustomFields, const char *env);
38  LSProductDetails *(*getProductDetails)(
39  struct LSLicenseHandler *self, bool includeLatestVersion);
40  struct LSLicenseID (*getTrialLicense)(
41  struct LSLicenseHandler *self, LSCustomer *user, const char *licensePolicy);
42  struct LSLicenseID (*getTrialLicenseByEmail)(
43  struct LSLicenseHandler *self, const char *userEmail);
44  const char *(*getSSOUrl)(
45  struct LSLicenseHandler *self, const char *accountCode, bool useAuthCode);
46  void (*activateLicense)(struct LSLicenseHandler *self, struct LSLicenseID licenseID);
47  void (*activateLicenseViaSSO)(struct LSLicenseHandler *self, const char *authData,
48  const char *accountCode, bool useAuthCode);
49  bool (*deactivateLicense)(struct LSLicenseHandler *self);
50  bool (*changePassword)(struct LSLicenseHandler *self, const char *password,
51  const char *newPassword, const char *user);
52  LSInstallationFile *(*checkLicense)(struct LSLicenseHandler *self);
53  LSInstallationFile *(*checkLicenseEx)(struct LSLicenseHandler *self, const char *channel,
54  const char *env, bool includeExpiredFeatures);
55  int (*getVersionList)(struct LSLicenseHandler *self, struct LSLicenseID licenseID,
56  int *lengths, char **versionList);
57  int (*getVersionListEx)(struct LSLicenseHandler *self, struct LSLicenseID licenseID,
58  const char *channel, const char *env, int *lengths, char **versionList);
59  LSInstallationFile *(*getInstallFile)(
60  struct LSLicenseHandler *self, struct LSLicenseID licenseID, const char *version);
61  LSInstallationFile *(*getInstallFileEx)(struct LSLicenseHandler *self,
62  struct LSLicenseID licenseID, const char *version, const char *channel,
63  const char *env);
64  void (*sendDeviceData)(
65  struct LSLicenseHandler *self, struct LSCustomField *data, int dataSize);
66  void (*syncConsumption)(struct LSLicenseHandler *self);
67  void (*syncFeatureConsumption)(struct LSLicenseHandler *self, const char *featureCode);
69  void (*borrowFloatingLicense)(struct LSLicenseHandler *self, uint32_t hours, uint32_t days);
71  struct LSLicenseHandler *self, const char *borrowEndDateTime);
74  struct LSLicenseHandler *self, const char *featureCode, bool addToWatchdog);
75  void (*releaseFloatingFeature)(struct LSLicenseHandler *self, const char *featureCode);
76  const char *(*getAirGapActivationCode)(
77  struct LSLicenseHandler *self, const char *initializationCode, const char *licenseKey);
78  const char *(*getAirGapDeactivationCode)(
79  struct LSLicenseHandler *self, const char *initializationCode);
80  // ------------------------------------------------------------
81 
82  // -------- Local license management and helper methods -------
83  bool (*isInitialized)(struct LSLicenseHandler *self);
84  bool (*isLicenseExists)(struct LSLicenseHandler *self);
85  void (*updateConsumption)(struct LSLicenseHandler *self, int value, bool saveLicense);
87  struct LSLicenseHandler *self, const char *featureCode, int value, bool saveLicense);
88  void (*checkLicenseLocal)(struct LSLicenseHandler *self, bool verifySignature);
89  void (*clearLocalStorage)(struct LSLicenseHandler *self);
92  struct LSLicenseHandler *self, LSWatchdogCallback callback, unsigned long timeout);
93  void (*resumeLicenseWatchdog)(struct LSLicenseHandler *self);
94  void (*stopLicenseWatchdog)(struct LSLicenseHandler *self);
96  struct LSLicenseHandler *self, LSWatchdogCallback callback, unsigned long timeout);
97  void (*resumeFeaturewatchdog)(struct LSLicenseHandler *self);
98  void (*stopFeatureWatchdog)(struct LSLicenseHandler *self);
99  void (*relinkLicense)(struct LSLicenseHandler *self,
100  enum DeviceIDAlgorithm deviceIdAlgorithm, const char *userPassword);
101  const wchar_t *(*getDataLocation)(struct LSLicenseHandler *self);
102  void (*setDataLocation)(struct LSLicenseHandler *self, const wchar_t *path);
103  const wchar_t *(*getLicenseFileName)(struct LSLicenseHandler *self);
104  void (*setLicenseFileName)(struct LSLicenseHandler *self, const wchar_t *name);
105  // ------------------------------------------------------------
106 
107  // ---------------- Offline license management ----------------
108  const wchar_t *(*createOfflineActivationFile)(struct LSLicenseHandler *self,
109  struct LSLicenseID licenseID, const wchar_t *activationRequestFile);
110  void (*activateLicenseOffline)(
111  struct LSLicenseHandler *self, const wchar_t *activationResponseFile);
112  const wchar_t *(*deactivateLicenseOffline)(
113  struct LSLicenseHandler *self, const wchar_t *deactivationRequestFile);
114  bool (*updateOffline)(
115  struct LSLicenseHandler *self, const wchar_t *path, bool resetConsumption);
116  void (*activateAirGapLicense)(struct LSLicenseHandler *self, const char *confirmationCode,
117  const wchar_t *policyFile, const char *licenseKey, unsigned long policyId);
119  struct LSLicenseHandler *self, const char *confirmationCode);
120  // ------------------------------------------------------------
121 
122  // ----------------------- License data -----------------------
123  bool (*isLicenseValid)(struct LSLicenseHandler *self);
124  bool (*isLicenseTrial)(struct LSLicenseHandler *self);
125  bool (*isLicenseAirGapped)(struct LSLicenseHandler *self);
126  bool (*isLicenseActive)(struct LSLicenseHandler *self);
127  bool (*isLicenseEnabled)(struct LSLicenseHandler *self);
128  bool (*isLicenseExpired)(struct LSLicenseHandler *self);
131  bool (*isLicenseFloating)(struct LSLicenseHandler *self);
132  bool (*isLicenseBorrowed)(struct LSLicenseHandler *self);
133  bool (*isLicenseVMAllowed)(struct LSLicenseHandler *self);
135  bool (*isGracePeriodStarted)(struct LSLicenseHandler *self);
137  struct tm (*gracePeriodEndDateTime)(struct LSLicenseHandler *self);
138  struct tm (*gracePeriodEndDateTimeUTC)(struct LSLicenseHandler *self);
139  int (*getLicenseTrialPeriod)(struct LSLicenseHandler *self);
140 
141  struct LSLicenseID (*getLicenseID)(struct LSLicenseHandler *self);
142  const char *(*getLicenseKey)(struct LSLicenseHandler *self);
143  const char *(*getLicenseUser)(struct LSLicenseHandler *self);
144  uint64_t (*getLicenseServerId)(struct LSLicenseHandler *self);
145  const char *(*getLicenseStatusStr)(struct LSLicenseHandler *self);
146  const char *(*getLicenseStartDate)(struct LSLicenseHandler *self);
147  const char *(*getLicenseMetadata)(struct LSLicenseHandler *self);
148  const char *(*getOrderStoreId)(struct LSLicenseHandler *self);
150  struct tm (*getLicenseExpiryDate)(struct LSLicenseHandler *self);
151  struct tm (*getLicenseExpiryDateUtc)(struct LSLicenseHandler *self);
152  struct tm (*getLicenseMaintenancePeriod)(struct LSLicenseHandler *self);
153  struct tm (*getLicenseMaintenancePeriodUtc)(struct LSLicenseHandler *self);
154  struct tm (*getLicenseLastCheckDate)(struct LSLicenseHandler *self);
155  struct tm (*getLicenseLastCheckDateUtc)(struct LSLicenseHandler *self);
156  struct tm (*getLicenseFloatingEndDateTime)(struct LSLicenseHandler *self);
157  struct tm (*getLicenseFloatingEndDateTimeUtc)(struct LSLicenseHandler *self);
158  int (*getDaysRemaining)(struct LSLicenseHandler *self);
161  LSCustomer *(*getLicenseOwner)(struct LSLicenseHandler *self);
162  bool (*hasLicenseFeatures)(struct LSLicenseHandler *self);
163  struct LSLicenseFeature *(*getLicenseFeature)(
164  struct LSLicenseHandler *self, const char *featureCode);
165  int (*getLicenseFeatures)(struct LSLicenseHandler *self, struct LSLicenseFeature *features);
166  bool (*hasLicenseCustomFields)(struct LSLicenseHandler *self);
167  int (*getLicenseCustomFields)(struct LSLicenseHandler *self, struct LSCustomField *fields);
168  unsigned long (*getLicenseTimesActivated)(struct LSLicenseHandler *self);
169  unsigned long (*getLicenseMaxActivations)(struct LSLicenseHandler *self);
170  unsigned long (*getLicenseTransferCount)(struct LSLicenseHandler *self);
174  unsigned long (*getLicensePolicyId)(struct LSLicenseHandler *self);
175 
176  // Meaningful only for Subscription license
177  unsigned long (*getSubscriptionLicenseGracePeriod)(struct LSLicenseHandler *self);
178  struct tm (*validityWithGracePeriod)(struct LSLicenseHandler *self);
179  struct tm (*validityWithGracePeriodUtc)(struct LSLicenseHandler *self);
180 
181  // Meaningful only for Consumption license
182  int (*getLicenseTotalConsumption)(struct LSLicenseHandler *self);
190 
191  // Meaningful only for Floating license
192  unsigned long (*getLicenseFloatingTimeout)(struct LSLicenseHandler *self);
193  unsigned long (*getLicenseFloatingInUseCount)(struct LSLicenseHandler *self);
194  unsigned long (*getLicenseMaxFloatingUsers)(struct LSLicenseHandler *self);
195  unsigned long (*getMaxBorrowTime)(struct LSLicenseHandler *self);
196  // ------------------------------------------------------------
197 
198  // ---------------------- Error handling ----------------------
199  bool (*wasError)(struct LSLicenseHandler *self);
201  const char *(*getLastErrorMsg)(struct LSLicenseHandler *self);
205  bool (*isNoInternetError)(struct LSLicenseHandler *self);
206  bool (*isActivationFailed)(struct LSLicenseHandler *self);
209  bool (*isLicenseStateError)(struct LSLicenseHandler *self);
210  bool (*isHardwareIDError)(struct LSLicenseHandler *self);
211  bool (*isGeneralError)(struct LSLicenseHandler *self);
214  *self); // No Internet, network timeout and server errors can be ignored
215  // ------------------------------------------------------------
216 
217  void *inner;
218 
220 
222 
223  // LicenseHandler takes ownership of Configuration, so do not free it
225 
226  // This function will also free current configuration, you do not need to explicitly call
227  // FreeLSConfiguration
228  LS_API void FreeLSLicenseHandler(struct LSLicenseHandler *handler);
229 
230 #ifdef __cplusplus
231 } // end extern "C"
232 #endif
233 
234 #endif // LS_C_LICENSE_HANDLER_H
void(* registerFloatingFeature)(struct LSLicenseHandler *self, const char *featureCode, bool addToWatchdog)
int(* getDaysPassedSinceLastCheck)(struct LSLicenseHandler *self)
LS_API typedef void(* LSWatchdogCallback)(const char *message, enum LSErrorCode errorCode, void *handler)
LSConsumptionPeriod
Consumption period.
Definition: PODTypes.h:35
bool(* isLicenseNegativeConsumptionAllowed)(struct LSLicenseHandler *self)
LS_API struct LSCustomField LSCustomField
LSErrorCode
LicenseSpring Error codes enum.
Definition: PODTypes.h:45
bool(* isLicenseNotFoundError)(struct LSLicenseHandler *self)
int(* getLicenseMaxOverages)(struct LSLicenseHandler *self)
LSLicenseType
License type.
Definition: PODTypes.h:25
unsigned long(* getMaxBorrowTime)(struct LSLicenseHandler *self)
bool(* isLicenseActive)(struct LSLicenseHandler *self)
unsigned long(* getLicenseFloatingTimeout)(struct LSLicenseHandler *self)
bool(* isNoInternetError)(struct LSLicenseHandler *self)
void(* stopLicenseWatchdog)(struct LSLicenseHandler *self)
bool(* isLicenseFileCorrupted)(struct LSLicenseHandler *self)
bool(* isNetworkTimeoutError)(struct LSLicenseHandler *self)
int(* getLicenseFeatures)(struct LSLicenseHandler *self, struct LSLicenseFeature *features)
bool(* isResetLicenseConsumptionEnabled)(struct LSLicenseHandler *self)
uint64_t(* getLicenseServerId)(struct LSLicenseHandler *self)
void(* borrowFloatingLicense)(struct LSLicenseHandler *self, uint32_t hours, uint32_t days)
bool(* isGeneralError)(struct LSLicenseHandler *self)
bool(* isInitialized)(struct LSLicenseHandler *self)
bool(* changePassword)(struct LSLicenseHandler *self, const char *password, const char *newPassword, const char *user)
bool(* isActivationFailed)(struct LSLicenseHandler *self)
void(* updateFeatureConsumption)(struct LSLicenseHandler *self, const char *featureCode, int value, bool saveLicense)
unsigned long(* getLicenseMaxFloatingUsers)(struct LSLicenseHandler *self)
int(* getVersionList)(struct LSLicenseHandler *self, struct LSLicenseID licenseID, int *lengths, char **versionList)
bool(* isLicenseFloating)(struct LSLicenseHandler *self)
bool(* isLicenseExists)(struct LSLicenseHandler *self)
void(* relinkLicense)(struct LSLicenseHandler *self, enum DeviceIDAlgorithm deviceIdAlgorithm, const char *userPassword)
LS_API struct LSLicenseHandler * CreateLSLicenseHandler(struct LSConfiguration *config)
int(* getLicenseTransferLimit)(struct LSLicenseHandler *self)
bool(* isLicenseOveragesAllowed)(struct LSLicenseHandler *self)
bool(* deactivateLicense)(struct LSLicenseHandler *self)
void(* activateLicense)(struct LSLicenseHandler *self, struct LSLicenseID licenseID)
bool(* isLicenseEnabled)(struct LSLicenseHandler *self)
enum LSErrorCode(* getLastError)(struct LSLicenseHandler *self)
unsigned long(* getSubscriptionLicenseGracePeriod)(struct LSLicenseHandler *self)
void(* setLicenseFileName)(struct LSLicenseHandler *self, const wchar_t *name)
unsigned long(* getLicenseTransferCount)(struct LSLicenseHandler *self)
bool(* isLicenseUnlimitedConsumptionAllowed)(struct LSLicenseHandler *self)
void(* syncFeatureConsumption)(struct LSLicenseHandler *self, const char *featureCode)
bool(* isDeviceTransferLimited)(struct LSLicenseHandler *self)
bool(* isLicenseTrial)(struct LSLicenseHandler *self)
void(* resumeLicenseWatchdog)(struct LSLicenseHandler *self)
bool(* isLicenseStateError)(struct LSLicenseHandler *self)
bool(* isLicenseAirGapped)(struct LSLicenseHandler *self)
void(* releaseFloatingFeature)(struct LSLicenseHandler *self, const char *featureCode)
bool(* isLicenseFeatureError)(struct LSLicenseHandler *self)
void(* deactivateAirGapLicense)(struct LSLicenseHandler *self, const char *confirmationCode)
bool(* isLicenseExpiredError)(struct LSLicenseHandler *self)
bool(* isHardwareIDError)(struct LSLicenseHandler *self)
bool(* updateOffline)(struct LSLicenseHandler *self, const wchar_t *path, bool resetConsumption)
bool(* isLicenseMaintenanceExpired)(struct LSLicenseHandler *self)
DeviceIDAlgorithm
Type of Device ID algorithm used by the SDK.
Definition: PODTypes.h:114
bool(* isInitializationError)(struct LSLicenseHandler *self)
bool(* isInternalServerError)(struct LSLicenseHandler *self)
bool(* isDeviceTransferAllowed)(struct LSLicenseHandler *self)
bool(* isGracePeriodStarted)(struct LSLicenseHandler *self)
void(* setupLicenseWatchdog)(struct LSLicenseHandler *self, LSWatchdogCallback callback, unsigned long timeout)
void(* setDataLocation)(struct LSLicenseHandler *self, const wchar_t *path)
bool(* wasError)(struct LSLicenseHandler *self)
void(* setupFeatureWatchdog)(struct LSLicenseHandler *self, LSWatchdogCallback callback, unsigned long timeout)
enum LSLicenseType(* getLicenseType)(struct LSLicenseHandler *self)
bool(* isLicenseBorrowed)(struct LSLicenseHandler *self)
void(* releaseFloatingLicense)(struct LSLicenseHandler *self)
int(* getMaintenanceDaysRemaining)(struct LSLicenseHandler *self)
void(* stopFeatureWatchdog)(struct LSLicenseHandler *self)
bool(* hasLicenseFeatures)(struct LSLicenseHandler *self)
int(* gracePeriodHoursRemaining)(struct LSLicenseHandler *self)
void(* checkLicenseLocal)(struct LSLicenseHandler *self, bool verifySignature)
unsigned long(* getLicenseMaxActivations)(struct LSLicenseHandler *self)
LS_API struct LSLicenseHandler LSLicenseHandler
#define LS_API
Definition: APIDef.h:23
void(* borrowFloatingLicenseTill)(struct LSLicenseHandler *self, const char *borrowEndDateTime)
void(* resumeFeaturewatchdog)(struct LSLicenseHandler *self)
int(* getLicenseMaxConsumption)(struct LSLicenseHandler *self)
unsigned long(* getLicenseFloatingInUseCount)(struct LSLicenseHandler *self)
const char * user
Definition: LicenseID.h:15
unsigned long(* getLicensePolicyId)(struct LSLicenseHandler *self)
void(* clearLocalStorage)(struct LSLicenseHandler *self)
LS_API void FreeLSLicenseHandler(struct LSLicenseHandler *handler)
bool(* isLicenseVMAllowed)(struct LSLicenseHandler *self)
void(* registerFloatingLicense)(struct LSLicenseHandler *self)
enum LSConsumptionPeriod(* getLicenseConsumptionPeriod)(struct LSLicenseHandler *self)
bool(* isSubscriptionGracePeriodStarted)(struct LSLicenseHandler *self)
bool(* isLicenseOfflineActivated)(struct LSLicenseHandler *self)
void(* activateAirGapLicense)(struct LSLicenseHandler *self, const char *confirmationCode, const wchar_t *policyFile, const char *licenseKey, unsigned long policyId)
bool(* isLicenseValid)(struct LSLicenseHandler *self)
void(* updateConsumption)(struct LSLicenseHandler *self, int value, bool saveLicense)
bool(* isLicenseExpired)(struct LSLicenseHandler *self)
bool(* canIgnoreError)(struct LSLicenseHandler *self)
struct LSConfiguration * currentConfig
int(* getLicenseCustomFields)(struct LSLicenseHandler *self, struct LSCustomField *fields)