mirror of
https://github.com/apple/swift-nio-extras.git
synced 2025-05-19 03:38:56 +08:00
Motivation: With NIO 2.32.0 we broke the core NIO module up into modules that split apart the POSIX layer and the core abstractions. As a result, this package no longer needs to express a hard dependency on the POSIX layer. Modifications: - Rewrote imports of NIO to NIOCore. - Added NIOEmbedded and NIOPosix imports where necessary in tests. - Extended soundness script to detect NIO imports. - Note that the main modules still depend on NIO, which is necessary for backwards-compatibility reasons. This dependency is unused. Result: No need to use NIOPosix.
46 lines
1.4 KiB
Swift
46 lines
1.4 KiB
Swift
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This source file is part of the SwiftNIO open source project
|
|
//
|
|
// Copyright (c) 2021 Apple Inc. and the SwiftNIO project authors
|
|
// Licensed under Apache License v2.0
|
|
//
|
|
// See LICENSE.txt for license information
|
|
// See CONTRIBUTORS.txt for the list of SwiftNIO project authors
|
|
//
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
import NIOCore
|
|
import NIOPosix
|
|
import NIOSOCKS
|
|
|
|
class EchoHandler: ChannelInboundHandler {
|
|
typealias InboundIn = ByteBuffer
|
|
|
|
func channelRead(context: ChannelHandlerContext, data: NIOAny) {
|
|
context.writeAndFlush(data, promise: nil)
|
|
}
|
|
|
|
}
|
|
|
|
let targetIPAddress = "127.0.0.1"
|
|
let targetPort = 12345
|
|
let targetAddress = SOCKSAddress.address(try SocketAddress(ipAddress: targetIPAddress, port: targetPort))
|
|
|
|
let elg = MultiThreadedEventLoopGroup(numberOfThreads: 1)
|
|
let bootstrap = ClientBootstrap(group: elg)
|
|
.channelInitializer { channel in
|
|
channel.pipeline.addHandlers([
|
|
SOCKSClientHandler(targetAddress: targetAddress),
|
|
EchoHandler()
|
|
])
|
|
}
|
|
let channel = try bootstrap.connect(host: "127.0.0.1", port: 1080).wait()
|
|
|
|
while let string = readLine(strippingNewline: true) {
|
|
let buffer = ByteBuffer(string: string)
|
|
channel.writeAndFlush(buffer, promise: nil)
|
|
}
|