00001
00004
00005
00006
00007
00008 #ifndef _cel_license_h_
00009 #define _cel_license_h_
00010
00011 #include "cel_types.h"
00012 #include "cel_referable.h"
00013 #include "cel_lockable.h"
00014 #include "cel_memory.h"
00015 #include "cel_string.h"
00016 #include "cel_time.h"
00017 #include <map>
00018
00019 namespace Celartem
00020 {
00025 namespace License
00026 {
00031 enum Feature
00032 {
00033 PixelLiveImaging = 0,
00034 VFZEncode = 1,
00035 MrSIDEncode = 2,
00036 JPEG2000Encode = 3,
00037 GenuineFractals = 4,
00038 DjVuDecode = 5,
00039 DjVuEncode = 6,
00040 SecureDjVuDecode = 7,
00041 SecureDjVuEncode = 8,
00042 PerformOCR = 9,
00043 Feature10,
00044 Feature11,
00045 Feature12,
00046 Feature13,
00047 Feature14,
00048 Feature15,
00049 Feature16,
00050 Feature17,
00051 Feature18,
00052 Feature19,
00053 Feature20,
00054 Feature21,
00055 Feature22,
00056 Feature23,
00057 Feature24,
00058 Feature25,
00059 Feature26,
00060 Feature27,
00061 Feature28,
00062 Feature29,
00063 Feature30,
00064 Feature31,
00065 };
00066
00070 enum {MAX_FEATURES = 32};
00071
00076 enum ActivationScheme
00077 {
00078 Disabled = 0,
00079 Unlimited = 1,
00080 ByCartridge = 2,
00081 Development = 3,
00082 ActivationServer = 4,
00083 };
00084
00085 struct ProductStatus;
00086
00093 class LicenseManager
00094 {
00095 public:
00101 static LicenseManager& getLicenseManager();
00102
00112 virtual void setLicenseScript(const String& inLicense) = 0;
00113
00125 virtual void setLicenseTarget(void* target, const String& inCookie) = 0;
00126
00132 virtual String getLicenseScript() const = 0;
00133
00139 virtual String getProductId() const = 0;
00140
00146 virtual String getProductDescription() const = 0;
00147
00155 virtual ActivationScheme getActivationScheme(Feature inFeature) const = 0;
00156
00162 virtual String getMachineId() const = 0;
00163
00185 virtual String getStatusString(
00186 bool inHumanReadable,
00187 const String& inProductId = NullString) const = 0;
00188
00203 static String getStatusStringFromProductStatus(
00204 bool inHumanReadable,
00205 const String& inMachineId,
00206 const ProductStatus& inProductStatus);
00207
00218 static String getProductStatusFromString(
00219 const String& inStatusString,
00220 ProductStatus& outProductStatus);
00221
00227 virtual void setActivationServerUrl(
00228 const String& inActivationServerUrl) = 0;
00229
00235 virtual String getActivationServerUrl() const = 0;
00236
00243 static String createLicenseScript(
00244 const String& inUnencryptedScript);
00245
00251 static String getFeatureName(Feature inFeature);
00252
00253 #if CEL_ENV_POSIX
00254
00261 static void setLicenseDbDirectory(
00262 const String& inLicenseDbDirectory);
00263 #endif
00264
00265 protected:
00266 virtual ~LicenseManager() {}
00267 };
00268
00273 struct FeatureInfo
00274 {
00278 ActivationScheme actScheme;
00279
00285 size_t count;
00286
00294 size_t altCount;
00295
00300 Time expiry;
00301
00305 static const size_t ficUnlimited = 0xffffffff;
00306
00310 FeatureInfo() : actScheme(Disabled), count(0), altCount(0) {}
00311 };
00312
00316 struct ProductStatus
00317 {
00321 String productId;
00322
00326 String productDescription;
00327
00331 SimpleArray<FeatureInfo> featureStatus;
00332 };
00333
00338 class CartridgeManager
00339 {
00340 public:
00347 static CartridgeManager& getCartridgeManager();
00348
00355 virtual void getActivatedProducts(SimpleArray<String>& outProductIds) = 0;
00356
00363 virtual void getProductStatus(
00364 ProductStatus& outProductStatus,
00365 const String& inProductId = NullString) = 0;
00366
00379 virtual String reserve(Feature inFeature, size_t inCount) = 0;
00380
00386 virtual void commit(const String& inGuid) = 0;
00387
00393 virtual void revert(const String& inGuid) = 0;
00394
00400 virtual void installCartridge(const String& inCartridgeScript) = 0;
00401
00408 static String createCartridge(
00409 const String& inUnencryptedScript);
00410
00418 virtual void reinitializeDataBase() = 0;
00419
00420 protected:
00421 virtual ~CartridgeManager() {}
00422 };
00423
00428 class CartridgeConsumer
00429 {
00430 public:
00434 CartridgeConsumer();
00435
00441 ~CartridgeConsumer();
00442
00450 void reserve(Feature inFeature, size_t inCount);
00451
00455 void commit();
00456
00460 void revert();
00461
00462 private:
00463 void* m_reserved;
00464 };
00465 }
00466 }
00467
00468 #endif // _cel_license_h_