C++ SDK
Integrating software licensing into your C/C++ application is straightforward with the LicenseSpring SDK.
Simply import our SDK into your project, and you're ready to go.
If you don't find the binaries for your specific environment, don't worry!
Just submit a support ticket, and we'll be happy to compile them for you. Our dedicated support team is here to assist you every step of the way.
Deprecation warning
For any questions contact support or sales
- MacFuture releases of the C++ SDK will lose support for legacy OS versions >10.15. Specific cut off version will be published at a later date.
- LinuxCentos 7 will be removed in 7.33.0
Supported Operating systems
- Windows: Windows 7 and later, we provide SDK builds created with Visual Studio 2015, 2017, 2019 and 2022 (VC140, VC141, VC142, VC143)
- Mac: macOS 10.12 Sierra and later for the x86_64 version and macOS 11.0 Big Sur and later for the ARM version, SDK was built with clang 9.0
- Linux: At least Ubuntu 18.04 and 20.04 LTS are supported, SDK should work fine with any Linux distribution that can run GCC 7.5 with C++11/14. We provide SDK builds created with GCC 7.5 and 9.2.1
The x86_64 version of the MacOS SDK was built with macOS SDK 10.12.
The ARM version of the MacOS LicenseSpring SDK was built with macOS SDK 11.3 and it's compatible with macOS SDK 11.0 and above.
The MacUniversal build contains both the x86_64 and ARM binaries combined with lipo.
ARMhf stands for ARM hard float, hardware floating point support.
The build for Centos 7 required installation of a newer version of a compiler (GCC) than one supplied in default system repositories.
GCC 7 is used from the centos-release-scl repository instead of a default 4.8.5.
Installation of a cmake3 is also required instead of 2.8 found in system repositories. The "epel" repository was used to obtain it.
These updates are also required in order to build samples.
The build for Centos 7 is deprecated as of v7.33.0.
When using a static lib, the code should define LS_STATIC (in preprocessor definitions in VS for example - see sample project for static lib).
We provide 2 separate SDKs for Linux. LicenseSpringCppSDKvX.X.X_Linux_OldABI.zip has GLIBCXX_USE_CXX11_ABI compiler flag set to 0, and should be used to link against some older libraries.
- Fixed license object not updating after license relink in CppSample.
- Fixed License::validityWithGracePeriod and License::validityWithGracePeriodUtc adding extra hour in case of DST.
- Added more verbose error messages for license file writing.
- Added ExtendedOptions::enableLicenseCorruptionCheck, ExtendedOptions::isLicenseCorruptionCheckEnabled and Configuration::isLicenseCorruptionCheckEnabled and associated C interface functions, see SDK documentation for more details.
- Added BaseManager::isLicenseFileCorrupted and associated LicenseHandler and C interface functions.
- Fixed hardware ID validation on cloud provider algorithms.
- Added license signature validation to License::localCheck.
- Added curl connection timeout setter and getter to ExtendedOptions, Configuration, and corresponding C interfaces.
- Added new UserLicense and UserLicensesData classes to encapsulate information about multiple licenses of the same product assigned to a single user.
- Added LicenseManager::getUserLicenses and LicenseHandler::getUserLicenses to retrieve UserLicensesData objects from the license API.
- Added a new LicenseID::fromUser constructor that takes a server-side license ID parameter from UserLicensesData.
- Added License::serverId and LicenseHandler::getLicenseServerId.
- Updated the user-based C++ sample.
- Changed return values of LicenseHandler::licenseFileName and LicenseHandler::licenseFilePath to const std::wstring& for C interface compatibility.
- Deprecated the CentOS 7 SDK build.
- Fixed generating hardware ID on AWS instances.
- Improved memory handling of License API wrapper.
- Added air-gapped license pre-provisioning through online activation.
- Added getDataLocation, setDataLocation, getLicenseFileName, setLicenseFileName functions to the C LicenseHandler interface.
- Fixed offline license update throwing ProductMismatchException.
- Implemented ProxySettings::fetchProxySettings that tries to automatically fetch current user proxy settings
- Fixed certificate lookup on macOS.
- Fixed documentation for License::feature.
- Added License::trialPeriod member function, which returns the trial duration of the current license.
- Fixed DeviceIDAlgorithm::WinCSProductId failing on Windows startup.
- Added more robust check of tampered VM detection DLL.
- Froze the MSVC compiler version to 1936 (runtime library version 14.36.32532) in the v143 toolset Windows build.
- Added new hardware ID algorithm DeviceIDAlgorithm::AutoIdWinCloud that tries to compute CloudPlatformsId with WinCSProductId as the fallback.
- Fixed BaseManager::reconfigure crashing the SDK.
- Added License::transferLimit member function, which returns the limit of license transfers between devices.
- Added License::isDeviceTransferAllowed and License::isDeviceTransferLimited member functions.
- License::syncFeatureConsumption now correctly throws the NotEnoughConsumptionException exception.
- Added optional includeExpiredFeatures parameter to License::check.
- Updated CppSample and CSample to print device transfer info.
- Updated CppSample and CSample to get expired features.
- Fixed handling older non-floating features.
- Fixed getting product details in the C SDK sample.
- Added handler for license_user_activated_max_times error code, the SDK throws LicenseNoAvailableActivationsException in case of this error on license activation.
- Fixed floating in use count parsing for offline floating licenses.
- Added floating feature registration and releasing.
- Added floating feature watchdog.
- Added optional flag includeLatestVersion to LicenseManager::getProductDetails.
- Implemented ProductDetails::latestVersion() getter.
- Updated CppSample and CSample to handle floating features, floating feature watchdog and latest version.
- curl updated to v8.4.0
- Fixed issues in .xcodeproj files for C and Cpp SDK samples.
- Improved MinGW SDK build, added VM detection dll.
- Updated certificates bundle file.
- Updated static libraries for Windows MSVC.
- Fixed false positive malware detection in Virtual Machine detection module.
- Fixed false positives and improved detection of Hyper-V.
- Added CMake build for CppSample on Windows(MSVC).
- Added logging to air-gap activation.
- Implemented grace period feature.
- Added isGracePeriodStarted, gracePeriodEndDateTime, gracePeriodEndDateTimeUTC, gracePeriodHoursRemaining methods to License class.
- Added setGracePeriod, getGracePeriod methods to ExtendedOptions class.
- Added RequestDateInvalidException and eRequestDateHeaderInvalid error code.
- Renamed methods related to subscription grace period to License::isSubscriptionGracePeriodStarted, License::subscriptionGracePeriod.
- Fixed handling of absolute paths on MacOS and Linux.
- Fixed issues with false positive VM detection, improved logging for VM detection module.
- Fixed incorrect metadata deserialization issue.
- OpenSSL updated to v3.1.2.
- curl updated to v8.1.2.
- SSL certificate verification now enabled by default
- Moved verification of confirmation code to the activateAirGapLicense method
- Added AirGapActivationException, it occurs when confirmation code verification fails
- Added LicenseHandler::isLicenseAirGapped and License::isAirGapped methods
- Added LicenseHandler::getLicensePolicyId and License::policyId methods
- Added improvement: loading license if exist when changing license data location, see setDataLocation
- Added signature verification when handling license borrowing response
- Added missing options to Configuration and ExtendedOptions structs for C-interface
- Added to C-interface LSExtendedOptions setAlternateKey function that accepts C-string
- Added subset of embedded certificates, improved logic for SSL certificate verification and lookup
- Added support for Schannel TLS backend for curl on Windows
- Added support for Secure Transport TLS backend for curl on macOS
- Implemented feature of loading ca certificates from OS and ca bundle file
- Implemented caching of product details, added License::productDetails method
- Implemented air-gap license deactivation, added License::deactivateAirGap and License::getAirGapDeactivationCode methods
- Updated AirGapQtSample to handle air-gap deactivation
- Fixed air-gap trial license detection issue
- Fixed confirmation code verification issue for air-gap licenses
- Fixed signature verification issue when using older versions of libcurl
- Fixed signature verification issue for older API
- Fixed prepending slash path issue when setting license data location
- Fixed issues with Unicode symbols in license file path for macOS and Linux
- Improved exception handling
- Improved alternative device id creation on Linux
- Improved air-gap activation security
- Added metadata field for ProductDetails, Customer, License and LicenseFeature classes.
- Added logging and handling exceptions to license watchdog.
- Added WatchdogException, it occurs in case creating watchdog thread failed.
- Added ExtendedOptions::setAlternateKey method that accepts string.
- Added minor improvements and logging for offline activation.
- OpenSSL updated to v1.1.1.21(u)
- curl updated to v8.1.2
- Fixed issue of creating a log file when logging is disabled.
- Security patch, that address vulnerability of bypassing license signature verification.
- Updated SDK demo samples. Implemented better handling of floating licenses in WinSample, CSample and CppSample.
- Implemented unlimited consumption feature. Added License.isUnlimitedConsumptionAllowed , LicenseFeature.isUnlimitedConsumptionAllowed and LicenseHandler.isLicenseUnlimitedConsumptionAllowed methods.
- Fixed issue of saving local license after revoking floating license.
- Fixed issues with error handling for offline and air-gap activation.
- Fixed OS version detection issue for Windows 11.
- Improved security check for offline license activation and refresh, implemented offline signature verification.
- Improved error handling for offline license activation and refresh, the SDK will throw more specific exceptions in case of errors.
- OpenSSL updated to v1.1.1.20(t)
- curl updated to v8.0.1
- Updated JSON for Modern C++ to v3.11.2
- Fixed issue of json serialization when license data contains invalid UTF-8 bytes.
- Included cURL and OpenSSL header and lib files.
- Added README file with cURL and OpenSSL version information.
- Added SDK version to log file.
- Added new device id algorithms DeviceIDAlgorithm::Gen2 and DeviceIDAlgorithm::AutoIdGen2.
- Improved security for License::updateOffline method.
- Fixed several issues with offline activation.
- Fixed LicenseManager::relinkLicense method.
- Fixed issue of encrypting long strings.
- Added ApiKeyException and corresponding error codes eInvalidApiKey, eReadOnlyApiKey, eRevokedApiKey and eApiKeyProductNotAllowed.
- Added FloatingTimeoutExpiredException.
- Implemented License::maxBorrowTime method.
- Implemented grace period feature for Subscription licenses. See License::gracePeriod and License::validityWithGracePeriod.
- Implemented License::isGracePeriodStarted method.
- Fixed issue of auto-revoking floating license at app exit when using static LicenseHandlerobject.
- Fixed error handling for successful responses during license activation and online check.
- Fixed issue of missing mac SDK version information.
- Improved floating expiration logic and local license check.
- Removed License::signature, implemented faster loading and saving of local license.
- Implement support for duration fields in license policy file for Air-gap activation.
- Implemented a couple of alternative device id algorithms for Windows. See DeviceIDAlgorithm::WinCSProductId and WinCryptographyId.
- Implemented relinkLicensemethod.
- Added License::stopLicenseWatchdog method, same added for LicenseHandler and C-interface.
- Fixed issue with incorrect rpath for mac universal dynamic libs.
- Improved error handling in case license transfer is limited or not allowed.
- Improved security, implemented license signature v2 verification.
- Implemented setupLicenseWatchdog function for C-interface.
- Implemented SSO activation using auth code.
- For Windows builds VM detection code is moved to satellite DLL.
- Fixed issue of incorrect return value for LicenseHandler::getMaintenanceDaysRemaining method.
- Fixed several problems with Linux machine id in some of the distributions and Docker containers.
- Updated SSOSample and CSample.
- Updated documentation.
Note:
Starting from v7.18.0 the VM detection module for Windows has been moved to LSVMD.dll. This dll is present in the SDK zips. Customers need to distribute this dll with their applications only if they use the Virtual Machine Detection detection for Windows, it can be simply ignored otherwise and not distributred.
The LicenseSpring C++ SDK loads this dll at runtime when checking if current Windows is a Virtual Machine. There is no need to link against it when building your application. LSVMD.dll cannot be used outside of LicenseSpring and the SDK checks whether the dll is tampered before using functions from it.
- FloatingClient::borrow renamed to FloatingClient::borrowLicense.
- Implemented getting instance id for cloud platforms: AWS, Azure, and GCP. Added DeviceIDAlgorithm::CloudPlatformsId and DeviceIDAlgorithm::AutoId.
- Fixed issue of virtual methods in LicenseFeature class.
- Implemented error handling for 401, 403, 407 http errors. See AuthorizationException and eAuthorizationError error code.
- Added device variables to offline deactivation file.
- Implemented methods getAirGapActivationCode, verifyConfirmationCode and activateAirGapLicense in LicenseManager and LicenseHandler classes for activation of air gap licenses.
- Added DeviceIDAlgorithm enum and ExtendedOptions::setDeviceIdAlgorithm function. DeviceIDAlgorithm::Gen1 option can be useful for air gap activation.
- Added Configuration::isSSLCheckEnabled and ExtendedOptions::enableSSLCheck, see SDK documentation for more details.
- Added Source: sdk header.
- Added FloatingClient::borrow method.
- Added AirGapQtSample project.
- Improved SSOSample, added support for authorization with default browser.
- Implemented sending optional param sdk_lang.
- Implemented License::isBorrowed and LicenseHandler::isLicenseBorrowed methods.
- Fixed virtual destructors and header files for CryptoProvider and LicenseStorage.
- Fixed setting license file path and name through the LicenseHandler.
- Fixed instantiating locale issue for older libcxx versions.
- Fixed several issues and improved SDK <-> FloatingServer integration.
- Updated SDK documentation.
- Improved integration with Floating server.
- Updated SDK documentation.
- Added LicenseID::setPassword method.
- Added methods for consumption licenses: License::consumptionPeriod, License::isResetConsumptionEnabled, LicenseHandler::isResetLicenseConsumptionEnabled, LicenseHandler::getLicenseConsumptionPeriod.
- Added methods for consumption license features: LicenseFeature::maxOverages, LicenseFeature::isOveragesAllowed, LicenseFeature::consumptionPeriod, LicenseFeature::isResetConsumptionEnabled.
- Fixed typo in Configuration::isLoggingEnabled method.
- Fixed detection of OS name for Windows 11.
- Implemented license borrowing feature. See License::borrow, LicenseHandler::borrowFloatingLicense.
- Added License::floatingEndDateTime, now floating license expires when floating period ends.
- Added LicenseHandler::registerFloatingLicense method, it is equivalent to online license check for cloud floating license.
- Added BorrowLicenseException and eBorrowLicenseError, eBorrowingNotAllowed error codes.
- Added Configuration::setUserInfo and Configuration::getUserInfo methods for passing generic user defined data to the backend.
- Added LicenseID::trim, license identifier will be automatically trimmed if you use LicenseID::from... function.
- Fixed several minor bugs and W4 warnings, stability and performance improvements.
- Implemented new API set for managing device variables. See DeviceVariable, License::getDeviceVariables, License::addDeviceVariable etc. Now device variables a being stored along with local license, managing device variables available both locally and on the backend. See SDK documentation for more details.
- Fixed problem of auto-revoking floating license.
- Implemented adding consumption for offline-floating license.
- Added License::registerFloatingLicense method.
- Updated TestFloatingServer function for CppSample.
- Fixed name conflict with Google Test Framework in EncryptString.h
- Added SDK build for VC143 (Visual Studio 2022)
- Improved network communication security.
- Added address info data to the Customer class (address, city, state, country, postcode).
- Implemented ability to set desired license policy when requesting trial license. See LicenseManager::getTrialLicense.
- Fixed issues with FloatingClient::registerLicense and FloatingClient::isOnline.
- Implemented Single sign-on (SSO) feature. See LicenseManager::getSSOUrl and LicenseManager::activateLicense using token.
- Implemented ExtendedOptions::setAlternateKey, ExtendedOptions::setAlternateServiceURL methods.
- Added SSOSample.
- Added FileStorageWithLock implementation for Linux and macOS.
- Added License::startDate method and CannotBeActivatedNowException, see SDK docs for more details.
- Added new exceptions: SSOException, SSOTokenException and TrialNotAllowedException.
- Fixed issue of incorrect license status in case license is copied from other device (in case of device id mismatch).
- Added LicenseUser::isInitialPassword method.
- Fixed issue with license file path on Linux and macOS.
- Improved performance of API requests.
- Added new class FileStorageWithLock for license synchronization between threads and processes.
- Added data check when sending device variables.
- Improved support of handling multiple licenses, added BaseManager::reloadLicense method.
- Improved loading and saving local license to file, updated documentation.
- Improved mutex management in LicenseFileStorageEx class.
- Fixed bad locale name issue on some platforms.
- Added new methods License::isAutoReleaseSet and License::setAutoRelease, the same for LicenseHandler.
- Added new class LicenseUser, see also License::licenseUser. Implemented getting license user info when activating or checking a license.
- Implemented new API request LicenseManager::getLicenseUsers
- Fixed issue with removing local license, clearLocalStorage method now also removes license data from memory.
- Fixed issue with localized dates in requests signature.
- Added new methods to LicenseHandler class, see LicenseHandler::dataLocation and LicenseHandler::setLicenseFileName.
- Added new documentation for BaseManager class.
- Improved LicenseStorage classes, added new class LicenseFileStorageBase.
- Fixed logging issues.
- Added new classes CryptoProviderand DefaultCryptoProvider. Now it is possible to set crypto key or salt, or implement custom CryptoProvider.
- Added new license data fields, see License::transferCount and License::floatingInUseCount.
- Added ability to reset local consumption when updating license offline, see License::updateOffline.
- Implemented new license storage model. See LicenseStorage abstract class and LicenseMemoryStorage, LicenseFileStorage classes. Now it possible to store local license in custom locations like your DB, Windows registry, etc, by implementing LicenseStorage.
- Implemented interprocess synchronization for local license, see LicenseFileStorageEx class.
- Implemented security improvements for offline activation (offline activation guards). See ExtendedOptions::enableGuardFile.
- Improved FloatingClient, see changes in FloatingClient::register/unregister and License::floatingClientId.
- Improved handling of InstallationFiles, added helper struct InstallFileFilter, updated LicenseHandler and C-interface.
- Improved VM detection, fixed false positive detections.
- LicenseManager::getTrialLicense now returns LicenseID, that incudes initial password for user-based products.
- Implemented License::updateOffline and LicenseHandler::updateOffline functions, that allow offline license updates.
- Added new fields to InstallationFile class: Environment, Eula Link, Release Notes Link, Size and Channel.
- Implemented filtering of installation files by Environment and Channel.
- Added local consumption information to offline deactivation files.
- Added ClockTamperedException instead of DateTimeCheatingException.
- Fixed issue when deleting floating license.
- Implemented new classes for interaction with on-premise floating server. See FloatingClient, FloatingServerInfo.
- Added new members to InstallationFile class, that allows implementing of intermediate updates. See InstallationFile::releaseDate and InstallationFile::requiredVersion.
- Security improvements, encrypted internal SDK data, added header file for strings encryption see EncryptString.h.
- Added SDK build for Mac ARM64 target architecture.
- Improved error handling.
- Updated JSON for Modern C++ to v3.9.1
- OpenSSL updated to v1.1.1k
- curl updated to v7.77.0
- Implemented feature for requesting overage for consumption licenses, see License::syncConsumption.
- Added new class NetworkInfo and implemented feature allowing override IP, MAC and host name determined by default. See ExtendedOptions::overrideNetworkInfo.
- Fixed false positive detection of Windows VMs.
- Improved and optimized VM detection for Windows.
- Fixed memory leak issue in static library due to missing OpenSSL resources cleanup in curl.
- Improved WinSample.
- Removed OptionalProperties class.
- Implemented expiry date for LicenseFeature class, see LicenseFeature::expiryDate and LicenseFeature::isExpired.
- Fixed COM initialization issue in VM detection module.
- SDK build for Linux with GCC 7.5 now has no dependency to std::filesystem.
- Fixed static linkage issue in CSample.
- Improved WinSample.
- Added new feature for storing user data inside license file, see License::addUserData, License::removeUserData and License::userData
- Added new class OptionalProperties for sending optional parameters when checking license.
- Allowed decreasing consumption, see new methods License::updateConsumption and License::updateFeatureConsumption.
- curl updated to v7.75.0
- Created SDK build for Linux compiled with GCC 7.5
- Added Xcode proj files for SDK samples.
- Build for macOS now supports macOS 10.12 Sierra and latter.
- Implemented C-interface, see header files inside include folder and CSample.
- Main namespace was renamed to LicenseSpring.
- Most of the classes have been reworked and improved.
- Fixed License::daysRemaining counter.
- Added new class LicenseID, generalized API calls for user-based and key-based products.
- Added Documentation.
- Removed Management API (classes ManagementService, LicenseDetails, OrderDetails) from the SDK, if you need access to Management functionality please use API directly or through the Java SDK.
- Implemented change password feature for user-based Products. See LicenseManager::changePassword and License::changePassword.
- Added helper method License.maintenanceDaysRemaining.
- Improved error handling when reading/writing license.
- Dynamic libraries have been digitally signed.
- Fixed minor linking issues on Linux.
- Fixed static libraries for Windows, disabled /GL compiler switch.
- Fixed redirection issue.
- cUrl updated to v7.72.0
- Implemented new LicenseHandler class, it is now part of the LicenseSpring library.
- Fixed LicenseWatchdog timeout issue.
- Fixed license data update during online check.
- Experimental filesystem replaced with std filesystem for Linux build.
- A few methods of the LicenseManager class were renamed.
- Implemented VM Detection feature. See License::isVMAllowed, LicenseSpringExtendedOptions::enableVMDetection and LicenseSpringConfiguration::isVM.
- Implemented Floating licensing and LicenseWatchdog. See License::isFloating and License::setupLicenseWatchdog.
- Implemented Overages feature for Consumption license type. See License::isOveragesAllowed and License::maxOverages.
- Added new classes BaseManager and ManagementService. Functionality divided into management and en-user license handling.
- Added new exception types VMIsNotAllowedException, MaxFloatingReachedException and DeviceBlacklistedException.
- Updated LicenseDetails and OrderDetails classes, added new data fields.
- Thread safety and reliability improvements.
- Architecture changes and enhancements, LicenseManager no longer a singleton.
- Fixed TLS version issue.
- Third party libs updated to latest stable versions (OpenSSL 1.0.2u, cURL 7.70+).
- Fixed hostname issue for Windows systems.
- Fixed problem with ProxySettings.
- Added new exception type LicenseNoAvailableActivationsException.
- Fixed consumption features update.
- Improved error handling.
- Implemented increase feature consumption in offline mode. Improved consumption handling.
- Added new methods License::updateFeatureConsumption, LicenseFeature::localConsumption.
- Added helper method License::feature, it returns feature by code.
- Improved error handling and added new exception class InvalidLicenseFeatureException.
- Improved error handling and fixed a few minor bugs.
- Added new exceptions MissingEmailException and InvalidOrderIDException.
- Added new helper method LicenseManager::isOnline, for more details see header file.
- Improved License::increaseFeatureConsumption, removed redundant check and increased performance.
- For Windows default license file path changed to %localappdata%\LicenseSpring%ProductCode%\license.key If you use default license path in your app license will be transferred to new location by the SDK automatically.
- Added UnknownLicenseSpringException class.
- Improved LicenseHandler class.
- License:sendCustomData renamed to License::sendDeviceData.
- Added new build for Linux that compatible with old ABI.
- Added LicenseFeature::name, now it's possible to get License feature name not only code.
- Added helper method License::isMaintenancePeriodExpired.
- Fixed deactivation bug, timesActivated value wasn't updated properly. Improved online deactivation, see License::deactivate.
- Fixed hardware ID issue for Windows systems where system disk or other piece of hardware could not be determined.
- Fixed linking errors for Linux build.
- Added new LicenseManager::getTrialLicense method. It accepts Customer ptr, when issuing trial license also new customer will be created or license will be assigned to existing customer.
- Added License::lastCheckDateUtc and fixed License::daysRemaining method, see header file for more details.
- Added logging, see LicenseSpringExtendedOptions::enableLogging.
- Improved hardware ID detection for Linux systems.
- Fixed issue of consumption features. Consumption changes were not stored to local license file properly.
- Fixed Unreal Engine compatibility issues, ProxySettings and LicenseSpringExtendedOptions became classes instead of structs.
- Stability and performance improvements.
- Fixed issue with company data member in Customer class.
- Added OrderDetails::setOrderID method.
- Added license owner information, see License::owner and console sample.
- Fixed Hardware ID issue in case of foreign (not english) locale.
- Fixed issue of consumption license features.
- Added exception in case HOME system variable is unavailable (applicable for Linux and Mac OS X).
- Added new API request LicenseManager::getProductDetails, new class ProductDetails.
- Added LicenseSpringConfiguration::getLicenseSpringAPIVersion method. It returns API version that SDK uses.
- API version field added to offline activation/deactivation.
- LicenseManager::getTrialKey replaced with LicenseManager::getTrialLicense.
- Improved LicenseManager::createOrder, new class LicenseDetails.
- Improved console sample, now demonstrates both user-based and key-based licensing approaches.
- User-based licensing.
- New classes Customer and OrderDetails.
- Added requests for creating licenses and orders. See LicenseManager::createLicense and LicenseManager::createOrder.
- Consumption license features. See License::features, License::increaseFeatureConsumption and LicenseFeature class.
- Added new methods License::maxActivations and License::timesActivated.
- Added ability to track MAC address. CollectHostNameAndLocalIP renamed to CollectNetworkInfo.
- LicenseHandler SDK wrapper class, it helps handle SDK exceptions in one place.
- New classes for managing app versions, see Version.h.
- Improved samples.
- Stability and performance improvements.
- New API request License::sendCustomData, it allows sending custom data to the platform. Data will be linked to a device, so on the platform see device variables.
- Changed license status logic, now it's possible to check whether license is active even if it was disabled. See License::isActive, License::isEnabled and License::status.
- Fixed online license check and hardware ID issue
- New helper class Version, helps compare app versions, during update for example
- Minor performance improvements and improved WTL sample
- Fixed License::isOfflineActivated method
- Improved SDK sample apps
- Improved error handling, added new error codes eLicenseDisabled and eLicenseInactive
- LicenseExpiredException has been removed. Now in case of expired license the SDK throws LicenseStateException with eLicenseExpired error code
- Fixed online license check
- Fixed offline activation in UI sample
- Added new feature - Custom product (license) data fields, see License::customFields and CustomField.h
- All exceptions now have error code, see LicenseSpringErrorCodes.h
- Added new sample with GUI, it's native Windows app based on WTL (Windows Template Library)
- Added License::MaxDaysRemainingValue constant
- Fixed sending of optional parameters app name and version
- Added new API method License::isOfflineActivated, returns true if license was activated in offline mode.
- Added new API method License::isActive for convenience, equivalent to status() == LicenseStatus::Active.
- Fixed a few minor bugs, License::isExpired now returns correct value for inactive or disabled license.
- Added ability to control network timeout interval
- Added ability to set up proxy using ProxySettings
- Fixed expiry policy for subscription license type
- Fixed license re-enabling issue
- Fixed missing config.h/config.cpp for Linux and Mac samples
- LicenseManager::dispose renamed to deinitialize
- Fixed minor memory leak in ErrorHandler class
- Fixed a few compiler and linker warnings
- Stability and performance improvements
- Added static MD configuration
- Fixed a few memory leaks
- Stability and performance improvements
- Fixed access violation crash when using SDK as a plugin for Unreal Engine
- Fixed Hardware ID issue, now it's accessible for reading
- Build for VC142 (Visual Studio 2019)
- OpenSSL and cUrl updated to latest stable builds
- Stability and performance improvements
- New API method LicenseManager::dispose, it helps free up SDK resources on demand
- Stability and performance improvements
- New Hardware ID calculation algorithm, much more faster and secure
- Consumption licensing, new methods increaseConsumptionCounter, totalConsumptions, maxConsumptions and new exception type NotEnoughConsumptionException. See sample app for details.
- Fixed bug of handling license check response
- Removed redundant dependencies
- Fixed CMake scripts
- Fixed relative path for shared libs
- Ability to set custom hardware ID
- LicenseSpringExtendedOptions, all optional SDK configuration properties now brought together in ExtendedOptions class, see LicenseSpringConfiguration.h for details
- lib and dll folders changed to static and dynamic accordingly
- Improved networking and error handling
- License status, isActive now replaced with status for the License class, for more details see LicenseStatus.h
- Implemented getting of local IP address
- New and faster method of getting OS version info
- Improvements for LicenseType class, new comparison operators and constructor
- Separate release for VC140 (Visual Studio 2015)
- Fixed handling of max date time (applicable to validity period of perpetual license or not set maintenance period)
- Fixed project files for the SDK and sample apps
- SDK dependencies (OpenSSL and cURL) updated to latest stable versions
- Added script for building dependencies from sources