2 // TCPPeerHandler.swift
5 // Created by Arik Sosman on 7/8/21.
11 public class TCPPeerHandler {
13 private let peerManager: PeerManager
14 private let socketHandler: UnsafeMutableRawPointer?
15 private var isBound = false
17 public init(peerManager: PeerManager) {
18 self.peerManager = peerManager
19 let socketHandler = withUnsafePointer(to: self.peerManager.cOpaqueStruct!) { (pointer: UnsafePointer<LDKPeerManager>) -> UnsafeMutableRawPointer? in
20 let socketHandler = init_socket_handling(pointer)
23 self.socketHandler = socketHandler
24 print("TCPPeerHandler self address: \(Unmanaged<TCPPeerHandler>.passUnretained(self).toOpaque())")
27 public func bind(address: String, port: UInt16) -> Bool {
33 var addressObject = sockaddr_in()
34 addressObject.sin_len = UInt8(MemoryLayout.size(ofValue: addressObject))
35 addressObject.sin_family = sa_family_t(AF_INET)
36 addressObject.sin_port = CFSwapInt16HostToBig(port)
38 addressObject.sin_addr.s_addr = inet_addr(address)
40 let sin_length = addressObject.sin_len
42 let result = withUnsafePointer(to: &addressObject, { addressPointer in
44 addressPointer.withMemoryRebound(to: sockaddr.self, capacity: 1) { addressSecondPointer -> Int32 in
45 let addressMutablePointer = UnsafeMutablePointer(mutating: addressSecondPointer)
46 let result = socket_bind(self.socketHandler, addressMutablePointer, socklen_t(sin_length))
59 public func connect(address: String, port: UInt16, theirNodeId: [UInt8]) -> Bool {
61 var addressObject = sockaddr_in()
62 addressObject.sin_len = UInt8(MemoryLayout.size(ofValue: addressObject))
63 addressObject.sin_family = sa_family_t(AF_INET)
64 addressObject.sin_port = CFSwapInt16HostToBig(port)
66 addressObject.sin_addr.s_addr = inet_addr(address)
68 let sin_length = addressObject.sin_len
69 let publicKey = Bindings.new_LDKPublicKey(array: theirNodeId)
71 let result = withUnsafePointer(to: &addressObject, { addressPointer in
73 addressPointer.withMemoryRebound(to: sockaddr.self, capacity: 1) { addressSecondPointer -> Int32 in
74 let addressMutablePointer = UnsafeMutablePointer(mutating: addressSecondPointer)
75 let result = socket_connect(self.socketHandler, publicKey, addressMutablePointer, Int(socklen_t(sin_length)))
88 public func interrupt() {
89 interrupt_socket_handling(self.socketHandler)