mirror of
https://github.com/jkcoxson/idevice.git
synced 2026-03-02 14:36:16 +01:00
Pass pointers to a new string for server params
This commit is contained in:
@@ -1,5 +1,7 @@
|
|||||||
// Jackson Coxson
|
// Jackson Coxson
|
||||||
|
|
||||||
|
use std::ffi::{CString, c_char};
|
||||||
|
|
||||||
use idevice::{
|
use idevice::{
|
||||||
IdeviceError, IdeviceService, core_device_proxy::CoreDeviceProxy, tcp::adapter::Adapter,
|
IdeviceError, IdeviceService, core_device_proxy::CoreDeviceProxy, tcp::adapter::Adapter,
|
||||||
};
|
};
|
||||||
@@ -245,12 +247,11 @@ pub unsafe extern "C" fn core_device_proxy_recv(
|
|||||||
pub unsafe extern "C" fn core_device_proxy_get_client_parameters(
|
pub unsafe extern "C" fn core_device_proxy_get_client_parameters(
|
||||||
handle: *mut CoreDeviceProxyHandle,
|
handle: *mut CoreDeviceProxyHandle,
|
||||||
mtu: *mut u16,
|
mtu: *mut u16,
|
||||||
address: *mut u8,
|
address: *mut *mut c_char,
|
||||||
address_len: usize,
|
netmask: *mut *mut c_char,
|
||||||
netmask: *mut u8,
|
|
||||||
netmask_len: usize,
|
|
||||||
) -> IdeviceErrorCode {
|
) -> IdeviceErrorCode {
|
||||||
if handle.is_null() || mtu.is_null() || address.is_null() || netmask.is_null() {
|
if handle.is_null() {
|
||||||
|
log::error!("Passed null handle");
|
||||||
return IdeviceErrorCode::InvalidArg;
|
return IdeviceErrorCode::InvalidArg;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -261,17 +262,9 @@ pub unsafe extern "C" fn core_device_proxy_get_client_parameters(
|
|||||||
*mtu = params.mtu;
|
*mtu = params.mtu;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy address string
|
|
||||||
if address_len < params.address.len() + 1 || netmask_len < params.netmask.len() + 1 {
|
|
||||||
return IdeviceErrorCode::BufferTooSmall;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsafe {
|
unsafe {
|
||||||
std::ptr::copy_nonoverlapping(params.address.as_ptr(), address, params.address.len());
|
*address = CString::new(params.address.clone()).unwrap().into_raw();
|
||||||
*address.add(params.address.len()) = 0; // Null terminator
|
*netmask = CString::new(params.netmask.clone()).unwrap().into_raw();
|
||||||
|
|
||||||
std::ptr::copy_nonoverlapping(params.netmask.as_ptr(), netmask, params.netmask.len());
|
|
||||||
*netmask.add(params.netmask.len()) = 0; // Null terminator
|
|
||||||
}
|
}
|
||||||
|
|
||||||
IdeviceErrorCode::IdeviceSuccess
|
IdeviceErrorCode::IdeviceSuccess
|
||||||
@@ -292,23 +285,18 @@ pub unsafe extern "C" fn core_device_proxy_get_client_parameters(
|
|||||||
#[unsafe(no_mangle)]
|
#[unsafe(no_mangle)]
|
||||||
pub unsafe extern "C" fn core_device_proxy_get_server_address(
|
pub unsafe extern "C" fn core_device_proxy_get_server_address(
|
||||||
handle: *mut CoreDeviceProxyHandle,
|
handle: *mut CoreDeviceProxyHandle,
|
||||||
address: *mut u8,
|
address: *mut *mut c_char,
|
||||||
address_len: usize,
|
|
||||||
) -> IdeviceErrorCode {
|
) -> IdeviceErrorCode {
|
||||||
if handle.is_null() || address.is_null() {
|
if handle.is_null() {
|
||||||
return IdeviceErrorCode::InvalidArg;
|
return IdeviceErrorCode::InvalidArg;
|
||||||
}
|
}
|
||||||
|
|
||||||
let proxy = unsafe { &(*handle).0 };
|
let proxy = unsafe { &(*handle).0 };
|
||||||
let server_addr = &proxy.handshake.server_address;
|
|
||||||
|
|
||||||
if address_len < server_addr.len() + 1 {
|
|
||||||
return IdeviceErrorCode::BufferTooSmall;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsafe {
|
unsafe {
|
||||||
std::ptr::copy_nonoverlapping(server_addr.as_ptr(), address, server_addr.len());
|
*address = CString::new(proxy.handshake.server_address.clone())
|
||||||
*address.add(server_addr.len()) = 0; // Null terminator
|
.unwrap()
|
||||||
|
.into_raw();
|
||||||
}
|
}
|
||||||
|
|
||||||
IdeviceErrorCode::IdeviceSuccess
|
IdeviceErrorCode::IdeviceSuccess
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ pub enum IdeviceErrorCode {
|
|||||||
InvalidArgument = -36,
|
InvalidArgument = -36,
|
||||||
UnknownErrorType = -37,
|
UnknownErrorType = -37,
|
||||||
// FFI specific bindings
|
// FFI specific bindings
|
||||||
|
ServiceNotFound = -997,
|
||||||
BufferTooSmall = -998,
|
BufferTooSmall = -998,
|
||||||
InvalidString = -999,
|
InvalidString = -999,
|
||||||
InvalidArg = -1000,
|
InvalidArg = -1000,
|
||||||
|
|||||||
Reference in New Issue
Block a user