mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-05 21:10:21 +00:00
refactor(shared): dedupe common OpenClawKit helpers
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
import Darwin
|
||||
import Foundation
|
||||
|
||||
public enum NetworkInterfaceIPv4 {
|
||||
public struct AddressEntry: Sendable {
|
||||
public let name: String
|
||||
public let ip: String
|
||||
}
|
||||
|
||||
public static func addresses() -> [AddressEntry] {
|
||||
var addrList: UnsafeMutablePointer<ifaddrs>?
|
||||
guard getifaddrs(&addrList) == 0, let first = addrList else { return [] }
|
||||
defer { freeifaddrs(addrList) }
|
||||
|
||||
var entries: [AddressEntry] = []
|
||||
for ptr in sequence(first: first, next: { $0.pointee.ifa_next }) {
|
||||
let flags = Int32(ptr.pointee.ifa_flags)
|
||||
let isUp = (flags & IFF_UP) != 0
|
||||
let isLoopback = (flags & IFF_LOOPBACK) != 0
|
||||
let family = ptr.pointee.ifa_addr.pointee.sa_family
|
||||
if !isUp || isLoopback || family != UInt8(AF_INET) { continue }
|
||||
|
||||
var addr = ptr.pointee.ifa_addr.pointee
|
||||
var buffer = [CChar](repeating: 0, count: Int(NI_MAXHOST))
|
||||
let result = getnameinfo(
|
||||
&addr,
|
||||
socklen_t(ptr.pointee.ifa_addr.pointee.sa_len),
|
||||
&buffer,
|
||||
socklen_t(buffer.count),
|
||||
nil,
|
||||
0,
|
||||
NI_NUMERICHOST)
|
||||
guard result == 0 else { continue }
|
||||
|
||||
let len = buffer.prefix { $0 != 0 }
|
||||
let bytes = len.map { UInt8(bitPattern: $0) }
|
||||
guard let ip = String(bytes: bytes, encoding: .utf8) else { continue }
|
||||
let name = String(cString: ptr.pointee.ifa_name)
|
||||
entries.append(AddressEntry(name: name, ip: ip))
|
||||
}
|
||||
return entries
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user