mirror of
https://github.com/jkcoxson/idevice.git
synced 2026-03-02 14:36:16 +01:00
Create concurrent TCP handle and implement RSD for non-lifetime structs
This commit is contained in:
Submodule ffi/libplist deleted from cf5897a71e
@@ -35,7 +35,7 @@ pub unsafe extern "C" fn adapter_connect(
|
||||
}
|
||||
|
||||
let adapter = unsafe { &mut (*adapter_handle).0 };
|
||||
let res = RUNTIME.block_on(async move { AdapterStream::connect(adapter, port).await });
|
||||
let res = RUNTIME.block_on(async move { adapter.connect(port).await });
|
||||
|
||||
match res {
|
||||
Ok(r) => {
|
||||
|
||||
@@ -5,7 +5,6 @@ use std::os::raw::{c_float, c_int};
|
||||
use std::ptr::{self, null_mut};
|
||||
|
||||
use idevice::core_device::AppServiceClient;
|
||||
use idevice::tcp::stream::AdapterStream;
|
||||
use idevice::{IdeviceError, ReadWrite, RsdService};
|
||||
|
||||
use crate::core_device_proxy::AdapterHandle;
|
||||
@@ -91,16 +90,17 @@ pub unsafe extern "C" fn app_service_connect_rsd(
|
||||
return ffi_err!(IdeviceError::FfiInvalidArg);
|
||||
}
|
||||
|
||||
let res: Result<AppServiceClient<AdapterStream>, IdeviceError> = RUNTIME.block_on(async move {
|
||||
let provider_ref = unsafe { &mut (*provider).0 };
|
||||
let handshake_ref = unsafe { &mut (*handshake).0 };
|
||||
let res: Result<AppServiceClient<Box<dyn ReadWrite>>, IdeviceError> =
|
||||
RUNTIME.block_on(async move {
|
||||
let provider_ref = unsafe { &mut (*provider).0 };
|
||||
let handshake_ref = unsafe { &mut (*handshake).0 };
|
||||
|
||||
AppServiceClient::connect_rsd(provider_ref, handshake_ref).await
|
||||
});
|
||||
AppServiceClient::connect_rsd(provider_ref, handshake_ref).await
|
||||
});
|
||||
|
||||
match res {
|
||||
Ok(client) => {
|
||||
let boxed = Box::new(AppServiceHandle(client.box_inner()));
|
||||
let boxed = Box::new(AppServiceHandle(client));
|
||||
unsafe { *handle = Box::into_raw(boxed) };
|
||||
null_mut()
|
||||
}
|
||||
|
||||
@@ -7,13 +7,12 @@ use std::{
|
||||
|
||||
use idevice::{
|
||||
IdeviceError, IdeviceService, core_device_proxy::CoreDeviceProxy, provider::IdeviceProvider,
|
||||
tcp::adapter::Adapter,
|
||||
};
|
||||
|
||||
use crate::{IdeviceFfiError, IdeviceHandle, RUNTIME, ffi_err, provider::IdeviceProviderHandle};
|
||||
|
||||
pub struct CoreDeviceProxyHandle(pub CoreDeviceProxy);
|
||||
pub struct AdapterHandle(pub Adapter);
|
||||
pub struct AdapterHandle(pub idevice::tcp::handle::AdapterHandle);
|
||||
|
||||
/// Automatically creates and connects to Core Device Proxy, returning a client handle
|
||||
///
|
||||
@@ -312,7 +311,7 @@ pub unsafe extern "C" fn core_device_proxy_create_tcp_adapter(
|
||||
|
||||
match result {
|
||||
Ok(adapter_obj) => {
|
||||
let boxed = Box::new(AdapterHandle(adapter_obj));
|
||||
let boxed = Box::new(AdapterHandle(adapter_obj.to_async_handle()));
|
||||
unsafe { *adapter = Box::into_raw(boxed) };
|
||||
null_mut()
|
||||
}
|
||||
|
||||
@@ -5,7 +5,6 @@ use std::os::raw::c_int;
|
||||
use std::ptr::{self, null_mut};
|
||||
|
||||
use idevice::debug_proxy::{DebugProxyClient, DebugserverCommand};
|
||||
use idevice::tcp::stream::AdapterStream;
|
||||
use idevice::{IdeviceError, ReadWrite, RsdService};
|
||||
|
||||
use crate::core_device_proxy::AdapterHandle;
|
||||
@@ -136,13 +135,14 @@ pub unsafe extern "C" fn debug_proxy_connect_rsd(
|
||||
if provider.is_null() || handshake.is_null() || handshake.is_null() {
|
||||
return ffi_err!(IdeviceError::FfiInvalidArg);
|
||||
}
|
||||
let res: Result<DebugProxyClient<AdapterStream>, IdeviceError> = RUNTIME.block_on(async move {
|
||||
let provider_ref = unsafe { &mut (*provider).0 };
|
||||
let handshake_ref = unsafe { &mut (*handshake).0 };
|
||||
let res: Result<DebugProxyClient<Box<dyn ReadWrite>>, IdeviceError> =
|
||||
RUNTIME.block_on(async move {
|
||||
let provider_ref = unsafe { &mut (*provider).0 };
|
||||
let handshake_ref = unsafe { &mut (*handshake).0 };
|
||||
|
||||
// Connect using the reference
|
||||
DebugProxyClient::connect_rsd(provider_ref, handshake_ref).await
|
||||
});
|
||||
// Connect using the reference
|
||||
DebugProxyClient::connect_rsd(provider_ref, handshake_ref).await
|
||||
});
|
||||
|
||||
match res {
|
||||
Ok(d) => {
|
||||
|
||||
@@ -6,7 +6,6 @@ use crate::core_device_proxy::AdapterHandle;
|
||||
use crate::rsd::RsdHandshakeHandle;
|
||||
use crate::{IdeviceFfiError, RUNTIME, ReadWriteOpaque, ffi_err};
|
||||
use idevice::dvt::remote_server::RemoteServerClient;
|
||||
use idevice::tcp::stream::AdapterStream;
|
||||
use idevice::{IdeviceError, ReadWrite, RsdService};
|
||||
|
||||
/// Opaque handle to a RemoteServerClient
|
||||
@@ -77,7 +76,7 @@ pub unsafe extern "C" fn remote_server_connect_rsd(
|
||||
if provider.is_null() || handshake.is_null() || handshake.is_null() {
|
||||
return ffi_err!(IdeviceError::FfiInvalidArg);
|
||||
}
|
||||
let res: Result<RemoteServerClient<AdapterStream>, IdeviceError> =
|
||||
let res: Result<RemoteServerClient<Box<dyn ReadWrite>>, IdeviceError> =
|
||||
RUNTIME.block_on(async move {
|
||||
let provider_ref = unsafe { &mut (*provider).0 };
|
||||
let handshake_ref = unsafe { &mut (*handshake).0 };
|
||||
|
||||
Reference in New Issue
Block a user