49 lines
1.5 KiB
Swift
Executable File
Vendored
49 lines
1.5 KiB
Swift
Executable File
Vendored
import Foundation
|
|
|
|
/// This adapter connects to remote directly.
|
|
public class DirectAdapter: AdapterSocket {
|
|
/// If this is set to `false`, then the IP address will be resolved by system.
|
|
var resolveHost = false
|
|
|
|
/**
|
|
Connect to remote according to the `ConnectSession`.
|
|
|
|
- parameter session: The connect session.
|
|
*/
|
|
override public func openSocketWith(session: ConnectSession) {
|
|
super.openSocketWith(session: session)
|
|
|
|
guard !isCancelled else {
|
|
return
|
|
}
|
|
|
|
do {
|
|
try socket.connectTo(host: session.host, port: Int(session.port), enableTLS: false, tlsSettings: nil)
|
|
} catch let error {
|
|
observer?.signal(.errorOccured(error, on: self))
|
|
disconnect()
|
|
}
|
|
}
|
|
|
|
/**
|
|
The socket did connect to remote.
|
|
|
|
- parameter socket: The connected socket.
|
|
*/
|
|
override public func didConnectWith(socket: RawTCPSocketProtocol) {
|
|
super.didConnectWith(socket: socket)
|
|
observer?.signal(.readyForForward(self))
|
|
delegate?.didBecomeReadyToForwardWith(socket: self)
|
|
}
|
|
|
|
override public func didRead(data: Data, from rawSocket: RawTCPSocketProtocol) {
|
|
super.didRead(data: data, from: rawSocket)
|
|
delegate?.didRead(data: data, from: self)
|
|
}
|
|
|
|
override public func didWrite(data: Data?, by rawSocket: RawTCPSocketProtocol) {
|
|
super.didWrite(data: data, by: rawSocket)
|
|
delegate?.didWrite(data: data, by: self)
|
|
}
|
|
}
|