@@ -22,21 +22,40 @@ struct MockSOCKSError: Error, Hashable {
22
22
var description : String
23
23
}
24
24
25
+ class TestSOCKSBadServerHandler : ChannelInboundHandler {
26
+ typealias InboundIn = ByteBuffer
27
+
28
+ func channelRead( context: ChannelHandlerContext , data: NIOAny ) {
29
+ // just write some nonsense bytes
30
+ let buffer = context. channel. allocator. buffer ( bytes: [ 0xAA , 0xBB , 0xCC , 0xDD , 0xEE ] )
31
+ context. writeAndFlush ( . init( buffer) , promise: nil )
32
+ }
33
+ }
34
+
25
35
class MockSOCKSServer {
26
36
let channel : Channel
27
37
28
38
init ( expectedURL: String , expectedResponse: String , misbehave: Bool = false , file: String = #file, line: UInt = #line) throws {
29
39
let elg = MultiThreadedEventLoopGroup ( numberOfThreads: 1 )
30
- let bootstrap = ServerBootstrap ( group: elg)
31
- . serverChannelOption ( ChannelOptions . socket ( SocketOptionLevel ( SOL_SOCKET) , SO_REUSEADDR) , value: 1 )
32
- . childChannelInitializer { channel in
33
- let handshakeHandler = SOCKSServerHandshakeHandler ( )
34
- return channel. pipeline. addHandlers ( [
35
- handshakeHandler,
36
- SOCKSTestHandler ( handshakeHandler: handshakeHandler, misbehave: misbehave) ,
37
- TestHTTPServer ( expectedURL: expectedURL, expectedResponse: expectedResponse, file: file, line: line) ,
38
- ] )
39
- }
40
+ let bootstrap : ServerBootstrap
41
+ if misbehave {
42
+ bootstrap = ServerBootstrap ( group: elg)
43
+ . serverChannelOption ( ChannelOptions . socket ( SocketOptionLevel ( SOL_SOCKET) , SO_REUSEADDR) , value: 1 )
44
+ . childChannelInitializer { channel in
45
+ channel. pipeline. addHandler ( TestSOCKSBadServerHandler ( ) )
46
+ }
47
+ } else {
48
+ bootstrap = ServerBootstrap ( group: elg)
49
+ . serverChannelOption ( ChannelOptions . socket ( SocketOptionLevel ( SOL_SOCKET) , SO_REUSEADDR) , value: 1 )
50
+ . childChannelInitializer { channel in
51
+ let handshakeHandler = SOCKSServerHandshakeHandler ( )
52
+ return channel. pipeline. addHandlers ( [
53
+ handshakeHandler,
54
+ SOCKSTestHandler ( handshakeHandler: handshakeHandler) ,
55
+ TestHTTPServer ( expectedURL: expectedURL, expectedResponse: expectedResponse, file: file, line: line) ,
56
+ ] )
57
+ }
58
+ }
40
59
self . channel = try bootstrap. bind ( host: " localhost " , port: 1080 ) . wait ( )
41
60
}
42
61
@@ -49,11 +68,9 @@ class SOCKSTestHandler: ChannelInboundHandler, RemovableChannelHandler {
49
68
typealias InboundIn = ClientMessage
50
69
51
70
let handshakeHandler : SOCKSServerHandshakeHandler
52
- let misbehave : Bool
53
71
54
- init ( handshakeHandler: SOCKSServerHandshakeHandler , misbehave : Bool ) {
72
+ init ( handshakeHandler: SOCKSServerHandshakeHandler ) {
55
73
self . handshakeHandler = handshakeHandler
56
- self . misbehave = misbehave
57
74
}
58
75
59
76
func channelRead( context: ChannelHandlerContext , data: NIOAny ) {
@@ -69,12 +86,6 @@ class SOCKSTestHandler: ChannelInboundHandler, RemovableChannelHandler {
69
86
case . authenticationData:
70
87
context. fireErrorCaught ( MockSOCKSError ( description: " Received authentication data but didn't receive any. " ) )
71
88
case . request( let request) :
72
- guard !self . misbehave else {
73
- context. writeAndFlush (
74
- . init( ServerMessage . authenticationData ( context. channel. allocator. buffer ( string: " bad server! " ) , complete: true ) ) , promise: nil
75
- )
76
- return
77
- }
78
89
context. writeAndFlush ( . init(
79
90
ServerMessage . response ( . init( reply: . succeeded, boundAddress: request. addressType) ) ) , promise: nil )
80
91
context. channel. pipeline. addHandlers ( [
0 commit comments