mirror of
https://github.com/ZeroTier/ZeroTierOne
synced 2025-08-20 13:24:09 -07:00
expose change_handler to C via FFI
This commit is contained in:
parent
ccb0fa748f
commit
3a209e2930
1 changed files with 52 additions and 8 deletions
|
@ -512,7 +512,7 @@ pub unsafe extern "C" fn network_listener_new(
|
||||||
listen_timeout: u64,
|
listen_timeout: u64,
|
||||||
callback: NetworkListenerCallback,
|
callback: NetworkListenerCallback,
|
||||||
user_ptr: *mut c_void,
|
user_ptr: *mut c_void,
|
||||||
) -> *const Arc<NetworkListener> {
|
) -> *const NetworkListener {
|
||||||
if listen_timeout == 0 {
|
if listen_timeout == 0 {
|
||||||
println!("listen_timeout is zero");
|
println!("listen_timeout is zero");
|
||||||
return std::ptr::null_mut();
|
return std::ptr::null_mut();
|
||||||
|
@ -527,7 +527,7 @@ pub unsafe extern "C" fn network_listener_new(
|
||||||
let rt = runtime::Handle::current();
|
let rt = runtime::Handle::current();
|
||||||
rt.block_on(async {
|
rt.block_on(async {
|
||||||
match NetworkListener::new(id, Duration::from_secs(listen_timeout), callback, user_ptr).await {
|
match NetworkListener::new(id, Duration::from_secs(listen_timeout), callback, user_ptr).await {
|
||||||
Ok(listener) => Arc::into_raw(Arc::new(listener)),
|
Ok(listener) => Arc::into_raw(listener),
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
println!("error creating network listener: {}", e);
|
println!("error creating network listener: {}", e);
|
||||||
std::ptr::null_mut()
|
std::ptr::null_mut()
|
||||||
|
@ -538,7 +538,7 @@ pub unsafe extern "C" fn network_listener_new(
|
||||||
|
|
||||||
#[cfg(feature = "ztcontroller")]
|
#[cfg(feature = "ztcontroller")]
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub unsafe extern "C" fn network_listener_delete(ptr: *const Arc<NetworkListener>) {
|
pub unsafe extern "C" fn network_listener_delete(ptr: *const NetworkListener) {
|
||||||
if ptr.is_null() {
|
if ptr.is_null() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -547,7 +547,7 @@ pub unsafe extern "C" fn network_listener_delete(ptr: *const Arc<NetworkListener
|
||||||
|
|
||||||
#[cfg(feature = "ztcontroller")]
|
#[cfg(feature = "ztcontroller")]
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub unsafe extern "C" fn network_listener_listen(ptr: *const Arc<NetworkListener>) -> bool {
|
pub unsafe extern "C" fn network_listener_listen(ptr: *const NetworkListener) -> bool {
|
||||||
use std::mem::ManuallyDrop;
|
use std::mem::ManuallyDrop;
|
||||||
if ptr.is_null() {
|
if ptr.is_null() {
|
||||||
println!("ptr is null");
|
println!("ptr is null");
|
||||||
|
@ -569,6 +569,28 @@ pub unsafe extern "C" fn network_listener_listen(ptr: *const Arc<NetworkListener
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "ztcontroller")]
|
||||||
|
#[no_mangle]
|
||||||
|
pub unsafe extern "C" fn network_listener_change_handler(ptr: *const NetworkListener) {
|
||||||
|
use std::mem::ManuallyDrop;
|
||||||
|
if ptr.is_null() {
|
||||||
|
println!("ptr is null");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let listener = ManuallyDrop::new(unsafe { Arc::from_raw(ptr) });
|
||||||
|
|
||||||
|
let rt = runtime::Handle::current();
|
||||||
|
match rt.block_on(listener.change_handler()) {
|
||||||
|
Ok(_) => {
|
||||||
|
println!("Network listener change listener completed successfully");
|
||||||
|
}
|
||||||
|
Err(e) => {
|
||||||
|
println!("Error in network listener change listener: {}", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(feature = "ztcontroller")]
|
#[cfg(feature = "ztcontroller")]
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub unsafe extern "C" fn member_listener_new(
|
pub unsafe extern "C" fn member_listener_new(
|
||||||
|
@ -576,7 +598,7 @@ pub unsafe extern "C" fn member_listener_new(
|
||||||
listen_timeout: u64,
|
listen_timeout: u64,
|
||||||
callback: MemberListenerCallback,
|
callback: MemberListenerCallback,
|
||||||
user_ptr: *mut c_void,
|
user_ptr: *mut c_void,
|
||||||
) -> *const Arc<MemberListener> {
|
) -> *const MemberListener {
|
||||||
if listen_timeout == 0 {
|
if listen_timeout == 0 {
|
||||||
println!("listen_timeout is zero");
|
println!("listen_timeout is zero");
|
||||||
return std::ptr::null_mut();
|
return std::ptr::null_mut();
|
||||||
|
@ -591,7 +613,7 @@ pub unsafe extern "C" fn member_listener_new(
|
||||||
let rt = runtime::Handle::current();
|
let rt = runtime::Handle::current();
|
||||||
rt.block_on(async {
|
rt.block_on(async {
|
||||||
match MemberListener::new(id, Duration::from_secs(listen_timeout), callback, user_ptr).await {
|
match MemberListener::new(id, Duration::from_secs(listen_timeout), callback, user_ptr).await {
|
||||||
Ok(listener) => Arc::into_raw(Arc::new(listener)),
|
Ok(listener) => Arc::into_raw(listener),
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
println!("error creating member listener: {}", e);
|
println!("error creating member listener: {}", e);
|
||||||
std::ptr::null_mut()
|
std::ptr::null_mut()
|
||||||
|
@ -602,7 +624,7 @@ pub unsafe extern "C" fn member_listener_new(
|
||||||
|
|
||||||
#[cfg(feature = "ztcontroller")]
|
#[cfg(feature = "ztcontroller")]
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub unsafe extern "C" fn member_listener_delete(ptr: *const Arc<MemberListener>) {
|
pub unsafe extern "C" fn member_listener_delete(ptr: *const MemberListener) {
|
||||||
if ptr.is_null() {
|
if ptr.is_null() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -611,7 +633,7 @@ pub unsafe extern "C" fn member_listener_delete(ptr: *const Arc<MemberListener>)
|
||||||
|
|
||||||
#[cfg(feature = "ztcontroller")]
|
#[cfg(feature = "ztcontroller")]
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub unsafe extern "C" fn member_listener_listen(ptr: *const Arc<MemberListener>) -> bool {
|
pub unsafe extern "C" fn member_listener_listen(ptr: *const MemberListener) -> bool {
|
||||||
use std::mem::ManuallyDrop;
|
use std::mem::ManuallyDrop;
|
||||||
if ptr.is_null() {
|
if ptr.is_null() {
|
||||||
println!("ptr is null");
|
println!("ptr is null");
|
||||||
|
@ -631,3 +653,25 @@ pub unsafe extern "C" fn member_listener_listen(ptr: *const Arc<MemberListener>)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "ztcontroller")]
|
||||||
|
#[no_mangle]
|
||||||
|
pub unsafe extern "C" fn member_listener_change_handler(ptr: *const MemberListener) {
|
||||||
|
use std::mem::ManuallyDrop;
|
||||||
|
if ptr.is_null() {
|
||||||
|
println!("ptr is null");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let listener = ManuallyDrop::new(unsafe { Arc::from_raw(ptr) });
|
||||||
|
|
||||||
|
let rt = runtime::Handle::current();
|
||||||
|
match rt.block_on(listener.change_handler()) {
|
||||||
|
Ok(_) => {
|
||||||
|
println!("Member listener change listener completed successfully");
|
||||||
|
}
|
||||||
|
Err(e) => {
|
||||||
|
println!("Error in member listener change listener: {}", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue