mirror of
https://github.com/hpd840321/craftlabs-authorization-sdk.git
synced 2026-06-10 10:30:30 +08:00
chore: archive old C++ CMake build to .deprecated-cmake/; Rust is now canonical
This commit is contained in:
@@ -0,0 +1,152 @@
|
||||
/*
|
||||
* JNI 桥:java 包 cn.craftlabs.auth.internal.NativeBridge 与 craftlabs_auth.h C API 之间的映射。
|
||||
*
|
||||
* 版权所有 © 广州创飞人工智能技术有限公司
|
||||
* 开发者:huangping@craftlabs.cn
|
||||
*/
|
||||
#include <cstdint>
|
||||
#include <jni.h>
|
||||
|
||||
#include "craftlabs_auth.h"
|
||||
|
||||
namespace {
|
||||
|
||||
CraftHandle from_jlong(jlong ptr) {
|
||||
return reinterpret_cast<CraftHandle>(static_cast<uintptr_t>(ptr));
|
||||
}
|
||||
|
||||
// craft_result mapper to Java AuthResult (rename for consistency)
|
||||
jobject make_craft_result(JNIEnv* env, const CraftResult& r) {
|
||||
jclass cls = env->FindClass("cn/craftlabs/auth/AuthResult");
|
||||
if (!cls) {
|
||||
return nullptr;
|
||||
}
|
||||
jmethodID ctor = env->GetMethodID(cls, "<init>", "(ZLjava/lang/String;)V");
|
||||
if (!ctor) {
|
||||
return nullptr;
|
||||
}
|
||||
jboolean ok = (r.success != 0) ? JNI_TRUE : JNI_FALSE;
|
||||
jstring msg = env->NewStringUTF(r.message ? r.message : "");
|
||||
if (!msg) {
|
||||
return nullptr;
|
||||
}
|
||||
jobject out = env->NewObject(cls, ctor, ok, msg);
|
||||
env->DeleteLocalRef(msg);
|
||||
return out;
|
||||
}
|
||||
|
||||
jobject make_license_info(JNIEnv* env, LicenseInfo* info) {
|
||||
if (!info) {
|
||||
return nullptr;
|
||||
}
|
||||
jclass cls = env->FindClass("cn/craftlabs/auth/LicenseInfo");
|
||||
if (!cls) {
|
||||
return nullptr;
|
||||
}
|
||||
jmethodID ctor = env->GetMethodID(cls, "<init>", "(ZLjava/util/Date;Ljava/util/Map;)V");
|
||||
if (!ctor) {
|
||||
return nullptr;
|
||||
}
|
||||
jboolean licensed = info->is_licensed ? JNI_TRUE : JNI_FALSE;
|
||||
|
||||
jobject date = nullptr;
|
||||
if (info->expiration_date != 0) {
|
||||
jclass dateCls = env->FindClass("java/util/Date");
|
||||
jmethodID dateCtor = env->GetMethodID(dateCls, "<init>", "(J)V");
|
||||
jlong ms = static_cast<jlong>(info->expiration_date) * 1000LL;
|
||||
date = env->NewObject(dateCls, dateCtor, ms);
|
||||
}
|
||||
|
||||
jclass mapCls = env->FindClass("java/util/HashMap");
|
||||
jmethodID mapCtor = env->GetMethodID(mapCls, "<init>", "()V");
|
||||
jobject map = env->NewObject(mapCls, mapCtor);
|
||||
jmethodID put = env->GetMethodID(mapCls, "put",
|
||||
"(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");
|
||||
for (int i = 0; i < info->feature_count; ++i) {
|
||||
const char* name = info->feature_names[i];
|
||||
int v = info->feature_values[i];
|
||||
jstring jn = env->NewStringUTF(name ? name : "");
|
||||
jclass boolCls = env->FindClass("java/lang/Boolean");
|
||||
jmethodID valueOf =
|
||||
env->GetStaticMethodID(boolCls, "valueOf", "(Z)Ljava/lang/Boolean;");
|
||||
jobject jb = env->CallStaticObjectMethod(boolCls, valueOf, v ? JNI_TRUE : JNI_FALSE);
|
||||
env->CallObjectMethod(map, put, jn, jb);
|
||||
env->DeleteLocalRef(jn);
|
||||
env->DeleteLocalRef(jb);
|
||||
}
|
||||
jobject out = env->NewObject(cls, ctor, licensed, date, map);
|
||||
if (date) {
|
||||
env->DeleteLocalRef(date);
|
||||
}
|
||||
env->DeleteLocalRef(map);
|
||||
return out;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
extern "C" {
|
||||
|
||||
JNIEXPORT jlong JNICALL Java_cn_craftlabs_auth_internal_NativeBridge_nativeInitialize(
|
||||
JNIEnv* env, jclass, jstring configJson) {
|
||||
const char* utf = configJson ? env->GetStringUTFChars(configJson, nullptr) : nullptr;
|
||||
CraftHandle h = craft_initialize(utf ? utf : "{}");
|
||||
if (configJson && utf) {
|
||||
env->ReleaseStringUTFChars(configJson, utf);
|
||||
}
|
||||
return static_cast<jlong>(reinterpret_cast<uintptr_t>(h));
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_cn_craftlabs_auth_internal_NativeBridge_nativeDestroy(JNIEnv*,
|
||||
jclass,
|
||||
jlong handle) {
|
||||
craft_destroy(from_jlong(handle));
|
||||
}
|
||||
|
||||
JNIEXPORT jobject JNICALL Java_cn_craftlabs_auth_internal_NativeBridge_nativeActivate(
|
||||
JNIEnv* env, jclass, jlong handle, jstring licenseKey) {
|
||||
const char* utf = licenseKey ? env->GetStringUTFChars(licenseKey, nullptr) : "";
|
||||
CraftResult r = craft_activate(from_jlong(handle), utf ? utf : "");
|
||||
if (licenseKey && utf) {
|
||||
env->ReleaseStringUTFChars(licenseKey, utf);
|
||||
}
|
||||
return make_craft_result(env, r);
|
||||
}
|
||||
|
||||
JNIEXPORT jobject JNICALL Java_cn_craftlabs_auth_internal_NativeBridge_nativeCheckLicense(
|
||||
JNIEnv* env, jclass, jlong handle) {
|
||||
CraftResult r = craft_check_license(from_jlong(handle));
|
||||
return make_craft_result(env, r);
|
||||
}
|
||||
|
||||
JNIEXPORT jobject JNICALL Java_cn_craftlabs_auth_internal_NativeBridge_nativeGetLicenseInfo(
|
||||
JNIEnv* env, jclass, jlong handle) {
|
||||
LicenseInfo* info = craft_get_license_info(from_jlong(handle));
|
||||
jobject jinfo = make_license_info(env, info);
|
||||
craft_free_license_info(info);
|
||||
return jinfo;
|
||||
}
|
||||
|
||||
JNIEXPORT jboolean JNICALL Java_cn_craftlabs_auth_internal_NativeBridge_nativeHasFeature(
|
||||
JNIEnv* env, jclass, jlong handle, jstring featureName) {
|
||||
const char* utf = featureName ? env->GetStringUTFChars(featureName, nullptr) : "";
|
||||
int v = craft_has_feature(from_jlong(handle), utf ? utf : "");
|
||||
if (featureName && utf) {
|
||||
env->ReleaseStringUTFChars(featureName, utf);
|
||||
}
|
||||
return v ? JNI_TRUE : JNI_FALSE;
|
||||
}
|
||||
|
||||
JNIEXPORT jobject JNICALL Java_cn_craftlabs_auth_internal_NativeBridge_nativeRelease(JNIEnv* env,
|
||||
jclass,
|
||||
jlong handle) {
|
||||
CraftResult r = craft_release(from_jlong(handle));
|
||||
return make_craft_result(env, r);
|
||||
}
|
||||
|
||||
JNIEXPORT jobject JNICALL Java_cn_craftlabs_auth_internal_NativeBridge_nativeHeartbeat(
|
||||
JNIEnv* env, jclass, jlong handle) {
|
||||
CraftResult r = craft_heartbeat(from_jlong(handle));
|
||||
return make_craft_result(env, r);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user