56 lines
1.4 KiB
Swift
56 lines
1.4 KiB
Swift
//
|
|
// NetworkSettingsConverter.swift
|
|
// NetworkExtension
|
|
//
|
|
// Created by Jett Chen on 2023/7/7.
|
|
//
|
|
|
|
import Foundation
|
|
import NetworkExtension
|
|
|
|
public struct TunCrateNetworkSettings {
|
|
let addr: Int64
|
|
let netmask: Int64
|
|
let mtu: Int32
|
|
}
|
|
|
|
extension TunCrateNetworkSettings {
|
|
var decodedIPv4Addr: String? {
|
|
return decodeIPv4(addr)
|
|
}
|
|
|
|
var decodedIPv4Netmask: String? {
|
|
return decodeIPv4(netmask)
|
|
}
|
|
|
|
var decodedMTU: Int? {
|
|
return mtu >= 0 ? Int(mtu) : nil
|
|
}
|
|
|
|
private func decodeIPv4(_ addr: Int64) -> String? {
|
|
if addr < 0 {
|
|
return nil
|
|
}
|
|
let bytes = (
|
|
UInt8((addr & 0xFF000000) >> 24),
|
|
UInt8((addr & 0x00FF0000) >> 16),
|
|
UInt8((addr & 0x0000FF00) >> 8),
|
|
UInt8(addr & 0x000000FF)
|
|
)
|
|
return "\(bytes.0).\(bytes.1).\(bytes.2).\(bytes.3)"
|
|
}
|
|
|
|
func generateNetworkSettings() -> NEPacketTunnelNetworkSettings {
|
|
let neSettings = NEPacketTunnelNetworkSettings()
|
|
|
|
if let addr = decodedIPv4Addr, let netmask = decodedIPv4Netmask {
|
|
neSettings.ipv4Settings = NEIPv4Settings(addresses: [addr], subnetMasks: [netmask])
|
|
}
|
|
if let mtuValue = decodedMTU {
|
|
neSettings.mtu = NSNumber(value: mtuValue)
|
|
}
|
|
return neSettings
|
|
}
|
|
|
|
}
|
|
|