LicenseSpring C++ SDK  7.31.0
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 
11 #ifdef __cplusplus
12 extern "C" {
13 #endif
14 
15  LS_API typedef struct LSCustomField
16  {
17  char* name;
18  char* value;
19  int nameSize;
20  int valueSize;
21  } LSCustomField;
22 
23  // handler can be casted to LSLicenseHandler*
24  LS_API typedef void ( *LSWatchdogCallback )( const char* message, enum LSErrorCode errorCode, void* handler );
25 
26  LS_API typedef struct LSLicenseHandler
27  {
28  // current configuration if present gets deleted automatically
29  void ( *reconfigure )( struct LSLicenseHandler* self, struct LSConfiguration* config );
30 
31  // ---------- Requests to the LicenseSpring backend ----------
32  bool ( *isOnline )( struct LSLicenseHandler* self );
33  LSProductDetails* ( *getProductDetails )( struct LSLicenseHandler* self, bool includeLatestVersion );
34  struct LSLicenseID ( *getTrialLicense )( struct LSLicenseHandler* self, LSCustomer* user, const char* licensePolicy );
35  struct LSLicenseID ( *getTrialLicenseByEmail )( struct LSLicenseHandler* self, const char* userEmail );
36  const char* ( *getSSOUrl )( struct LSLicenseHandler* self, const char* accountCode, bool useAuthCode );
37  void ( *activateLicense )( struct LSLicenseHandler* self, struct LSLicenseID licenseID );
38  void ( *activateLicenseViaSSO )( struct LSLicenseHandler* self, const char* authData,
39  const char* accountCode, bool useAuthCode );
40  bool ( *deactivateLicense )( struct LSLicenseHandler* self );
41  bool ( *changePassword )( struct LSLicenseHandler* self, const char* password, const char* newPassword, const char* user );
42  LSInstallationFile* ( *checkLicense )( struct LSLicenseHandler* self );
43  LSInstallationFile* ( *checkLicenseEx )(struct LSLicenseHandler* self, const char* channel, const char* env, bool includeExpiredFeatures );
44  int ( *getVersionList )( struct LSLicenseHandler* self, struct LSLicenseID licenseID, int* lengths, char** versionList );
45  int ( *getVersionListEx )( struct LSLicenseHandler* self, struct LSLicenseID licenseID,
46  const char* channel, const char* env, int* lengths, char** versionList );
47  LSInstallationFile* ( *getInstallFile )( struct LSLicenseHandler* self, struct LSLicenseID licenseID, const char* version );
48  LSInstallationFile* ( *getInstallFileEx )( struct LSLicenseHandler* self, struct LSLicenseID licenseID,
49  const char* version, const char* channel, const char* env );
50  void ( *sendDeviceData )( struct LSLicenseHandler* self, struct LSCustomField* data, int dataSize );
51  void ( *syncConsumption )( struct LSLicenseHandler* self );
52  void ( *syncFeatureConsumption )( struct LSLicenseHandler* self, const char* featureCode );
53  void ( *registerFloatingLicense )( struct LSLicenseHandler* self );
54  void ( *borrowFloatingLicense )( struct LSLicenseHandler* self, uint32_t hours, uint32_t days );
55  void ( *borrowFloatingLicenseTill )(struct LSLicenseHandler* self, const char* borrowEndDateTime );
56  void ( *releaseFloatingLicense )( struct LSLicenseHandler* self );
57  void ( *registerFloatingFeature )( struct LSLicenseHandler* self, const char* featureCode, bool addToWatchdog );
58  void ( *releaseFloatingFeature )( struct LSLicenseHandler* self, const char* featureCode );
59  const char* ( *getAirGapActivationCode )( struct LSLicenseHandler* self, const char* initializationCode, const char* licenseKey );
60  const char* ( *getAirGapDeactivationCode )( struct LSLicenseHandler* self, const char* initializationCode );
61  // ------------------------------------------------------------
62 
63  // -------- Local license management and helper methods -------
64  bool ( *isInitialized )( struct LSLicenseHandler* self );
65  bool ( *isLicenseExists )( struct LSLicenseHandler* self );
66  void ( *updateConsumption )( struct LSLicenseHandler* self, int value, bool saveLicense );
67  void ( *updateFeatureConsumption )( struct LSLicenseHandler* self, const char* featureCode, int value, bool saveLicense );
68  void ( *checkLicenseLocal )( struct LSLicenseHandler* self );
69  void ( *clearLocalStorage )( struct LSLicenseHandler* self );
70  void ( *setupLicenseWatchdog )( struct LSLicenseHandler* self, LSWatchdogCallback callback, unsigned long timeout );
71  void ( *resumeLicenseWatchdog )( struct LSLicenseHandler* self );
72  void ( *stopLicenseWatchdog )( struct LSLicenseHandler* self );
73  void ( *setupFeatureWatchdog )( struct LSLicenseHandler* self, LSWatchdogCallback callback, unsigned long timeout );
74  void ( *resumeFeaturewatchdog )( struct LSLicenseHandler* self );
75  void ( *stopFeatureWatchdog )( struct LSLicenseHandler* self );
76  void ( *relinkLicense )( struct LSLicenseHandler* self, enum DeviceIDAlgorithm deviceIdAlgorithm, const char* userPassword );
77  // ------------------------------------------------------------
78 
79  // ---------------- Offline license management ----------------
80  const wchar_t* ( *createOfflineActivationFile )( struct LSLicenseHandler* self, struct LSLicenseID licenseID, const wchar_t* activationRequestFile );
81  void ( *activateLicenseOffline )( struct LSLicenseHandler* self, const wchar_t* activationResponseFile );
82  const wchar_t* ( *deactivateLicenseOffline )( struct LSLicenseHandler* self, const wchar_t* deactivationRequestFile );
83  bool ( *updateOffline )( struct LSLicenseHandler* self, const wchar_t* path, bool resetConsumption );
84  void ( *activateAirGapLicense )( struct LSLicenseHandler* self, const char* confirmationCode, const wchar_t* policyFile, const char* licenseKey, unsigned long policyId );
85  void ( *deactivateAirGapLicense )( struct LSLicenseHandler* self, const char* confirmationCode );
86  // ------------------------------------------------------------
87 
88  // ----------------------- License data -----------------------
89  bool ( *isLicenseValid )( struct LSLicenseHandler* self );
90  bool ( *isLicenseTrial )( struct LSLicenseHandler* self );
91  bool ( *isLicenseAirGapped )( struct LSLicenseHandler* self );
92  bool ( *isLicenseActive )( struct LSLicenseHandler* self );
93  bool ( *isLicenseEnabled )( struct LSLicenseHandler* self );
94  bool ( *isLicenseExpired )( struct LSLicenseHandler* self );
95  bool ( *isLicenseMaintenanceExpired )( struct LSLicenseHandler* self );
96  bool ( *isLicenseOfflineActivated )( struct LSLicenseHandler* self );
97  bool ( *isLicenseFloating )( struct LSLicenseHandler* self );
98  bool ( *isLicenseBorrowed )( struct LSLicenseHandler* self );
99  bool ( *isLicenseVMAllowed )( struct LSLicenseHandler* self );
101  bool ( *isGracePeriodStarted )( struct LSLicenseHandler* self );
102  int ( *gracePeriodHoursRemaining )( struct LSLicenseHandler* self );
103  struct tm ( *gracePeriodEndDateTime )( struct LSLicenseHandler* self );
104  struct tm ( *gracePeriodEndDateTimeUTC )( struct LSLicenseHandler* self );
105  int ( *getLicenseTrialPeriod )( struct LSLicenseHandler* self );
106 
107  struct LSLicenseID ( *getLicenseID )( struct LSLicenseHandler* self );
108  const char* ( *getLicenseKey )( struct LSLicenseHandler* self );
109  const char* ( *getLicenseUser )( struct LSLicenseHandler* self );
110  const char* ( *getLicenseStatusStr )( struct LSLicenseHandler* self );
111  const char* ( *getLicenseStartDate )( struct LSLicenseHandler* self );
112  const char* ( *getLicenseMetadata )( struct LSLicenseHandler* self );
114  struct tm( *getLicenseExpiryDate )( struct LSLicenseHandler* self );
115  struct tm( *getLicenseExpiryDateUtc )( struct LSLicenseHandler* self );
116  struct tm( *getLicenseMaintenancePeriod )( struct LSLicenseHandler* self );
117  struct tm( *getLicenseMaintenancePeriodUtc )( struct LSLicenseHandler* self );
118  struct tm( *getLicenseLastCheckDate )( struct LSLicenseHandler* self );
119  struct tm( *getLicenseLastCheckDateUtc )( struct LSLicenseHandler* self );
120  struct tm( *getLicenseFloatingEndDateTime )( struct LSLicenseHandler* self );
121  struct tm( *getLicenseFloatingEndDateTimeUtc )( struct LSLicenseHandler* self );
122  int ( *getDaysRemaining )( struct LSLicenseHandler* self );
125  LSCustomer* ( *getLicenseOwner )( struct LSLicenseHandler* self );
126  bool ( *hasLicenseFeatures )( struct LSLicenseHandler* self );
127  struct LSLicenseFeature* ( *getLicenseFeature )( struct LSLicenseHandler* self, const char* featureCode );
128  int ( *getLicenseFeatures )( struct LSLicenseHandler* self, struct LSLicenseFeature* features );
129  bool ( *hasLicenseCustomFields )( struct LSLicenseHandler* self );
130  int ( *getLicenseCustomFields )( struct LSLicenseHandler* self, struct LSCustomField* fields );
131  unsigned long ( *getLicenseTimesActivated )( struct LSLicenseHandler* self );
132  unsigned long ( *getLicenseMaxActivations )( struct LSLicenseHandler* self );
133  unsigned long ( *getLicenseTransferCount )( struct LSLicenseHandler* self );
134  int ( *getLicenseTransferLimit )( struct LSLicenseHandler* self );
135  bool ( *isDeviceTransferAllowed )( struct LSLicenseHandler* self );
136  bool ( *isDeviceTransferLimited )( struct LSLicenseHandler* self );
137  unsigned long ( *getLicensePolicyId )( struct LSLicenseHandler* self );
138 
139  // Meaningful only for Subscription license
140  unsigned long ( *getSubscriptionLicenseGracePeriod )( struct LSLicenseHandler* self );
141  struct tm ( *validityWithGracePeriod )( struct LSLicenseHandler* self );
142  struct tm ( *validityWithGracePeriodUtc )( struct LSLicenseHandler* self );
143 
144  // Meaningful only for Consumption license
145  int ( *getLicenseTotalConsumption )( struct LSLicenseHandler* self );
146  int ( *getLicenseMaxConsumption )( struct LSLicenseHandler* self );
147  bool ( *isLicenseOveragesAllowed )( struct LSLicenseHandler* self );
149  int ( *getLicenseMaxOverages )( struct LSLicenseHandler* self );
152 
153  // Meaningful only for Floating license
154  unsigned long ( *getLicenseFloatingTimeout )( struct LSLicenseHandler* self );
155  unsigned long ( *getLicenseFloatingInUseCount )( struct LSLicenseHandler* self );
156  unsigned long ( *getLicenseMaxFloatingUsers )( struct LSLicenseHandler* self );
157  unsigned long (* getMaxBorrowTime )( struct LSLicenseHandler* self );
158  // ------------------------------------------------------------
159 
160  // ---------------------- Error handling ----------------------
161  bool ( *wasError )( struct LSLicenseHandler* self );
162  enum LSErrorCode( *getLastError )( struct LSLicenseHandler* self );
163  const char* ( *getLastErrorMsg )( struct LSLicenseHandler* self );
164  bool ( *isInitializationError )( struct LSLicenseHandler* self );
165  bool ( *isInternalServerError )( struct LSLicenseHandler* self );
166  bool ( *isNetworkTimeoutError )( struct LSLicenseHandler* self );
167  bool ( *isNoInternetError )( struct LSLicenseHandler* self );
168  bool ( *isActivationFailed )( struct LSLicenseHandler* self );
169  bool ( *isLicenseExpiredError )( struct LSLicenseHandler* self );
170  bool ( *isLicenseNotFoundError )( struct LSLicenseHandler* self );
171  bool ( *isLicenseStateError )( struct LSLicenseHandler* self );
172  bool ( *isHardwareIDError )( struct LSLicenseHandler* self );
173  bool ( *isGeneralError )( struct LSLicenseHandler* self );
174  bool ( *isLicenseFeatureError )( struct LSLicenseHandler* self );
175  bool ( *canIgnoreError )( struct LSLicenseHandler* self ); // No Internet, network timeout and server errors can be ignored
176  // ------------------------------------------------------------
177 
178  void* inner;
179 
181 
183 
184  // LicenseHandler takes ownership of Configuration, so do not free it
186 
187  // This function will also free current configuration, you do not need to explicitly call FreeLSConfiguration
188  LS_API void FreeLSLicenseHandler( struct LSLicenseHandler* handler );
189 
190 #ifdef __cplusplus
191 } // end extern "C"
192 #endif
193 
194 #endif // LS_C_LICENSE_HANDLER_H
LSConsumptionPeriod
Consumption period.
Definition: PODTypes.h:37
void(* updateConsumption)(struct LSLicenseHandler *self, int value, bool saveLicense)
LS_API struct LSCustomField LSCustomField
unsigned long(* getLicenseFloatingInUseCount)(struct LSLicenseHandler *self)
LSErrorCode
LicenseSpring Error codes enum.
Definition: PODTypes.h:47
void(* clearLocalStorage)(struct LSLicenseHandler *self)
bool(* isResetLicenseConsumptionEnabled)(struct LSLicenseHandler *self)
LSLicenseType
License type.
Definition: PODTypes.h:27
void(* setupLicenseWatchdog)(struct LSLicenseHandler *self, LSWatchdogCallback callback, unsigned long timeout)
int(* getLicenseMaxConsumption)(struct LSLicenseHandler *self)
bool(* isNetworkTimeoutError)(struct LSLicenseHandler *self)
void(* registerFloatingLicense)(struct LSLicenseHandler *self)
bool(* isLicenseOfflineActivated)(struct LSLicenseHandler *self)
bool(* isGeneralError)(struct LSLicenseHandler *self)
int(* getLicenseFeatures)(struct LSLicenseHandler *self, struct LSLicenseFeature *features)
void(* resumeLicenseWatchdog)(struct LSLicenseHandler *self)
enum LSErrorCode(* getLastError)(struct LSLicenseHandler *self)
bool(* changePassword)(struct LSLicenseHandler *self, const char *password, const char *newPassword, const char *user)
bool(* isLicenseValid)(struct LSLicenseHandler *self)
unsigned long(* getLicenseMaxActivations)(struct LSLicenseHandler *self)
unsigned long(* getLicenseTransferCount)(struct LSLicenseHandler *self)
void(* releaseFloatingLicense)(struct LSLicenseHandler *self)
bool(* canIgnoreError)(struct LSLicenseHandler *self)
int(* getDaysPassedSinceLastCheck)(struct LSLicenseHandler *self)
bool(* isLicenseStateError)(struct LSLicenseHandler *self)
bool(* isLicenseMaintenanceExpired)(struct LSLicenseHandler *self)
bool(* isInternalServerError)(struct LSLicenseHandler *self)
int(* getMaintenanceDaysRemaining)(struct LSLicenseHandler *self)
bool(* wasError)(struct LSLicenseHandler *self)
LS_API struct LSLicenseHandler * CreateLSLicenseHandler(struct LSConfiguration *config)
void(* relinkLicense)(struct LSLicenseHandler *self, enum DeviceIDAlgorithm deviceIdAlgorithm, const char *userPassword)
unsigned long(* getMaxBorrowTime)(struct LSLicenseHandler *self)
void(* borrowFloatingLicenseTill)(struct LSLicenseHandler *self, const char *borrowEndDateTime)
int(* getVersionList)(struct LSLicenseHandler *self, struct LSLicenseID licenseID, int *lengths, char **versionList)
bool(* isActivationFailed)(struct LSLicenseHandler *self)
void(* resumeFeaturewatchdog)(struct LSLicenseHandler *self)
void(* activateLicense)(struct LSLicenseHandler *self, struct LSLicenseID licenseID)
int(* getLicenseCustomFields)(struct LSLicenseHandler *self, struct LSCustomField *fields)
unsigned long(* getLicenseFloatingTimeout)(struct LSLicenseHandler *self)
void(* releaseFloatingFeature)(struct LSLicenseHandler *self, const char *featureCode)
bool(* isLicenseAirGapped)(struct LSLicenseHandler *self)
bool(* isLicenseVMAllowed)(struct LSLicenseHandler *self)
bool(* isLicenseNotFoundError)(struct LSLicenseHandler *self)
bool(* deactivateLicense)(struct LSLicenseHandler *self)
bool(* isHardwareIDError)(struct LSLicenseHandler *self)
void(* checkLicenseLocal)(struct LSLicenseHandler *self)
void(* stopFeatureWatchdog)(struct LSLicenseHandler *self)
bool(* hasLicenseFeatures)(struct LSLicenseHandler *self)
bool(* isLicenseExists)(struct LSLicenseHandler *self)
int(* getLicenseMaxOverages)(struct LSLicenseHandler *self)
bool(* isSubscriptionGracePeriodStarted)(struct LSLicenseHandler *self)
bool(* isDeviceTransferAllowed)(struct LSLicenseHandler *self)
DeviceIDAlgorithm
Type of Device ID algorithm used by the SDK.
Definition: PODTypes.h:103
LS_API typedef void(* LSWatchdogCallback)(const char *message, enum LSErrorCode errorCode, void *handler)
void(* activateAirGapLicense)(struct LSLicenseHandler *self, const char *confirmationCode, const wchar_t *policyFile, const char *licenseKey, unsigned long policyId)
bool(* isNoInternetError)(struct LSLicenseHandler *self)
bool(* isLicenseTrial)(struct LSLicenseHandler *self)
bool(* isLicenseOveragesAllowed)(struct LSLicenseHandler *self)
unsigned long(* getLicenseMaxFloatingUsers)(struct LSLicenseHandler *self)
bool(* isLicenseBorrowed)(struct LSLicenseHandler *self)
enum LSLicenseType(* getLicenseType)(struct LSLicenseHandler *self)
bool(* isInitialized)(struct LSLicenseHandler *self)
bool(* isGracePeriodStarted)(struct LSLicenseHandler *self)
void(* syncFeatureConsumption)(struct LSLicenseHandler *self, const char *featureCode)
unsigned long(* getSubscriptionLicenseGracePeriod)(struct LSLicenseHandler *self)
bool(* isLicenseExpired)(struct LSLicenseHandler *self)
enum LSConsumptionPeriod(* getLicenseConsumptionPeriod)(struct LSLicenseHandler *self)
bool(* isLicenseActive)(struct LSLicenseHandler *self)
void(* updateFeatureConsumption)(struct LSLicenseHandler *self, const char *featureCode, int value, bool saveLicense)
void(* stopLicenseWatchdog)(struct LSLicenseHandler *self)
LS_API struct LSLicenseHandler LSLicenseHandler
void(* setupFeatureWatchdog)(struct LSLicenseHandler *self, LSWatchdogCallback callback, unsigned long timeout)
void(* deactivateAirGapLicense)(struct LSLicenseHandler *self, const char *confirmationCode)
bool(* isLicenseEnabled)(struct LSLicenseHandler *self)
bool(* isLicenseFloating)(struct LSLicenseHandler *self)
#define LS_API
Macros that expands to dllexport, dllimport or nothing on non Windows platforms or in case of static ...
Definition: APIDef.h:22
int(* gracePeriodHoursRemaining)(struct LSLicenseHandler *self)
bool(* isLicenseExpiredError)(struct LSLicenseHandler *self)
const char * user
Definition: LicenseID.h:13
unsigned long(* getLicensePolicyId)(struct LSLicenseHandler *self)
LS_API void FreeLSLicenseHandler(struct LSLicenseHandler *handler)
bool(* isInitializationError)(struct LSLicenseHandler *self)
bool(* isLicenseUnlimitedConsumptionAllowed)(struct LSLicenseHandler *self)
bool(* isDeviceTransferLimited)(struct LSLicenseHandler *self)
bool(* updateOffline)(struct LSLicenseHandler *self, const wchar_t *path, bool resetConsumption)
void(* registerFloatingFeature)(struct LSLicenseHandler *self, const char *featureCode, bool addToWatchdog)
bool(* isLicenseFeatureError)(struct LSLicenseHandler *self)
int(* getLicenseTransferLimit)(struct LSLicenseHandler *self)
void(* borrowFloatingLicense)(struct LSLicenseHandler *self, uint32_t hours, uint32_t days)
struct LSConfiguration * currentConfig