mirror of
https://github.com/rustdesk/rustdesk.git
synced 2024-12-05 04:59:05 +08:00
41 lines
957 B
Rust
41 lines
957 B
Rust
use std::{
|
|
ffi::{c_char, c_int, c_void},
|
|
os::raw::c_uint,
|
|
};
|
|
|
|
use hbb_common::log::error;
|
|
|
|
use super::{
|
|
cstr_to_string,
|
|
errno::ERR_NOT_HANDLED,
|
|
native_handlers::{Callable, NATIVE_HANDLERS_REGISTRAR},
|
|
};
|
|
/// The native returned value from librustdesk native.
|
|
///
|
|
/// [Note]
|
|
/// The data is owned by librustdesk.
|
|
#[repr(C)]
|
|
pub struct NativeReturnValue {
|
|
pub return_type: c_int,
|
|
pub data: *const c_void,
|
|
}
|
|
|
|
pub(super) extern "C" fn cb_native_data(
|
|
method: *const c_char,
|
|
json: *const c_char,
|
|
raw: *const c_void,
|
|
raw_len: usize,
|
|
) -> NativeReturnValue {
|
|
let ret = match cstr_to_string(method) {
|
|
Ok(method) => NATIVE_HANDLERS_REGISTRAR.call(&method, json, raw, raw_len),
|
|
Err(err) => {
|
|
error!("cb_native_data error: {}", err);
|
|
None
|
|
}
|
|
};
|
|
return ret.unwrap_or(NativeReturnValue {
|
|
return_type: ERR_NOT_HANDLED,
|
|
data: std::ptr::null(),
|
|
});
|
|
}
|