mirror of
https://github.com/EasyTier/EasyTier.git
synced 2026-09-04 01:55:41 +00:00
Add config server client support for the C FFI and Android JNI bindings. Reuse the existing easytier::web_client::run_web_client path and NetworkInstanceManager; OHOS is unchanged. Report successful remote config apply/delete operations through a callback, with one JSON event per affected instance. Keep the config server client and FFI data plane mutually exclusive: once either side is in use, the other side returns an error instead of sharing lifecycle state.
24 lines
609 B
Rust
24 lines
609 B
Rust
use std::ffi::{CStr, c_char};
|
|
|
|
pub(crate) unsafe fn c_str_to_string(ptr: *const c_char, name: &str) -> Result<String, String> {
|
|
if ptr.is_null() {
|
|
return Err(format!("{} is null", name));
|
|
}
|
|
|
|
unsafe { CStr::from_ptr(ptr) }
|
|
.to_str()
|
|
.map(|value| value.to_string())
|
|
.map_err(|err| format!("{} is not valid UTF-8: {}", name, err))
|
|
}
|
|
|
|
pub(crate) unsafe fn optional_c_str_to_string(
|
|
ptr: *const c_char,
|
|
name: &str,
|
|
) -> Result<Option<String>, String> {
|
|
if ptr.is_null() {
|
|
return Ok(None);
|
|
}
|
|
|
|
unsafe { c_str_to_string(ptr, name) }.map(Some)
|
|
}
|