diff --git a/client/CMakeLists.txt b/client/CMakeLists.txt index c84d4a7a..50a1a59d 100644 --- a/client/CMakeLists.txt +++ b/client/CMakeLists.txt @@ -3,8 +3,8 @@ cmake_minimum_required(VERSION 3.25.0 FATAL_ERROR) set(PROJECT AmneziaVPN) project(${PROJECT}) -#set(IOS 1) -set(APPLE 1) +set(IOS 1) +#set(APPLE 1) set_property(GLOBAL PROPERTY USE_FOLDERS ON) set_property(GLOBAL PROPERTY AUTOGEN_TARGETS_FOLDER "Autogen") diff --git a/client/ios/networkextension/CMakeLists.txt b/client/ios/networkextension/CMakeLists.txt index f47ca947..2296fb0d 100644 --- a/client/ios/networkextension/CMakeLists.txt +++ b/client/ios/networkextension/CMakeLists.txt @@ -103,12 +103,12 @@ find_library(FW_LIBRESOLV libresolv.9.tbd) -# set_property(TARGET networkextension PROPERTY XCODE_EMBED_FRAMEWORKS -# "${CMAKE_CURRENT_SOURCE_DIR}/3rd/OpenVPNAdapter/build/Release-iphoneos/OpenVPNAdapter.framework" -# ) +set_property(TARGET networkextension PROPERTY XCODE_EMBED_FRAMEWORKS + "${CMAKE_CURRENT_SOURCE_DIR}/3rd/OpenVPNAdapter/build/Release-macos/OpenVPNAdapter.framework" + ) -# set(CMAKE_XCODE_ATTRIBUTE_FRAMEWORK_SEARCH_PATHS ${CMAKE_CURRENT_SOURCE_DIR}/3rd/OpenVPNAdapter/build/Release-iphoneos) -# target_link_libraries("networkextension" PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/3rd/OpenVPNAdapter/build/Release-iphoneos/OpenVPNAdapter.framework") +set(CMAKE_XCODE_ATTRIBUTE_FRAMEWORK_SEARCH_PATHS ${CMAKE_CURRENT_SOURCE_DIR}/3rd/OpenVPNAdapter/build/Release-macos) +target_link_libraries("networkextension" PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/3rd/OpenVPNAdapter/build/Release-macos/OpenVPNAdapter.framework") @@ -182,4 +182,6 @@ target_include_directories(networkextension PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) target_link_libraries(networkextension PRIVATE ${CLIENT_ROOT_DIR}/3rd-prebuilt/3rd-prebuilt/wireguard/ios/arm64/libwg-go.a) -target_link_libraries(networkextension PRIVATE ${CLIENT_ROOT_DIR}/3rd-prebuilt/3rd-prebuilt/xray/HevSocks5Tunnel.xcframework) +target_link_libraries(networkextension PRIVATE ${CLIENT_ROOT_DIR}/3rd-prebuilt/3rd-prebuilt/xray/HevSocks5Tunnel.xcframework/macos-arm64_x86_64/libhev-socks5-tunnel.a) + +target_include_directories(networkextension PRIVATE ${CLIENT_ROOT_DIR}/3rd-prebuilt/3rd-prebuilt/xray/HevSocks5Tunnel.xcframework/macos-arm64_x86_64/Headers) diff --git a/client/ios/networkextension/WireGuardNetworkExtension-Bridging-Header.h b/client/ios/networkextension/WireGuardNetworkExtension-Bridging-Header.h index 2cca0fc8..8e4a1268 100644 --- a/client/ios/networkextension/WireGuardNetworkExtension-Bridging-Header.h +++ b/client/ios/networkextension/WireGuardNetworkExtension-Bridging-Header.h @@ -19,3 +19,7 @@ bool key_from_hex(uint8_t key[WG_KEY_LEN], const char* hex); bool key_eq(const uint8_t key1[WG_KEY_LEN], const uint8_t key2[WG_KEY_LEN]); void write_msg_to_log(const char* tag, const char* msg); + +// Khai báo hàm C để Swift có thể sử dụng +void hev_socks5_tunnel_quit(void); +void hev_socks5_tunnel_main(void); \ No newline at end of file diff --git a/client/platforms/ios/HevSocksTunnel.swift b/client/platforms/ios/HevSocksTunnel.swift index a86a0758..1b914218 100644 --- a/client/platforms/ios/HevSocksTunnel.swift +++ b/client/platforms/ios/HevSocksTunnel.swift @@ -1,4 +1,5 @@ -import HevSocks5Tunnel +import Darwin +import SystemConfiguration public enum Socks5Tunnel { @@ -6,23 +7,23 @@ public enum Socks5Tunnel { var ctlInfo = ctl_info() withUnsafeMutablePointer(to: &ctlInfo.ctl_name) { $0.withMemoryRebound(to: CChar.self, capacity: MemoryLayout.size(ofValue: $0.pointee)) { - _ = strcpy($0, "com.apple.net.utun_control") + _ = strcpy($0, "com.apple.net.utun_control") // strcpy comes from Darwin } } for fd: Int32 in 0...1024 { var addr = sockaddr_ctl() var ret: Int32 = -1 - var len = socklen_t(MemoryLayout.size(ofValue: addr)) + var len = socklen_t(MemoryLayout.size(ofValue: addr)) // socklen_t comes from Darwin withUnsafeMutablePointer(to: &addr) { - $0.withMemoryRebound(to: sockaddr.self, capacity: 1) { - ret = getpeername(fd, $0, &len) + $0.withMemoryRebound(to: sockaddr.self, capacity: 1) { // sockaddr from Darwin + ret = getpeername(fd, $0, &len) // getpeername from Darwin } } - if ret != 0 || addr.sc_family != AF_SYSTEM { + if ret != 0 || addr.sc_family != AF_SYSTEM { // AF_SYSTEM from Darwin continue } if ctlInfo.ctl_id == 0 { - ret = ioctl(fd, CTLIOCGINFO, &ctlInfo) + ret = ioctl(fd, CTLIOCGINFO, &ctlInfo) // ioctl from Darwin if ret != 0 { continue } @@ -38,12 +39,12 @@ public enum Socks5Tunnel { guard let tunnelFileDescriptor = self.tunnelFileDescriptor else { return nil } - var buffer = [UInt8](repeating: 0, count: Int(IFNAMSIZ)) + var buffer = [UInt8](repeating: 0, count: Int(IFNAMSIZ)) // IFNAMSIZ from Darwin return buffer.withUnsafeMutableBufferPointer { mutableBufferPointer in guard let baseAddress = mutableBufferPointer.baseAddress else { return nil } - var ifnameSize = socklen_t(IFNAMSIZ) + var ifnameSize = socklen_t(IFNAMSIZ) // socklen_t and IFNAMSIZ from Darwin let result = getsockopt( tunnelFileDescriptor, 2 /* SYSPROTO_CONTROL */,