/* * CraftLabs 授权 SDK — C 语言 FFI 公共头文件。 * * 版权所有 © 广州创飞人工智能技术有限公司 * 开发者:huangping@craftlabs.cn */ #ifndef CRAFTLABS_AUTH_H #define CRAFTLABS_AUTH_H #include /* * FFI / Python(ctypes、cffi)说明 * ---------------------------------- * - 所有 `const char*` 均为 **UTF-8** 编码、以 `\0` 结尾。 * - `config_json`:UTF-8 JSON,语义与仓库 `schemas/craftlabs-auth-config.schema.json` 及 `examples/config/` * 一致;Java 侧可先经 `cn.craftlabs.auth.config.AuthConfigs` 校验后再序列化传入。 * - `AuthHandle`:不透明指针,仅由本库函数产生与销毁(`craft_initialize` / `craft_destroy`)。 * - `AuthResult`、`LicenseInfo` 使用 `stdint` 定宽字段,避免 `time_t`/`int` 宽度随平台变化导致 Python 侧 Structure 布局错误。 * - `AuthResult.message`:指向 **由本库管理的静态或内部只读缓冲区**,调用方不得 `free`;在任意后续对本库的再次调用之后视为可能失效(与其它 FFI 语言惯例一致)。 * - `craft_get_license_info` 返回的 `LicenseInfo*`(及其中 `feature_names` / `feature_values` 指向的数组)须通过 `craft_free_license_info` 释放;释放后不得再读指针成员。 * - 官方 Python 绑定见仓库 `python/craftlabs_auth/`(ctypes,与本头文件字段一一对应)。 */ #ifdef _WIN32 #define CRAFTLABS_API __declspec(dllexport) #else #define CRAFTLABS_API __attribute__((visibility("default"))) #endif #ifdef __cplusplus extern "C" { #endif typedef void* AuthHandle; typedef struct { int32_t success; /* 1: 成功, 0: 失败 */ const char* message; /* UTF-8,由库持有,勿 free */ } AuthResult; typedef struct { int32_t is_licensed; /* 1: 已授权, 0: 否 */ int64_t expiration_date; /* Unix 纪元秒数(UTC),0 表示无过期限制 */ const char** feature_names; /* 以 NULL 结尾的指针数组,或长度由 feature_count 给出,由随 LicenseInfo 一并释放 */ int32_t* feature_values; /* 与 feature_names 一一对应,元素为 0/1 */ int32_t feature_count; } LicenseInfo; CRAFTLABS_API AuthHandle craft_initialize(const char* config_json); CRAFTLABS_API AuthResult craft_activate(AuthHandle handle, const char* license_key); CRAFTLABS_API AuthResult craft_check_license(AuthHandle handle); CRAFTLABS_API LicenseInfo* craft_get_license_info(AuthHandle handle); CRAFTLABS_API void craft_free_license_info(LicenseInfo* info); CRAFTLABS_API int32_t craft_has_feature(AuthHandle handle, const char* feature_name); CRAFTLABS_API AuthResult craft_release(AuthHandle handle); CRAFTLABS_API AuthResult craft_heartbeat(AuthHandle handle); CRAFTLABS_API void craft_destroy(AuthHandle handle); #ifdef __cplusplus } #endif #endif