mirror of
https://github.com/tun2proxy/tun2proxy.git
synced 2025-06-21 08:30:53 +00:00
XCFramework build for apple (#93)
This commit is contained in:
parent
01a0d9164d
commit
4ab6f1a9bc
8 changed files with 85 additions and 15 deletions
|
@ -1,4 +1,4 @@
|
|||
#![cfg(target_os = "ios")]
|
||||
#![cfg(any(target_os = "ios", target_os = "macos"))]
|
||||
|
||||
use crate::{
|
||||
args::{ArgDns, ArgProxy},
|
||||
|
@ -9,8 +9,14 @@ use std::os::raw::{c_char, c_int, c_ushort};
|
|||
/// # Safety
|
||||
///
|
||||
/// Run the tun2proxy component with some arguments.
|
||||
/// Parameters:
|
||||
/// - proxy_url: the proxy url, e.g. "socks5://127.0.0.1:1080"
|
||||
/// - tun_fd: the tun file descriptor
|
||||
/// - tun_mtu: the tun mtu
|
||||
/// - dns_strategy: the dns strategy, see ArgDns enum
|
||||
/// - verbosity: the verbosity level, see ArgVerbosity enum
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn tun2proxy_run_with_fd(
|
||||
pub unsafe extern "C" fn tun2proxy_with_fd_run(
|
||||
proxy_url: *const c_char,
|
||||
tun_fd: c_int,
|
||||
tun_mtu: c_ushort,
|
||||
|
@ -33,6 +39,6 @@ pub unsafe extern "C" fn tun2proxy_run_with_fd(
|
|||
///
|
||||
/// Shutdown the tun2proxy component.
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn tun2proxy_stop() -> c_int {
|
||||
pub unsafe extern "C" fn tun2proxy_with_fd_stop() -> c_int {
|
||||
crate::mobile_api::mobile_stop()
|
||||
}
|
|
@ -13,8 +13,15 @@ static TUN_QUIT: std::sync::Mutex<Option<tokio_util::sync::CancellationToken>> =
|
|||
/// # Safety
|
||||
///
|
||||
/// Run the tun2proxy component with some arguments.
|
||||
/// Parameters:
|
||||
/// - proxy_url: the proxy url, e.g. "socks5://127.0.0.1:1080"
|
||||
/// - tun: the tun device name, e.g. "utun5"
|
||||
/// - bypass: the bypass ip, e.g. "123.45.67.89"
|
||||
/// - dns_strategy: the dns strategy, see ArgDns enum
|
||||
/// - root_privilege: whether to run with root privilege
|
||||
/// - verbosity: the verbosity level, see ArgVerbosity enum
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn tun2proxy_run_with_name(
|
||||
pub unsafe extern "C" fn tun2proxy_with_name_run(
|
||||
proxy_url: *const c_char,
|
||||
tun: *const c_char,
|
||||
bypass: *const c_char,
|
||||
|
@ -142,7 +149,7 @@ pub async fn desktop_run_async(args: Args, shutdown_token: tokio_util::sync::Can
|
|||
///
|
||||
/// Shutdown the tun2proxy component.
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn tun2proxy_stop() -> c_int {
|
||||
pub unsafe extern "C" fn tun2proxy_with_name_stop() -> c_int {
|
||||
if let Ok(lock) = TUN_QUIT.lock() {
|
||||
if let Some(shutdown_token) = lock.as_ref() {
|
||||
shutdown_token.cancel();
|
||||
|
|
|
@ -29,7 +29,11 @@ pub use desktop_api::desktop_run_async;
|
|||
#[cfg(any(target_os = "ios", target_os = "android"))]
|
||||
pub use mobile_api::{desktop_run_async, mobile_run, mobile_stop};
|
||||
|
||||
#[cfg(target_os = "macos")]
|
||||
pub use mobile_api::{mobile_run, mobile_stop};
|
||||
|
||||
mod android;
|
||||
mod apple;
|
||||
mod args;
|
||||
mod desktop_api;
|
||||
mod directions;
|
||||
|
@ -37,7 +41,6 @@ mod dns;
|
|||
mod dump_logger;
|
||||
mod error;
|
||||
mod http;
|
||||
mod ios;
|
||||
mod mobile_api;
|
||||
mod proxy_handler;
|
||||
mod session_info;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#![cfg(any(target_os = "ios", target_os = "android"))]
|
||||
#![cfg(any(target_os = "ios", target_os = "android", target_os = "macos"))]
|
||||
|
||||
use crate::Args;
|
||||
use std::os::raw::c_int;
|
||||
|
@ -7,6 +7,7 @@ static TUN_QUIT: std::sync::Mutex<Option<tokio_util::sync::CancellationToken>> =
|
|||
|
||||
/// Dummy function to make the build pass.
|
||||
#[doc(hidden)]
|
||||
#[cfg(not(target_os = "macos"))]
|
||||
pub async fn desktop_run_async(_: Args, _: tokio_util::sync::CancellationToken) -> std::io::Result<()> {
|
||||
Ok(())
|
||||
}
|
||||
|
@ -28,11 +29,13 @@ pub fn mobile_run(args: Args, tun_mtu: u16) -> c_int {
|
|||
#[cfg(unix)]
|
||||
if let Some(fd) = args.tun_fd {
|
||||
config.raw_fd(fd);
|
||||
} else {
|
||||
config.name(&args.tun);
|
||||
} else if let Some(ref tun) = args.tun {
|
||||
config.tun_name(tun);
|
||||
}
|
||||
#[cfg(windows)]
|
||||
config.name(&args.tun);
|
||||
if let Some(ref tun) = args.tun {
|
||||
config.tun_name(tun);
|
||||
}
|
||||
|
||||
let device = tun2::create_as_async(&config).map_err(std::io::Error::from)?;
|
||||
let join_handle = tokio::spawn(crate::run(device, tun_mtu, args, shutdown_token));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue