From 7221e4d9b9558130b8e92b6e996fa8b4f8746956 Mon Sep 17 00:00:00 2001 From: Finagolfin Date: Tue, 6 Oct 2026 05:40:07 +0530 Subject: [PATCH] Add Android support --- .github/workflows/main.yml | 10 +++++++--- .github/workflows/pull_request.yml | 10 +++++++--- Package.swift | 6 +++--- README.md | 2 +- .../SwiftNetwork/Connection/Connection.swift | 3 +++ .../SwiftNetwork/Context/NetworkContext.swift | 3 +++ .../Endpoint/AddressEndpoint.swift | 3 +++ .../SwiftNetwork/Endpoint/NetlinkAddress.swift | 3 +++ .../EndpointFlow/EndpointFlow.swift | 3 +++ .../EndpointFlow/EndpointFlowExtension.swift | 3 +++ .../EndpointFlow/EndpointFlowProtocols.swift | 3 +++ .../EndpointFlow/WriteRequest.swift | 3 +++ .../SwiftNetwork/Parameters/Parameters.swift | 3 +++ .../Parameters/PathParameters.swift | 3 +++ Sources/SwiftNetwork/Path/Interface.swift | 3 +++ Sources/SwiftNetwork/Path/PathProperties.swift | 3 +++ .../Protocols/BaseProtocolLinkages.swift | 3 +++ .../Protocols/BottomProtocol.swift | 3 +++ .../Protocols/BridgeProtocol.swift | 3 +++ Sources/SwiftNetwork/Protocols/Checksum.swift | 3 +++ .../Protocols/CustomIPProtocol.swift | 3 +++ .../Protocols/CustomLinkProtocol.swift | 3 +++ .../SwiftNetwork/Protocols/DemuxProtocol.swift | 3 +++ .../Protocols/ExternalProtocolLinkages.swift | 3 +++ Sources/SwiftNetwork/Protocols/Frame.swift | 3 +++ .../SwiftNetwork/Protocols/IPProtocol.swift | 3 +++ .../Protocols/ManyToManyProtocol.swift | 3 +++ .../Protocols/OneToOneProtocol.swift | 3 +++ .../Protocols/ProtocolEventManager.swift | 3 +++ .../Protocols/ProtocolInstance.swift | 5 ++++- .../Protocols/ProtocolLinkage.swift | 3 +++ .../SwiftNetwork/Protocols/ProtocolStack.swift | 3 +++ .../Protocols/ProtocolStreamHandlers.swift | 3 +++ .../Protocols/QUICConnectionProtocol.swift | 9 ++++++--- .../Protocols/QUICStreamProtocol.swift | 3 +++ .../Protocols/SocketProtocol.swift | 5 ++++- .../Protocols/SwiftTLSProtocol.swift | 5 ++++- .../SwiftNetwork/Protocols/TCPProtocol.swift | 3 +++ .../SwiftNetwork/Protocols/TopProtocol.swift | 3 +++ .../SwiftNetwork/Protocols/UDPProtocol.swift | 3 +++ Sources/SwiftNetwork/QUIC/Ack.swift | 3 +++ .../SwiftNetwork/QUIC/CongestionControl.swift | 3 +++ Sources/SwiftNetwork/QUIC/Crypto.swift | 3 +++ Sources/SwiftNetwork/QUIC/Cubic.swift | 3 +++ Sources/SwiftNetwork/QUIC/ECN.swift | 3 +++ Sources/SwiftNetwork/QUIC/FlowControl.swift | 3 +++ Sources/SwiftNetwork/QUIC/Ledbat.swift | 3 +++ Sources/SwiftNetwork/QUIC/Logger+QUIC.swift | 3 +++ Sources/SwiftNetwork/QUIC/PMTUD.swift | 3 +++ Sources/SwiftNetwork/QUIC/Pacer.swift | 3 +++ Sources/SwiftNetwork/QUIC/Packet.swift | 3 +++ Sources/SwiftNetwork/QUIC/PacketBuilder.swift | 3 +++ Sources/SwiftNetwork/QUIC/PacketFormats.swift | 3 +++ .../SwiftNetwork/QUIC/PacketNumberSpace.swift | 3 +++ Sources/SwiftNetwork/QUIC/PacketParser.swift | 3 +++ Sources/SwiftNetwork/QUIC/Prague.swift | 3 +++ Sources/SwiftNetwork/QUIC/Protector.swift | 3 +++ Sources/SwiftNetwork/QUIC/QLog.swift | 3 +++ Sources/SwiftNetwork/QUIC/QUICConnection.swift | 3 +++ .../SwiftNetwork/QUIC/QUICConnectionID.swift | 3 +++ .../SwiftNetwork/QUIC/QUICDatagramFlow.swift | 3 +++ Sources/SwiftNetwork/QUIC/QUICError.swift | 5 ++++- Sources/SwiftNetwork/QUIC/QUICFrame.swift | 3 +++ Sources/SwiftNetwork/QUIC/QUICPath.swift | 3 +++ Sources/SwiftNetwork/QUIC/QUICStream.swift | 3 +++ Sources/SwiftNetwork/QUIC/QUICStreamID.swift | 3 +++ .../SwiftNetwork/QUIC/QUICStreamState.swift | 3 +++ .../SwiftNetwork/QUIC/QUICStreamZombies.swift | 3 +++ Sources/SwiftNetwork/QUIC/QUICUtilities.swift | 5 ++++- Sources/SwiftNetwork/QUIC/RTT.swift | 3 +++ .../SwiftNetwork/QUIC/ReassemblyQueue.swift | 3 +++ Sources/SwiftNetwork/QUIC/Recovery.swift | 3 +++ Sources/SwiftNetwork/QUIC/SendItems.swift | 3 +++ Sources/SwiftNetwork/QUIC/Shorthand.swift | 3 +++ .../QUIC/StatelessResetToken.swift | 3 +++ Sources/SwiftNetwork/QUIC/Statistics.swift | 3 +++ .../SwiftNetwork/QUIC/StreamSendBuffer.swift | 3 +++ Sources/SwiftNetwork/QUIC/Timer.swift | 3 +++ .../QUIC/TransportParameters.swift | 3 +++ .../System/Darwin/DarwinResources.swift | 2 +- .../System/Linux/LinuxInterface.swift | 17 +++++++++++++++-- .../System/Linux/LinuxResources.swift | 18 +++++++++++++++--- .../SwiftNetwork/System/Linux/LinuxRoute.swift | 2 +- Sources/SwiftNetwork/System/NetworkError.swift | 3 +++ Sources/SwiftNetwork/System/System.swift | 9 ++++++--- .../System/SystemAddressFamily.swift | 10 ++++++---- Sources/SwiftNetwork/System/SystemCalls.swift | 14 ++++++++++++-- .../SwiftNetwork/System/SystemInterface.swift | 8 +++++--- Sources/SwiftNetwork/System/SystemSocket.swift | 7 ++++++- Sources/SwiftNetwork/System/SystemUUID.swift | 3 +++ Sources/SwiftNetwork/Utilities/Logging.swift | 7 +++++-- .../SwiftNetwork/Utilities/UInt64+VLE.swift | 3 +++ .../BenchmarkUtility.swift | 7 +++++-- .../HarnessProtocols.swift | 3 +++ .../TestMultiplexingProtocol.swift | 3 +++ .../TestProtocolLinkages.swift | 2 ++ Sources/Tools/IPUDPTransfer/main.swift | 3 +++ Sources/Tools/QUICHandshake/main.swift | 3 +++ Sources/Tools/QUICStreamLoad/main.swift | 3 +++ Sources/Tools/QUICTransfer/main.swift | 3 +++ Sources/Tools/SocketTransfer/main.swift | 3 +++ Tests/SwiftNetworkTests/QUICTestHarness.swift | 5 ++++- .../SwiftNetworkTests/SocketTestHarness.swift | 2 ++ .../SwiftNetworkAddressTests.swift | 3 +++ .../SwiftNetworkDemuxTests.swift | 5 ++++- .../SwiftNetworkInterfaceTests.swift | 12 +++++++----- .../SwiftNetworkQUICCIDTests.swift | 5 ++++- .../SwiftNetworkQUICECNTests.swift | 5 ++++- .../SwiftNetworkQUICEarlyDataTests.swift | 5 ++++- .../SwiftNetworkQUICHarnessTests.swift | 5 ++++- .../SwiftNetworkQUICIdleTests.swift | 5 ++++- .../SwiftNetworkQUICKeepaliveTests.swift | 5 ++++- .../SwiftNetworkQUICPacer.swift | 5 ++++- .../SwiftNetworkQUICPacketParsingTests.swift | 5 ++++- .../SwiftNetworkQUICQlogTests.swift | 9 ++++++--- .../SwiftNetworkQUICRetryTokenTests.swift | 5 ++++- .../SwiftNetworkQUICShortLHPacketTests.swift | 5 ++++- .../SwiftNetworkQUICSpinBitTests.swift | 5 ++++- .../SwiftNetworkQUICStackTests.swift | 5 ++++- .../SwiftNetworkQUICStatisticsTests.swift | 5 ++++- .../SwiftNetworkQUICUngracefulCloseTests.swift | 7 +++++-- .../SwiftNetworkQUICVersionNegotiation.swift | 5 ++++- .../SwiftNetworkSafeAccessTests.swift | 3 +++ .../SwiftNetworkSocketTests.swift | 4 +++- .../SwiftNetworkSwiftTLSRecordTests.swift | 3 +++ .../SwiftNetworkUUIDTests.swift | 2 ++ Tests/SwiftNetworkTests/TestLogger.swift | 5 ++++- 127 files changed, 462 insertions(+), 70 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 7700b51a..c72bf3df 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -15,7 +15,7 @@ jobs: uses: swiftlang/github-workflows/.github/workflows/swift_package_test.yml@0.0.15 with: swift_flags: "-Xswiftc -warnings-as-errors" - swift_nightly_flags: "--build-system native -Xswiftc -warnings-as-errors" # workaround nightly-main issue + swift_nightly_flags: "-Xswiftc -warnings-as-errors" enable_macos_checks: true macos_exclude_xcode_versions: "[{\"xcode_version\": \"swift_6.1\"}, {\"xcode_version\": \"swift_6.2\"}]" macos_build_command: bash .github/workflows/scripts/ci-macos.sh @@ -26,7 +26,9 @@ jobs: linux_swift_versions: '["nightly-6.3", "6.3"]' linux_build_command: bash .github/workflows/scripts/ci-linux.sh enable_windows_checks: false - enable_android_sdk_build: false + android_sdk_versions: '["nightly-6.4.x", "6.4"]' + enable_android_sdk_build: true + enable_android_sdk_checks: true enable_embedded_wasm_sdk_build: false enable_linux_static_sdk_build: true tests-nightly-main: @@ -40,6 +42,8 @@ jobs: linux_build_command: bash .github/workflows/scripts/ci-linux.sh enable_macos_checks: false enable_windows_checks: false - enable_android_sdk_build: false + android_sdk_versions: '["nightly-main"]' + enable_android_sdk_build: true + enable_android_sdk_checks: true enable_embedded_wasm_sdk_build: false enable_linux_static_sdk_build: true diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 40e5d7ac..5197e308 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -13,7 +13,7 @@ jobs: uses: swiftlang/github-workflows/.github/workflows/swift_package_test.yml@0.0.15 with: swift_flags: "-Xswiftc -warnings-as-errors" - swift_nightly_flags: "--build-system native -Xswiftc -warnings-as-errors" # workaround nightly-main issue + swift_nightly_flags: "-Xswiftc -warnings-as-errors" enable_macos_checks: true macos_exclude_xcode_versions: "[{\"xcode_version\": \"swift_6.1\"}, {\"xcode_version\": \"swift_6.2\"}]" macos_build_command: bash .github/workflows/scripts/ci-macos.sh @@ -24,7 +24,9 @@ jobs: linux_swift_versions: '["nightly-6.3", "6.3"]' linux_build_command: bash .github/workflows/scripts/ci-linux.sh enable_windows_checks: false - enable_android_sdk_build: false + android_sdk_versions: '["nightly-6.4.x", "6.4"]' + enable_android_sdk_build: true + enable_android_sdk_checks: true enable_embedded_wasm_sdk_build: false enable_linux_static_sdk_build: true tests-nightly-main: @@ -38,7 +40,9 @@ jobs: linux_build_command: bash .github/workflows/scripts/ci-linux.sh enable_macos_checks: false enable_windows_checks: false - enable_android_sdk_build: false + android_sdk_versions: '["nightly-main"]' + enable_android_sdk_build: true + enable_android_sdk_checks: true enable_embedded_wasm_sdk_build: false enable_linux_static_sdk_build: true soundness: diff --git a/Package.swift b/Package.swift index 3bfe1b30..fa575bf1 100644 --- a/Package.swift +++ b/Package.swift @@ -113,7 +113,7 @@ let package = Package( .target( name: "SwiftNetwork", dependencies: [ - .product(name: "Logging", package: "swift-log", condition: .when(platforms: [.linux])), + .product(name: "Logging", package: "swift-log", condition: .when(platforms: [.linux, .android])), .target(name: "SwiftNetworkLinuxShim", condition: .when(platforms: [.linux])), .product(name: "DequeModule", package: "swift-collections"), .product(name: "BasicContainers", package: "swift-collections"), @@ -138,7 +138,7 @@ let package = Package( name: "SwiftNetworkTestHarness", dependencies: [ "SwiftNetwork", - .product(name: "Logging", package: "swift-log", condition: .when(platforms: [.linux])), + .product(name: "Logging", package: "swift-log", condition: .when(platforms: [.linux, .android])), .product(name: "DequeModule", package: "swift-collections"), .product(name: "BasicContainers", package: "swift-collections"), ], @@ -151,7 +151,7 @@ let package = Package( "SwiftNetworkTestHarness", .product(name: "SwiftTLS", package: "swift-tls"), .product(name: "Crypto", package: "swift-crypto"), - .product(name: "Logging", package: "swift-log", condition: .when(platforms: [.linux])), + .product(name: "Logging", package: "swift-log", condition: .when(platforms: [.linux, .android])), ], swiftSettings: availabilityMacros + settings ), diff --git a/README.md b/README.md index bc10ce57..e1f38491 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ On macOS, iOS, and other Apple platforms, apps should use the Network.framework ## Prerequisites - [Swift 6.3 and up](https://swift.org/install) -- macOS 26.0 and up or Linux (Ubuntu 22.04+) +- macOS 26.0 and up, Linux (Ubuntu 22.04+), Android API 23+ - Xcode 26.0 and up (Apple platforms only) ## Building and Testing diff --git a/Sources/SwiftNetwork/Connection/Connection.swift b/Sources/SwiftNetwork/Connection/Connection.swift index 21865d94..33d89971 100644 --- a/Sources/SwiftNetwork/Connection/Connection.swift +++ b/Sources/SwiftNetwork/Connection/Connection.swift @@ -20,6 +20,9 @@ internal import DequeModule #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging diff --git a/Sources/SwiftNetwork/Context/NetworkContext.swift b/Sources/SwiftNetwork/Context/NetworkContext.swift index 1f2316bb..3de9d904 100644 --- a/Sources/SwiftNetwork/Context/NetworkContext.swift +++ b/Sources/SwiftNetwork/Context/NetworkContext.swift @@ -19,6 +19,9 @@ import Dispatch #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging diff --git a/Sources/SwiftNetwork/Endpoint/AddressEndpoint.swift b/Sources/SwiftNetwork/Endpoint/AddressEndpoint.swift index 1ef308c9..ebb08fb9 100644 --- a/Sources/SwiftNetwork/Endpoint/AddressEndpoint.swift +++ b/Sources/SwiftNetwork/Endpoint/AddressEndpoint.swift @@ -15,6 +15,9 @@ #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging diff --git a/Sources/SwiftNetwork/Endpoint/NetlinkAddress.swift b/Sources/SwiftNetwork/Endpoint/NetlinkAddress.swift index 743dec46..abc8a371 100644 --- a/Sources/SwiftNetwork/Endpoint/NetlinkAddress.swift +++ b/Sources/SwiftNetwork/Endpoint/NetlinkAddress.swift @@ -16,6 +16,9 @@ import Glibc internal import Logging internal import SwiftNetworkLinuxShim +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging diff --git a/Sources/SwiftNetwork/EndpointFlow/EndpointFlow.swift b/Sources/SwiftNetwork/EndpointFlow/EndpointFlow.swift index 7d18b344..355ddd1a 100644 --- a/Sources/SwiftNetwork/EndpointFlow/EndpointFlow.swift +++ b/Sources/SwiftNetwork/EndpointFlow/EndpointFlow.swift @@ -20,6 +20,9 @@ internal import DequeModule #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging diff --git a/Sources/SwiftNetwork/EndpointFlow/EndpointFlowExtension.swift b/Sources/SwiftNetwork/EndpointFlow/EndpointFlowExtension.swift index d80492ef..ef089c5d 100644 --- a/Sources/SwiftNetwork/EndpointFlow/EndpointFlowExtension.swift +++ b/Sources/SwiftNetwork/EndpointFlow/EndpointFlowExtension.swift @@ -15,6 +15,9 @@ #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging diff --git a/Sources/SwiftNetwork/EndpointFlow/EndpointFlowProtocols.swift b/Sources/SwiftNetwork/EndpointFlow/EndpointFlowProtocols.swift index 186bd5b4..ff6abc91 100644 --- a/Sources/SwiftNetwork/EndpointFlow/EndpointFlowProtocols.swift +++ b/Sources/SwiftNetwork/EndpointFlow/EndpointFlowProtocols.swift @@ -15,6 +15,9 @@ #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging diff --git a/Sources/SwiftNetwork/EndpointFlow/WriteRequest.swift b/Sources/SwiftNetwork/EndpointFlow/WriteRequest.swift index c128908e..87fb0beb 100644 --- a/Sources/SwiftNetwork/EndpointFlow/WriteRequest.swift +++ b/Sources/SwiftNetwork/EndpointFlow/WriteRequest.swift @@ -19,6 +19,9 @@ internal import SwiftSystem #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging diff --git a/Sources/SwiftNetwork/Parameters/Parameters.swift b/Sources/SwiftNetwork/Parameters/Parameters.swift index 564dccf7..b9cdeed5 100644 --- a/Sources/SwiftNetwork/Parameters/Parameters.swift +++ b/Sources/SwiftNetwork/Parameters/Parameters.swift @@ -20,6 +20,9 @@ internal import DequeModule #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging diff --git a/Sources/SwiftNetwork/Parameters/PathParameters.swift b/Sources/SwiftNetwork/Parameters/PathParameters.swift index 728322e6..90c16f73 100644 --- a/Sources/SwiftNetwork/Parameters/PathParameters.swift +++ b/Sources/SwiftNetwork/Parameters/PathParameters.swift @@ -20,6 +20,9 @@ internal import DequeModule #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging diff --git a/Sources/SwiftNetwork/Path/Interface.swift b/Sources/SwiftNetwork/Path/Interface.swift index d5767fc7..33ff37a9 100644 --- a/Sources/SwiftNetwork/Path/Interface.swift +++ b/Sources/SwiftNetwork/Path/Interface.swift @@ -15,6 +15,9 @@ #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging diff --git a/Sources/SwiftNetwork/Path/PathProperties.swift b/Sources/SwiftNetwork/Path/PathProperties.swift index 9f6eae47..0c6979e2 100644 --- a/Sources/SwiftNetwork/Path/PathProperties.swift +++ b/Sources/SwiftNetwork/Path/PathProperties.swift @@ -20,6 +20,9 @@ internal import DequeModule #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging diff --git a/Sources/SwiftNetwork/Protocols/BaseProtocolLinkages.swift b/Sources/SwiftNetwork/Protocols/BaseProtocolLinkages.swift index 8e328124..59aa93c3 100644 --- a/Sources/SwiftNetwork/Protocols/BaseProtocolLinkages.swift +++ b/Sources/SwiftNetwork/Protocols/BaseProtocolLinkages.swift @@ -23,6 +23,9 @@ #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging diff --git a/Sources/SwiftNetwork/Protocols/BottomProtocol.swift b/Sources/SwiftNetwork/Protocols/BottomProtocol.swift index e333ab05..442b7e50 100644 --- a/Sources/SwiftNetwork/Protocols/BottomProtocol.swift +++ b/Sources/SwiftNetwork/Protocols/BottomProtocol.swift @@ -15,6 +15,9 @@ #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging diff --git a/Sources/SwiftNetwork/Protocols/BridgeProtocol.swift b/Sources/SwiftNetwork/Protocols/BridgeProtocol.swift index 338e15d6..b4416415 100644 --- a/Sources/SwiftNetwork/Protocols/BridgeProtocol.swift +++ b/Sources/SwiftNetwork/Protocols/BridgeProtocol.swift @@ -15,6 +15,9 @@ #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging diff --git a/Sources/SwiftNetwork/Protocols/Checksum.swift b/Sources/SwiftNetwork/Protocols/Checksum.swift index 59f9f2ea..5a8e9295 100644 --- a/Sources/SwiftNetwork/Protocols/Checksum.swift +++ b/Sources/SwiftNetwork/Protocols/Checksum.swift @@ -15,6 +15,9 @@ #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging diff --git a/Sources/SwiftNetwork/Protocols/CustomIPProtocol.swift b/Sources/SwiftNetwork/Protocols/CustomIPProtocol.swift index 32365650..4b80385a 100644 --- a/Sources/SwiftNetwork/Protocols/CustomIPProtocol.swift +++ b/Sources/SwiftNetwork/Protocols/CustomIPProtocol.swift @@ -15,6 +15,9 @@ #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging diff --git a/Sources/SwiftNetwork/Protocols/CustomLinkProtocol.swift b/Sources/SwiftNetwork/Protocols/CustomLinkProtocol.swift index 98680a76..2dfecc23 100644 --- a/Sources/SwiftNetwork/Protocols/CustomLinkProtocol.swift +++ b/Sources/SwiftNetwork/Protocols/CustomLinkProtocol.swift @@ -15,6 +15,9 @@ #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging diff --git a/Sources/SwiftNetwork/Protocols/DemuxProtocol.swift b/Sources/SwiftNetwork/Protocols/DemuxProtocol.swift index c3771842..5b75ca3e 100644 --- a/Sources/SwiftNetwork/Protocols/DemuxProtocol.swift +++ b/Sources/SwiftNetwork/Protocols/DemuxProtocol.swift @@ -15,6 +15,9 @@ #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging diff --git a/Sources/SwiftNetwork/Protocols/ExternalProtocolLinkages.swift b/Sources/SwiftNetwork/Protocols/ExternalProtocolLinkages.swift index 84824e28..858072d6 100644 --- a/Sources/SwiftNetwork/Protocols/ExternalProtocolLinkages.swift +++ b/Sources/SwiftNetwork/Protocols/ExternalProtocolLinkages.swift @@ -15,6 +15,9 @@ #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging diff --git a/Sources/SwiftNetwork/Protocols/Frame.swift b/Sources/SwiftNetwork/Protocols/Frame.swift index ae666ab4..6dc09315 100644 --- a/Sources/SwiftNetwork/Protocols/Frame.swift +++ b/Sources/SwiftNetwork/Protocols/Frame.swift @@ -20,6 +20,9 @@ internal import DequeModule #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging diff --git a/Sources/SwiftNetwork/Protocols/IPProtocol.swift b/Sources/SwiftNetwork/Protocols/IPProtocol.swift index 4d33e2b7..528ae7e5 100644 --- a/Sources/SwiftNetwork/Protocols/IPProtocol.swift +++ b/Sources/SwiftNetwork/Protocols/IPProtocol.swift @@ -15,6 +15,9 @@ #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging diff --git a/Sources/SwiftNetwork/Protocols/ManyToManyProtocol.swift b/Sources/SwiftNetwork/Protocols/ManyToManyProtocol.swift index 99717834..14d6a8fa 100644 --- a/Sources/SwiftNetwork/Protocols/ManyToManyProtocol.swift +++ b/Sources/SwiftNetwork/Protocols/ManyToManyProtocol.swift @@ -15,6 +15,9 @@ #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging diff --git a/Sources/SwiftNetwork/Protocols/OneToOneProtocol.swift b/Sources/SwiftNetwork/Protocols/OneToOneProtocol.swift index 05be2255..46100012 100644 --- a/Sources/SwiftNetwork/Protocols/OneToOneProtocol.swift +++ b/Sources/SwiftNetwork/Protocols/OneToOneProtocol.swift @@ -15,6 +15,9 @@ #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging diff --git a/Sources/SwiftNetwork/Protocols/ProtocolEventManager.swift b/Sources/SwiftNetwork/Protocols/ProtocolEventManager.swift index 9af02a28..f2dad83d 100644 --- a/Sources/SwiftNetwork/Protocols/ProtocolEventManager.swift +++ b/Sources/SwiftNetwork/Protocols/ProtocolEventManager.swift @@ -20,6 +20,9 @@ internal import DequeModule #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging diff --git a/Sources/SwiftNetwork/Protocols/ProtocolInstance.swift b/Sources/SwiftNetwork/Protocols/ProtocolInstance.swift index 5436484f..8b5e3af0 100644 --- a/Sources/SwiftNetwork/Protocols/ProtocolInstance.swift +++ b/Sources/SwiftNetwork/Protocols/ProtocolInstance.swift @@ -20,6 +20,9 @@ internal import DequeModule #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging @@ -303,7 +306,7 @@ public struct NetworkLoggerState: ~Copyable { public func notice(_ message: @autoclosure () -> String, callingFunction: StaticString = #function) { let logPrefix = logPrefix let message = message() - #if os(Linux) + #if os(Linux) || os(Android) Logger.proto.notice("\(callingFunction) \(logPrefix) \(message)") #else Logger.proto.log("\(callingFunction) \(logPrefix) \(message)") diff --git a/Sources/SwiftNetwork/Protocols/ProtocolLinkage.swift b/Sources/SwiftNetwork/Protocols/ProtocolLinkage.swift index 8c8d0b47..da6ddca0 100644 --- a/Sources/SwiftNetwork/Protocols/ProtocolLinkage.swift +++ b/Sources/SwiftNetwork/Protocols/ProtocolLinkage.swift @@ -15,6 +15,9 @@ #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging diff --git a/Sources/SwiftNetwork/Protocols/ProtocolStack.swift b/Sources/SwiftNetwork/Protocols/ProtocolStack.swift index 81d074d1..4de7eb3d 100644 --- a/Sources/SwiftNetwork/Protocols/ProtocolStack.swift +++ b/Sources/SwiftNetwork/Protocols/ProtocolStack.swift @@ -20,6 +20,9 @@ internal import DequeModule #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging diff --git a/Sources/SwiftNetwork/Protocols/ProtocolStreamHandlers.swift b/Sources/SwiftNetwork/Protocols/ProtocolStreamHandlers.swift index 6c7f8612..b25d0bdc 100644 --- a/Sources/SwiftNetwork/Protocols/ProtocolStreamHandlers.swift +++ b/Sources/SwiftNetwork/Protocols/ProtocolStreamHandlers.swift @@ -15,6 +15,9 @@ #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging diff --git a/Sources/SwiftNetwork/Protocols/QUICConnectionProtocol.swift b/Sources/SwiftNetwork/Protocols/QUICConnectionProtocol.swift index e4aa2e6c..aa759149 100644 --- a/Sources/SwiftNetwork/Protocols/QUICConnectionProtocol.swift +++ b/Sources/SwiftNetwork/Protocols/QUICConnectionProtocol.swift @@ -15,6 +15,9 @@ #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging @@ -142,7 +145,7 @@ public struct QUICConnectionProtocol: NetworkProtocol { public var sourceConnectionID: [UInt8]? = nil public var destinationConnectionID: [UInt8]? = nil // NOTE: sessionUpdateBlock is not supported in Embedded - #if os(Linux) + #if os(Linux) || os(Android) var sessionStateUpdateBlock: (@Sendable @convention(block) ([UInt8]?, [UInt8]?) -> Void)? #elseif !NETWORK_STANDALONE && canImport(Darwin) var sessionStateUpdateBlock: (@Sendable @convention(block) (DispatchData?, DispatchData?) -> Void)? = nil @@ -662,7 +665,7 @@ public struct QUICConnectionProtocol: NetworkProtocol { } #endif - #if os(Linux) + #if os(Linux) || os(Android) func setSessionStateUpdateBlock( _ sessionStateUpdateBlock: (@Sendable @convention(block) ([UInt8]?, [UInt8]?) -> Void)?, queue: DispatchQueue @@ -688,7 +691,7 @@ public struct QUICConnectionProtocol: NetworkProtocol { return false } // NOTE: sessionUpdateBlock is not supported in Embedded - #if os(Linux) + #if os(Linux) || os(Android) let tlsBytes = Array(tlsState[tlsState.startIndex.. UInt64 { + var existing = rlimit() + if getrlimit(RLIMIT_NOFILE, &existing) == 0 { + return UInt64(existing.rlim_cur) + } + return 0 + } + #else static func getFDLimit() -> UInt64 { SwiftNetworkLinuxShim_getFDLimit() } + #endif } #endif diff --git a/Sources/SwiftNetwork/System/Linux/LinuxRoute.swift b/Sources/SwiftNetwork/System/Linux/LinuxRoute.swift index 06403f6a..24041496 100644 --- a/Sources/SwiftNetwork/System/Linux/LinuxRoute.swift +++ b/Sources/SwiftNetwork/System/Linux/LinuxRoute.swift @@ -542,7 +542,7 @@ internal enum SystemRoute { } } } -#elseif os(Linux) +#elseif os(Linux) || os(Android) internal enum SystemRoute { static func routeGetInterfaceIndex(dst: any IPAddress, scopedIndex: UInt32 = 0) throws -> UInt32 { 0 diff --git a/Sources/SwiftNetwork/System/NetworkError.swift b/Sources/SwiftNetwork/System/NetworkError.swift index e81df877..49beabb6 100644 --- a/Sources/SwiftNetwork/System/NetworkError.swift +++ b/Sources/SwiftNetwork/System/NetworkError.swift @@ -15,6 +15,9 @@ #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging diff --git a/Sources/SwiftNetwork/System/System.swift b/Sources/SwiftNetwork/System/System.swift index e1e3de93..5648d853 100644 --- a/Sources/SwiftNetwork/System/System.swift +++ b/Sources/SwiftNetwork/System/System.swift @@ -19,6 +19,9 @@ import Dispatch #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging @@ -48,7 +51,7 @@ internal struct System { Duration.milliseconds(1) / Duration.microseconds(1) ) /* microseconds per millisecond */ - #if os(Linux) || (NETWORK_STANDALONE && !NETWORK_DRIVERKIT) + #if os(Linux) || os(Android) || (NETWORK_STANDALONE && !NETWORK_DRIVERKIT) private static let timebaseNumerator: UInt64 = 0 private static let timebaseDenominator: UInt64 = 0 #else @@ -62,7 +65,7 @@ internal struct System { #endif static func now() -> UInt64 { - #if os(Linux) + #if os(Linux) || os(Android) return DispatchTime.now().uptimeNanoseconds / Time.NSEC_PER_USEC #elseif NETWORK_STANDALONE && !NETWORK_DRIVERKIT return 0 @@ -80,7 +83,7 @@ internal struct System { } static func nowAbsoluteNanoseconds() -> UInt64 { - #if os(Linux) + #if os(Linux) || os(Android) return DispatchTime.now().uptimeNanoseconds #elseif NETWORK_STANDALONE && !NETWORK_DRIVERKIT return 0 diff --git a/Sources/SwiftNetwork/System/SystemAddressFamily.swift b/Sources/SwiftNetwork/System/SystemAddressFamily.swift index 2ab48181..96a3dd4a 100644 --- a/Sources/SwiftNetwork/System/SystemAddressFamily.swift +++ b/Sources/SwiftNetwork/System/SystemAddressFamily.swift @@ -14,6 +14,8 @@ #if canImport(Glibc) import Glibc +#elseif canImport(Android) +import Android #elseif canImport(Musl) import Musl #elseif !NETWORK_STANDALONE @@ -23,13 +25,13 @@ import Darwin enum AddressFamily: UInt8, Sendable { case unspecified = 0 case ipv4 = 2 - #if os(Linux) + #if os(Linux) || os(Android) case ipv6 = 10 // AF_INET6 is 10 on Linux #else case ipv6 = 30 #endif case unix = 1 - #if os(Linux) + #if os(Linux) || os(Android) case route = 16 // AF_ROUTE is 16 on Linux #else case route = 17 @@ -40,14 +42,14 @@ enum AddressFamily: UInt8, Sendable { case 0: self = .unspecified case 2: self = .ipv4 // AF_INET6 is different across platforms - #if os(Linux) + #if os(Linux) || os(Android) case 10: self = .ipv6 #else case 30: self = .ipv6 #endif case 1: self = .unix // AF_ROUTE is different across platforms - #if os(Linux) + #if os(Linux) || os(Android) case 16: self = .route #else case 17: self = .route diff --git a/Sources/SwiftNetwork/System/SystemCalls.swift b/Sources/SwiftNetwork/System/SystemCalls.swift index c3b6486f..0d3cecc7 100644 --- a/Sources/SwiftNetwork/System/SystemCalls.swift +++ b/Sources/SwiftNetwork/System/SystemCalls.swift @@ -12,13 +12,16 @@ // //===----------------------------------------------------------------------===// -#if os(Linux) +#if os(Linux) || os(Android) #if canImport(Glibc) import Glibc +internal import SwiftNetworkLinuxShim +#elseif canImport(Android) +import Android #elseif canImport(Musl) import Musl -#endif internal import SwiftNetworkLinuxShim +#endif #elseif !NETWORK_STANDALONE import Darwin #endif @@ -42,15 +45,22 @@ let sysConnectx = connectx let sysWrite = write let sysRead = read let sysBind = bind +#if canImport(Android) +let sysRecvMsg: @convention(c) (CInt, UnsafeMutablePointer, CInt) -> ssize_t = recvmsg +let sysSendMsg: @convention(c) (CInt, UnsafePointer, CInt) -> ssize_t = sendmsg +#else let sysRecvMsg: @convention(c) (CInt, UnsafeMutablePointer?, CInt) -> ssize_t = recvmsg let sysSendMsg: @convention(c) (CInt, UnsafePointer?, CInt) -> ssize_t = sendmsg let sysIfNameToIndex: @convention(c) (UnsafePointer?) -> CUnsignedInt = if_nametoindex #endif +#endif #if os(Linux) // if_indextoname is not in the Glibc Swift interface so it's bridged from c let sysIfIndexToName: @convention(c) (CInt, UnsafeMutablePointer?) -> UnsafeMutablePointer? = SwiftNetworkLinuxShim_if_indextoname +#elseif canImport(Android) && !NETWORK_STANDALONE +// No need for this alias on Android #elseif !NETWORK_STANDALONE || NETWORK_DRIVERKIT let sysIfIndexToName: @convention(c) (UInt32, UnsafeMutablePointer?) -> UnsafeMutablePointer? = if_indextoname diff --git a/Sources/SwiftNetwork/System/SystemInterface.swift b/Sources/SwiftNetwork/System/SystemInterface.swift index 1f5c1ac6..05a748ec 100644 --- a/Sources/SwiftNetwork/System/SystemInterface.swift +++ b/Sources/SwiftNetwork/System/SystemInterface.swift @@ -12,9 +12,11 @@ // //===----------------------------------------------------------------------===// -#if os(Linux) +#if os(Linux) || os(Android) #if canImport(Glibc) import Glibc +#elseif canImport(Android) +import Android #elseif canImport(Musl) import Musl #endif @@ -51,7 +53,7 @@ extension System { name: String, interfaceType: InterfaceType ) throws -> InterfaceSubtype { - #if os(Linux) + #if os(Linux) || os(Android) return SystemInterface.interfaceGetInterfaceSubType(interfaceType: interfaceType) #else return try SystemInterface.interfaceGetInterfaceSubType(socket: socket, name: name) @@ -68,7 +70,7 @@ extension System { #if os(Linux) return try SystemInterface.if_nametoindex(name) #elseif !NETWORK_STANDALONE || NETWORK_DRIVERKIT - // Darwin just has if_nametoindex exposed + // Darwin and Android just have if_nametoindex exposed. let index = if_nametoindex(name) guard index > 0 else { throw NetworkError.posix(ENOENT) diff --git a/Sources/SwiftNetwork/System/SystemSocket.swift b/Sources/SwiftNetwork/System/SystemSocket.swift index 92aa68c9..50568a62 100644 --- a/Sources/SwiftNetwork/System/SystemSocket.swift +++ b/Sources/SwiftNetwork/System/SystemSocket.swift @@ -15,6 +15,9 @@ #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging @@ -365,7 +368,7 @@ class SystemSocket { /// Set TCP_NOTSENT_LOWAT — reduce send-side buffering for latency-sensitive /// flows. Portable (Darwin and Linux both define TCP_NOTSENT_LOWAT). public func setNotSentLowWatermark(_ bytes: UInt32) throws(NetworkError) { - #if canImport(Darwin) || canImport(Glibc) + #if canImport(Darwin) || canImport(Glibc) || canImport(Android) try setSocketOption(level: CInt(IPPROTO_TCP), name: TCP_NOTSENT_LOWAT, value: CInt(bytes)) #else throw NetworkError.posix(ENOTSUP) @@ -443,6 +446,8 @@ extension IPAddress { sockaddr6.sin6_addr.__in6_u.__u6_addr32 = v6Address.address #elseif canImport(Musl) sockaddr6.sin6_addr.__in6_union.__s6_addr32 = v6Address.address + #elseif canImport(Android) + sockaddr6.sin6_addr.in6_u.u6_addr32 = v6Address.address #elseif canImport(Darwin) sockaddr6.sin6_len = UInt8(MemoryLayout.size) sockaddr6.sin6_addr.__u6_addr.__u6_addr32 = v6Address.address diff --git a/Sources/SwiftNetwork/System/SystemUUID.swift b/Sources/SwiftNetwork/System/SystemUUID.swift index df6704fd..0c05bf50 100644 --- a/Sources/SwiftNetwork/System/SystemUUID.swift +++ b/Sources/SwiftNetwork/System/SystemUUID.swift @@ -15,6 +15,9 @@ #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging diff --git a/Sources/SwiftNetwork/Utilities/Logging.swift b/Sources/SwiftNetwork/Utilities/Logging.swift index 96312631..5ed0fec9 100644 --- a/Sources/SwiftNetwork/Utilities/Logging.swift +++ b/Sources/SwiftNetwork/Utilities/Logging.swift @@ -15,6 +15,9 @@ #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging @@ -22,7 +25,7 @@ internal import Logging internal import os #endif -#if os(Linux) || (NETWORK_EMBEDDED && !NETWORK_DRIVERKIT) +#if os(Linux) || os(Android) || (NETWORK_EMBEDDED && !NETWORK_DRIVERKIT) extension Logger { #if DisableDebugLogging @@ -107,7 +110,7 @@ extension Logger { // `DisableErrorLogging` and `DisableDebugLogging` empty the body and switch the helper to // `@inline(always)`, so a disabled level leaves nothing at all behind. -#if os(Linux) || (NETWORK_EMBEDDED && !NETWORK_DRIVERKIT) || canImport(os) || NETWORK_DRIVERKIT +#if os(Linux) || os(Android) || (NETWORK_EMBEDDED && !NETWORK_DRIVERKIT) || canImport(os) || NETWORK_DRIVERKIT #if DisableErrorLogging @inline(always) #else diff --git a/Sources/SwiftNetwork/Utilities/UInt64+VLE.swift b/Sources/SwiftNetwork/Utilities/UInt64+VLE.swift index 06381067..f9a98fba 100644 --- a/Sources/SwiftNetwork/Utilities/UInt64+VLE.swift +++ b/Sources/SwiftNetwork/Utilities/UInt64+VLE.swift @@ -15,6 +15,9 @@ #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging diff --git a/Sources/SwiftNetworkBenchmarks/BenchmarkUtility.swift b/Sources/SwiftNetworkBenchmarks/BenchmarkUtility.swift index 6d68e6c1..33674860 100644 --- a/Sources/SwiftNetworkBenchmarks/BenchmarkUtility.swift +++ b/Sources/SwiftNetworkBenchmarks/BenchmarkUtility.swift @@ -27,6 +27,9 @@ internal import Crypto #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging @@ -308,11 +311,11 @@ public final class QUICBenchmarkUtility { #endif @_spi(ProtocolProvider) -#if !(os(Linux) || NETWORK_EMBEDDED) +#if !(os(Linux) || os(Android) || NETWORK_EMBEDDED) @available(macOS 11, iOS 14, tvOS 14, watchOS 7, *) #endif public struct LoggingHandle: CustomStringConvertible { - #if os(Linux) || NETWORK_EMBEDDED + #if os(Linux) || os(Android) || NETWORK_EMBEDDED let logger = Logger(label: "com.apple.network.benchmarks") #else #if canImport(os) diff --git a/Sources/SwiftNetworkTestHarness/HarnessProtocols.swift b/Sources/SwiftNetworkTestHarness/HarnessProtocols.swift index f644f42a..d9f27c51 100644 --- a/Sources/SwiftNetworkTestHarness/HarnessProtocols.swift +++ b/Sources/SwiftNetworkTestHarness/HarnessProtocols.swift @@ -20,6 +20,9 @@ internal import DequeModule #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging diff --git a/Sources/SwiftNetworkTestHarness/TestMultiplexingProtocol.swift b/Sources/SwiftNetworkTestHarness/TestMultiplexingProtocol.swift index 67745db9..0e525906 100644 --- a/Sources/SwiftNetworkTestHarness/TestMultiplexingProtocol.swift +++ b/Sources/SwiftNetworkTestHarness/TestMultiplexingProtocol.swift @@ -23,6 +23,9 @@ #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging diff --git a/Sources/SwiftNetworkTestHarness/TestProtocolLinkages.swift b/Sources/SwiftNetworkTestHarness/TestProtocolLinkages.swift index 5c6c97bf..4084cf2d 100644 --- a/Sources/SwiftNetworkTestHarness/TestProtocolLinkages.swift +++ b/Sources/SwiftNetworkTestHarness/TestProtocolLinkages.swift @@ -22,6 +22,8 @@ #if canImport(Glibc) import Glibc +#elseif canImport(Android) +import Android #elseif canImport(Musl) import Musl #elseif canImport(os) diff --git a/Sources/Tools/IPUDPTransfer/main.swift b/Sources/Tools/IPUDPTransfer/main.swift index 895aa6f7..d69c0d92 100644 --- a/Sources/Tools/IPUDPTransfer/main.swift +++ b/Sources/Tools/IPUDPTransfer/main.swift @@ -22,6 +22,9 @@ import Dispatch #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging diff --git a/Sources/Tools/QUICHandshake/main.swift b/Sources/Tools/QUICHandshake/main.swift index 0810db8f..c4b9d80f 100644 --- a/Sources/Tools/QUICHandshake/main.swift +++ b/Sources/Tools/QUICHandshake/main.swift @@ -22,6 +22,9 @@ import Dispatch #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging diff --git a/Sources/Tools/QUICStreamLoad/main.swift b/Sources/Tools/QUICStreamLoad/main.swift index 1e65a83b..4d4a0c34 100644 --- a/Sources/Tools/QUICStreamLoad/main.swift +++ b/Sources/Tools/QUICStreamLoad/main.swift @@ -22,6 +22,9 @@ import Dispatch #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging diff --git a/Sources/Tools/QUICTransfer/main.swift b/Sources/Tools/QUICTransfer/main.swift index 5b58155e..8352df06 100644 --- a/Sources/Tools/QUICTransfer/main.swift +++ b/Sources/Tools/QUICTransfer/main.swift @@ -22,6 +22,9 @@ import Dispatch #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging diff --git a/Sources/Tools/SocketTransfer/main.swift b/Sources/Tools/SocketTransfer/main.swift index 3d796143..b07dc403 100644 --- a/Sources/Tools/SocketTransfer/main.swift +++ b/Sources/Tools/SocketTransfer/main.swift @@ -19,6 +19,9 @@ import Dispatch #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging diff --git a/Tests/SwiftNetworkTests/QUICTestHarness.swift b/Tests/SwiftNetworkTests/QUICTestHarness.swift index ca58b88f..03f4a0f4 100644 --- a/Tests/SwiftNetworkTests/QUICTestHarness.swift +++ b/Tests/SwiftNetworkTests/QUICTestHarness.swift @@ -14,7 +14,7 @@ import XCTest -#if !targetEnvironment(simulator) && (os(iOS) || os(macOS) || os(Linux)) +#if !targetEnvironment(simulator) && (os(iOS) || os(macOS) || os(Linux) || os(Android)) #if canImport(SwiftNetwork) @_spi(Essentials) @_spi(ProtocolProvider) @testable import SwiftNetwork @@ -43,6 +43,9 @@ import Crypto #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging diff --git a/Tests/SwiftNetworkTests/SocketTestHarness.swift b/Tests/SwiftNetworkTests/SocketTestHarness.swift index 96dc89aa..98c42af5 100644 --- a/Tests/SwiftNetworkTests/SocketTestHarness.swift +++ b/Tests/SwiftNetworkTests/SocketTestHarness.swift @@ -16,6 +16,8 @@ import XCTest #if canImport(Glibc) import Glibc +#elseif canImport(Android) +import Android #elseif canImport(Darwin) internal import Darwin #endif diff --git a/Tests/SwiftNetworkTests/SwiftNetworkAddressTests.swift b/Tests/SwiftNetworkTests/SwiftNetworkAddressTests.swift index 6ea1525e..394595dc 100644 --- a/Tests/SwiftNetworkTests/SwiftNetworkAddressTests.swift +++ b/Tests/SwiftNetworkTests/SwiftNetworkAddressTests.swift @@ -13,6 +13,9 @@ //===----------------------------------------------------------------------===// import XCTest +#if canImport(Android) +import Android +#endif @_spi(Essentials) @_spi(ProtocolProvider) @testable import SwiftNetwork @available(Network 0.1.0, *) diff --git a/Tests/SwiftNetworkTests/SwiftNetworkDemuxTests.swift b/Tests/SwiftNetworkTests/SwiftNetworkDemuxTests.swift index 1c62b650..4ecdbe87 100644 --- a/Tests/SwiftNetworkTests/SwiftNetworkDemuxTests.swift +++ b/Tests/SwiftNetworkTests/SwiftNetworkDemuxTests.swift @@ -14,7 +14,7 @@ import XCTest -#if !targetEnvironment(simulator) && (os(iOS) || os(macOS) || os(Linux)) +#if !targetEnvironment(simulator) && (os(iOS) || os(macOS) || os(Linux) || os(Android)) #if canImport(SwiftNetwork) @_spi(Essentials) @_spi(ProtocolProvider) @testable import SwiftNetwork @@ -29,6 +29,9 @@ import XCTest #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging diff --git a/Tests/SwiftNetworkTests/SwiftNetworkInterfaceTests.swift b/Tests/SwiftNetworkTests/SwiftNetworkInterfaceTests.swift index 76f3c15f..f8a379ab 100644 --- a/Tests/SwiftNetworkTests/SwiftNetworkInterfaceTests.swift +++ b/Tests/SwiftNetworkTests/SwiftNetworkInterfaceTests.swift @@ -17,6 +17,8 @@ import XCTest #if canImport(Glibc) import Glibc +#elseif canImport(Android) +import Android #elseif canImport(Musl) import Musl #endif @@ -32,7 +34,7 @@ final class SwiftNetworkInterfaceTests: NetTestCase { func testCreateInterfaceByValidIndex() throws { var name = "lo0" var mtu = 16384 - #if os(Linux) + #if os(Linux) || os(Android) name = "lo" mtu = 65536 #endif @@ -47,7 +49,7 @@ final class SwiftNetworkInterfaceTests: NetTestCase { func testCreateInterfaceByValidIndexAndName() throws { var name = "lo0" - #if os(Linux) + #if os(Linux) || os(Android) name = "lo" #endif let interface = try Interface(index: 1, name: name) @@ -115,7 +117,7 @@ final class SwiftNetworkInterfaceTests: NetTestCase { } private static var loopbackInterfaceName: String { - #if os(Linux) + #if os(Linux) || os(Android) "lo" #else "lo0" @@ -124,7 +126,7 @@ final class SwiftNetworkInterfaceTests: NetTestCase { func testCompareTwoInterfaces() throws { var name = "lo0" - #if os(Linux) + #if os(Linux) || os(Android) name = "lo" #endif let interfaceByIndex = try Interface(index: 1) @@ -149,7 +151,7 @@ final class SwiftNetworkInterfaceTests: NetTestCase { } func testRouteGetInterfaceIndex() throws { - #if os(Linux) && !NETLINK_ENABLED + #if (os(Linux) || os(Android)) && !NETLINK_ENABLED try XCTSkipIf(true) #else // Very basic localhost test diff --git a/Tests/SwiftNetworkTests/SwiftNetworkQUICCIDTests.swift b/Tests/SwiftNetworkTests/SwiftNetworkQUICCIDTests.swift index fafabc6f..d97d4b23 100644 --- a/Tests/SwiftNetworkTests/SwiftNetworkQUICCIDTests.swift +++ b/Tests/SwiftNetworkTests/SwiftNetworkQUICCIDTests.swift @@ -14,7 +14,7 @@ import XCTest -#if !targetEnvironment(simulator) && (os(iOS) || os(macOS) || os(Linux)) +#if !targetEnvironment(simulator) && (os(iOS) || os(macOS) || os(Linux) || os(Android)) #if canImport(SwiftNetwork) @_spi(Essentials) @_spi(ProtocolProvider) @testable import SwiftNetwork @@ -43,6 +43,9 @@ import Crypto #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging diff --git a/Tests/SwiftNetworkTests/SwiftNetworkQUICECNTests.swift b/Tests/SwiftNetworkTests/SwiftNetworkQUICECNTests.swift index 4ad49f4f..79b554eb 100644 --- a/Tests/SwiftNetworkTests/SwiftNetworkQUICECNTests.swift +++ b/Tests/SwiftNetworkTests/SwiftNetworkQUICECNTests.swift @@ -14,7 +14,7 @@ import XCTest -#if !targetEnvironment(simulator) && (os(iOS) || os(macOS) || os(Linux)) +#if !targetEnvironment(simulator) && (os(iOS) || os(macOS) || os(Linux) || os(Android)) #if canImport(SwiftNetwork) @_spi(Essentials) @_spi(ProtocolProvider) @testable import SwiftNetwork @@ -43,6 +43,9 @@ import Crypto #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging diff --git a/Tests/SwiftNetworkTests/SwiftNetworkQUICEarlyDataTests.swift b/Tests/SwiftNetworkTests/SwiftNetworkQUICEarlyDataTests.swift index fa697410..c596d918 100644 --- a/Tests/SwiftNetworkTests/SwiftNetworkQUICEarlyDataTests.swift +++ b/Tests/SwiftNetworkTests/SwiftNetworkQUICEarlyDataTests.swift @@ -14,7 +14,7 @@ import XCTest -#if !targetEnvironment(simulator) && (os(iOS) || os(macOS) || os(Linux)) +#if !targetEnvironment(simulator) && (os(iOS) || os(macOS) || os(Linux) || os(Android)) #if canImport(SwiftNetwork) @_spi(Essentials) @_spi(ProtocolProvider) @testable import SwiftNetwork @@ -43,6 +43,9 @@ import Crypto #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging diff --git a/Tests/SwiftNetworkTests/SwiftNetworkQUICHarnessTests.swift b/Tests/SwiftNetworkTests/SwiftNetworkQUICHarnessTests.swift index fcffe0ce..bcb3dd9b 100644 --- a/Tests/SwiftNetworkTests/SwiftNetworkQUICHarnessTests.swift +++ b/Tests/SwiftNetworkTests/SwiftNetworkQUICHarnessTests.swift @@ -15,7 +15,7 @@ import Synchronization import XCTest -#if !targetEnvironment(simulator) && (os(iOS) || os(macOS) || os(Linux)) +#if !targetEnvironment(simulator) && (os(iOS) || os(macOS) || os(Linux) || os(Android)) #if canImport(SwiftNetwork) @_spi(Essentials) @_spi(ProtocolProvider) @testable import SwiftNetwork @@ -44,6 +44,9 @@ import Crypto #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging diff --git a/Tests/SwiftNetworkTests/SwiftNetworkQUICIdleTests.swift b/Tests/SwiftNetworkTests/SwiftNetworkQUICIdleTests.swift index 265f274f..9f7347d6 100644 --- a/Tests/SwiftNetworkTests/SwiftNetworkQUICIdleTests.swift +++ b/Tests/SwiftNetworkTests/SwiftNetworkQUICIdleTests.swift @@ -14,7 +14,7 @@ import XCTest -#if !targetEnvironment(simulator) && (os(iOS) || os(macOS) || os(Linux)) +#if !targetEnvironment(simulator) && (os(iOS) || os(macOS) || os(Linux) || os(Android)) #if canImport(SwiftNetwork) @_spi(Essentials) @_spi(ProtocolProvider) @testable import SwiftNetwork @@ -43,6 +43,9 @@ import Crypto #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging diff --git a/Tests/SwiftNetworkTests/SwiftNetworkQUICKeepaliveTests.swift b/Tests/SwiftNetworkTests/SwiftNetworkQUICKeepaliveTests.swift index 1a99fa3d..4bfbb06f 100644 --- a/Tests/SwiftNetworkTests/SwiftNetworkQUICKeepaliveTests.swift +++ b/Tests/SwiftNetworkTests/SwiftNetworkQUICKeepaliveTests.swift @@ -14,7 +14,7 @@ import XCTest -#if !targetEnvironment(simulator) && (os(iOS) || os(macOS) || os(Linux)) +#if !targetEnvironment(simulator) && (os(iOS) || os(macOS) || os(Linux) || os(Android)) #if canImport(SwiftNetwork) @_spi(Essentials) @_spi(ProtocolProvider) @testable import SwiftNetwork @@ -43,6 +43,9 @@ import Crypto #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging diff --git a/Tests/SwiftNetworkTests/SwiftNetworkQUICPacer.swift b/Tests/SwiftNetworkTests/SwiftNetworkQUICPacer.swift index 2d774784..de0a460b 100644 --- a/Tests/SwiftNetworkTests/SwiftNetworkQUICPacer.swift +++ b/Tests/SwiftNetworkTests/SwiftNetworkQUICPacer.swift @@ -14,7 +14,7 @@ import XCTest -#if !targetEnvironment(simulator) && (os(iOS) || os(macOS) || os(Linux)) +#if !targetEnvironment(simulator) && (os(iOS) || os(macOS) || os(Linux) || os(Android)) #if canImport(SwiftNetwork) @_spi(Essentials) @_spi(ProtocolProvider) @testable import SwiftNetwork @@ -43,6 +43,9 @@ import Crypto #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging diff --git a/Tests/SwiftNetworkTests/SwiftNetworkQUICPacketParsingTests.swift b/Tests/SwiftNetworkTests/SwiftNetworkQUICPacketParsingTests.swift index 6b647ee8..ae14a74d 100644 --- a/Tests/SwiftNetworkTests/SwiftNetworkQUICPacketParsingTests.swift +++ b/Tests/SwiftNetworkTests/SwiftNetworkQUICPacketParsingTests.swift @@ -13,7 +13,7 @@ //===----------------------------------------------------------------------===// import XCTest -#if !targetEnvironment(simulator) && (os(iOS) || os(macOS) || os(Linux)) +#if !targetEnvironment(simulator) && (os(iOS) || os(macOS) || os(Linux) || os(Android)) #if canImport(SwiftNetwork) @_spi(Essentials) @_spi(ProtocolProvider) @testable import SwiftNetwork @@ -42,6 +42,9 @@ import Crypto #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging diff --git a/Tests/SwiftNetworkTests/SwiftNetworkQUICQlogTests.swift b/Tests/SwiftNetworkTests/SwiftNetworkQUICQlogTests.swift index 47567ff8..77be97d1 100644 --- a/Tests/SwiftNetworkTests/SwiftNetworkQUICQlogTests.swift +++ b/Tests/SwiftNetworkTests/SwiftNetworkQUICQlogTests.swift @@ -14,7 +14,7 @@ import XCTest -#if !targetEnvironment(simulator) && (os(iOS) || os(macOS) || os(Linux)) +#if !targetEnvironment(simulator) && (os(iOS) || os(macOS) || os(Linux) || os(Android)) #if canImport(SwiftNetwork) @_spi(Essentials) @_spi(ProtocolProvider) @testable import SwiftNetwork @@ -34,15 +34,18 @@ import XCTest #endif #endif -#if os(Linux) +#if canImport(Crypto) import Crypto -#else +#elseif canImport(CryptoKit) import CryptoKit #endif #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging diff --git a/Tests/SwiftNetworkTests/SwiftNetworkQUICRetryTokenTests.swift b/Tests/SwiftNetworkTests/SwiftNetworkQUICRetryTokenTests.swift index 187781a4..61a7db75 100644 --- a/Tests/SwiftNetworkTests/SwiftNetworkQUICRetryTokenTests.swift +++ b/Tests/SwiftNetworkTests/SwiftNetworkQUICRetryTokenTests.swift @@ -14,7 +14,7 @@ import XCTest -#if !targetEnvironment(simulator) && (os(iOS) || os(macOS) || os(Linux)) +#if !targetEnvironment(simulator) && (os(iOS) || os(macOS) || os(Linux) || os(Android)) #if canImport(SwiftNetwork) @_spi(Essentials) @_spi(ProtocolProvider) @testable import SwiftNetwork @@ -43,6 +43,9 @@ import Crypto #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging diff --git a/Tests/SwiftNetworkTests/SwiftNetworkQUICShortLHPacketTests.swift b/Tests/SwiftNetworkTests/SwiftNetworkQUICShortLHPacketTests.swift index daef3127..e34f9954 100644 --- a/Tests/SwiftNetworkTests/SwiftNetworkQUICShortLHPacketTests.swift +++ b/Tests/SwiftNetworkTests/SwiftNetworkQUICShortLHPacketTests.swift @@ -14,7 +14,7 @@ import XCTest -#if !targetEnvironment(simulator) && (os(iOS) || os(macOS) || os(Linux)) +#if !targetEnvironment(simulator) && (os(iOS) || os(macOS) || os(Linux) || os(Android)) #if canImport(SwiftNetwork) @_spi(Essentials) @_spi(ProtocolProvider) @testable import SwiftNetwork @@ -43,6 +43,9 @@ import Crypto #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging diff --git a/Tests/SwiftNetworkTests/SwiftNetworkQUICSpinBitTests.swift b/Tests/SwiftNetworkTests/SwiftNetworkQUICSpinBitTests.swift index 6cfcd515..71198cdc 100644 --- a/Tests/SwiftNetworkTests/SwiftNetworkQUICSpinBitTests.swift +++ b/Tests/SwiftNetworkTests/SwiftNetworkQUICSpinBitTests.swift @@ -15,7 +15,7 @@ import Synchronization import XCTest -#if !targetEnvironment(simulator) && (os(iOS) || os(macOS) || os(Linux)) +#if !targetEnvironment(simulator) && (os(iOS) || os(macOS) || os(Linux) || os(Android)) #if canImport(SwiftNetwork) @_spi(Essentials) @_spi(ProtocolProvider) @testable import SwiftNetwork @@ -44,6 +44,9 @@ import Crypto #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging diff --git a/Tests/SwiftNetworkTests/SwiftNetworkQUICStackTests.swift b/Tests/SwiftNetworkTests/SwiftNetworkQUICStackTests.swift index d1c08865..21d074fd 100644 --- a/Tests/SwiftNetworkTests/SwiftNetworkQUICStackTests.swift +++ b/Tests/SwiftNetworkTests/SwiftNetworkQUICStackTests.swift @@ -14,7 +14,7 @@ import XCTest -#if !targetEnvironment(simulator) && (os(iOS) || os(macOS) || os(Linux)) +#if !targetEnvironment(simulator) && (os(iOS) || os(macOS) || os(Linux) || os(Android)) #if canImport(SwiftNetwork) @_spi(Essentials) @_spi(ProtocolProvider) @testable import SwiftNetwork @@ -43,6 +43,9 @@ import Crypto #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging diff --git a/Tests/SwiftNetworkTests/SwiftNetworkQUICStatisticsTests.swift b/Tests/SwiftNetworkTests/SwiftNetworkQUICStatisticsTests.swift index 27b57d7c..e2566852 100644 --- a/Tests/SwiftNetworkTests/SwiftNetworkQUICStatisticsTests.swift +++ b/Tests/SwiftNetworkTests/SwiftNetworkQUICStatisticsTests.swift @@ -14,7 +14,7 @@ import XCTest -#if !targetEnvironment(simulator) && (os(iOS) || os(macOS) || os(Linux)) +#if !targetEnvironment(simulator) && (os(iOS) || os(macOS) || os(Linux) || os(Android)) #if canImport(SwiftNetwork) @_spi(Essentials) @_spi(ProtocolProvider) @testable import SwiftNetwork @@ -43,6 +43,9 @@ import Crypto #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging diff --git a/Tests/SwiftNetworkTests/SwiftNetworkQUICUngracefulCloseTests.swift b/Tests/SwiftNetworkTests/SwiftNetworkQUICUngracefulCloseTests.swift index dbc76466..5bb5928f 100644 --- a/Tests/SwiftNetworkTests/SwiftNetworkQUICUngracefulCloseTests.swift +++ b/Tests/SwiftNetworkTests/SwiftNetworkQUICUngracefulCloseTests.swift @@ -14,7 +14,7 @@ import XCTest -#if !targetEnvironment(simulator) && (os(iOS) || os(macOS) || os(Linux)) +#if !targetEnvironment(simulator) && (os(iOS) || os(macOS) || os(Linux) || os(Android)) #if canImport(SwiftNetwork) @_spi(Essentials) @_spi(ProtocolProvider) @testable import SwiftNetwork @@ -47,6 +47,9 @@ import Dispatch #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging @@ -70,7 +73,7 @@ final class SwiftNetworkQUICUngracefulCloseTests: NetTestCase { ) } - #if !os(Linux) && canImport(Dispatch) + #if !os(Linux) && !os(Android) && canImport(Dispatch) func testQUICConcurrentClientConnectionTimeouts() throws { // Drop 100% of packets from the client to make the server unreachable // Times out 100 clients connection close to the same time diff --git a/Tests/SwiftNetworkTests/SwiftNetworkQUICVersionNegotiation.swift b/Tests/SwiftNetworkTests/SwiftNetworkQUICVersionNegotiation.swift index 5ec33ec5..a7f808bd 100644 --- a/Tests/SwiftNetworkTests/SwiftNetworkQUICVersionNegotiation.swift +++ b/Tests/SwiftNetworkTests/SwiftNetworkQUICVersionNegotiation.swift @@ -14,7 +14,7 @@ import XCTest -#if !targetEnvironment(simulator) && (os(iOS) || os(macOS) || os(Linux)) +#if !targetEnvironment(simulator) && (os(iOS) || os(macOS) || os(Linux) || os(Android)) #if canImport(SwiftNetwork) @_spi(Essentials) @_spi(ProtocolProvider) @testable import SwiftNetwork @@ -43,6 +43,9 @@ import Crypto #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging diff --git a/Tests/SwiftNetworkTests/SwiftNetworkSafeAccessTests.swift b/Tests/SwiftNetworkTests/SwiftNetworkSafeAccessTests.swift index dfe07aff..b7b3a181 100644 --- a/Tests/SwiftNetworkTests/SwiftNetworkSafeAccessTests.swift +++ b/Tests/SwiftNetworkTests/SwiftNetworkSafeAccessTests.swift @@ -13,6 +13,9 @@ //===----------------------------------------------------------------------===// import XCTest +#if canImport(Android) +import Android +#endif @testable import SwiftNetwork diff --git a/Tests/SwiftNetworkTests/SwiftNetworkSocketTests.swift b/Tests/SwiftNetworkTests/SwiftNetworkSocketTests.swift index 948cd4d4..50cba01c 100644 --- a/Tests/SwiftNetworkTests/SwiftNetworkSocketTests.swift +++ b/Tests/SwiftNetworkTests/SwiftNetworkSocketTests.swift @@ -16,6 +16,8 @@ import XCTest #if canImport(Glibc) import Glibc +#elseif canImport(Android) +import Android #elseif canImport(Darwin) internal import Darwin #endif @@ -725,7 +727,7 @@ final class SwiftNetworkSocketTests: NetTestCase { private static func processCPUSeconds() -> Double { var usage = rusage() - #if canImport(Darwin) + #if canImport(Darwin) || canImport(Android) getrusage(RUSAGE_SELF, &usage) #else getrusage(RUSAGE_SELF.rawValue, &usage) diff --git a/Tests/SwiftNetworkTests/SwiftNetworkSwiftTLSRecordTests.swift b/Tests/SwiftNetworkTests/SwiftNetworkSwiftTLSRecordTests.swift index 956e0e55..9955b94d 100644 --- a/Tests/SwiftNetworkTests/SwiftNetworkSwiftTLSRecordTests.swift +++ b/Tests/SwiftNetworkTests/SwiftNetworkSwiftTLSRecordTests.swift @@ -38,6 +38,9 @@ import Crypto #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(os) internal import os #endif diff --git a/Tests/SwiftNetworkTests/SwiftNetworkUUIDTests.swift b/Tests/SwiftNetworkTests/SwiftNetworkUUIDTests.swift index 291b8fea..7f77884c 100644 --- a/Tests/SwiftNetworkTests/SwiftNetworkUUIDTests.swift +++ b/Tests/SwiftNetworkTests/SwiftNetworkUUIDTests.swift @@ -31,6 +31,8 @@ import Foundation #if canImport(Glibc) import Glibc internal import SwiftNetworkLinuxShim +#elseif canImport(Android) +import Android #elseif canImport(Musl) import Musl internal import SwiftNetworkLinuxShim diff --git a/Tests/SwiftNetworkTests/TestLogger.swift b/Tests/SwiftNetworkTests/TestLogger.swift index 79466852..8af7ece2 100644 --- a/Tests/SwiftNetworkTests/TestLogger.swift +++ b/Tests/SwiftNetworkTests/TestLogger.swift @@ -15,6 +15,9 @@ #if canImport(Glibc) import Glibc internal import Logging +#elseif canImport(Android) +import Android +internal import Logging #elseif canImport(Musl) import Musl internal import Logging @@ -23,7 +26,7 @@ internal import os #endif extension Logger { - #if os(Linux) || NETWORK_EMBEDDED + #if os(Linux) || os(Android) || NETWORK_EMBEDDED // Logging for Linux static let test = Logger(label: "com.apple.network.test") #else