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_family = sa_family_t(AF_INET)
35 addressObject.sin_port = port.bigEndian
37 addressObject.sin_addr.s_addr = inet_addr(address)
39 let sin_length = UInt8(MemoryLayout.size(ofValue: addressObject))
41 let result = withUnsafePointer(to: &addressObject, { addressPointer in
43 addressPointer.withMemoryRebound(to: sockaddr.self, capacity: 1) { addressSecondPointer -> Int32 in
44 let addressMutablePointer = UnsafeMutablePointer(mutating: addressSecondPointer)
45 let result = socket_bind(self.socketHandler, addressMutablePointer, socklen_t(sin_length))
58 public func connect(address: String, port: UInt16, theirNodeId: [UInt8]) -> Bool {
60 var addressObject = sockaddr_in()
61 addressObject.sin_family = sa_family_t(AF_INET)
62 addressObject.sin_port = port.bigEndian
64 addressObject.sin_addr.s_addr = inet_addr(address)
66 let sin_length = UInt8(MemoryLayout.size(ofValue: addressObject))
67 let publicKey = Bindings.new_LDKPublicKey(array: theirNodeId)
69 let result = withUnsafePointer(to: &addressObject, { addressPointer in
71 addressPointer.withMemoryRebound(to: sockaddr.self, capacity: 1) { addressSecondPointer -> Int32 in
72 let addressMutablePointer = UnsafeMutablePointer(mutating: addressSecondPointer)
73 let result = socket_connect(self.socketHandler, publicKey, addressMutablePointer, Int(socklen_t(sin_length)))
86 public func interrupt() {
87 interrupt_socket_handling(self.socketHandler)