Files
craftlabs-authorization-sdk/native/include/craftlabs_auth.h
T
2026-04-06 17:42:09 +08:00

71 lines
2.6 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
* CraftLabs 授权 SDK — C 语言 FFI 公共头文件。
*
* 版权所有 © 广州创飞人工智能技术有限公司
* 开发者:huangping@craftlabs.cn
*/
#ifndef CRAFTLABS_AUTH_H
#define CRAFTLABS_AUTH_H
#include <stdint.h>
/*
* FFI / Pythonctypes、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