mirror of
https://github.com/hpd840321/craftlabs-authorization-sdk.git
synced 2026-06-09 01:50:30 +08:00
3894315759
Made-with: Cursor
71 lines
2.6 KiB
C
71 lines
2.6 KiB
C
/*
|
||
* CraftLabs 授权 SDK — C 语言 FFI 公共头文件。
|
||
*
|
||
* 版权所有 © 广州创飞人工智能技术有限公司
|
||
* 开发者:huangping@craftlabs.cn
|
||
*/
|
||
#ifndef CRAFTLABS_AUTH_H
|
||
#define CRAFTLABS_AUTH_H
|
||
|
||
#include <stdint.h>
|
||
|
||
/*
|
||
* FFI / Python(ctypes、cffi)说明
|
||
* ----------------------------------
|
||
* - 所有 `const char*` 均为 **UTF-8** 编码、以 `\0` 结尾。
|
||
* - `AuthHandle`:不透明指针,仅由本库函数产生与销毁(`auth_initialize` / `auth_destroy`)。
|
||
* - `AuthResult`、`LicenseInfo` 使用 `stdint` 定宽字段,避免 `time_t`/`int` 宽度随平台变化导致 Python 侧 Structure 布局错误。
|
||
* - `AuthResult.message`:指向 **由本库管理的静态或内部只读缓冲区**,调用方不得 `free`;在任意后续对本库的再次调用之后视为可能失效(与其它 FFI 语言惯例一致)。
|
||
* - `auth_get_license_info` 返回的 `LicenseInfo*`(及其中 `feature_names` / `feature_values` 指向的数组)须通过 `auth_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 auth_initialize(const char* config_json);
|
||
|
||
CRAFTLABS_API AuthResult auth_activate(AuthHandle handle, const char* license_key);
|
||
|
||
CRAFTLABS_API AuthResult auth_check_license(AuthHandle handle);
|
||
|
||
CRAFTLABS_API LicenseInfo* auth_get_license_info(AuthHandle handle);
|
||
|
||
CRAFTLABS_API void auth_free_license_info(LicenseInfo* info);
|
||
|
||
CRAFTLABS_API int32_t auth_has_feature(AuthHandle handle, const char* feature_name);
|
||
|
||
CRAFTLABS_API AuthResult auth_release(AuthHandle handle);
|
||
|
||
CRAFTLABS_API AuthResult auth_heartbeat(AuthHandle handle);
|
||
|
||
CRAFTLABS_API void auth_destroy(AuthHandle handle);
|
||
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif
|
||
|
||
#endif
|