Add rudimentary NetworkSettings generation
This commit is contained in:
parent
22e41203fb
commit
309db8085d
8 changed files with 418 additions and 10 deletions
56
Apple/NetworkExtension/NetworkSettingsConverter.swift
Normal file
56
Apple/NetworkExtension/NetworkSettingsConverter.swift
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
//
|
||||
// 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
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue