Skip to content

Commit 0007072

Browse files
Ayush yadav001/invalid header listener (#71)
1 parent 42c5b54 commit 0007072

File tree

6 files changed

+39
-23
lines changed

6 files changed

+39
-23
lines changed

Sources/RSocketCore/Client/TransportChannelHandler.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,6 @@ public protocol TransportChannelHandler {
3131
channel: Channel,
3232
maximumIncomingFragmentSize: Int,
3333
endpoint: Endpoint,
34-
upgradeComplete: @escaping () -> EventLoopFuture<Void>
35-
) -> EventLoopFuture<Void>
34+
upgradeComplete: @escaping () -> EventLoopFuture<Void>,
35+
resultHandler: @escaping (Result<Void, Swift.Error>) -> EventLoopFuture<Void>)-> EventLoopFuture<Void>
3636
}

Sources/RSocketNIOChannel/ClientBootstrap.swift

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,15 +65,26 @@ extension ClientBootstrap: RSocketCore.ClientBootstrap {
6565
transport.addChannelHandler(
6666
channel: channel,
6767
maximumIncomingFragmentSize: config.fragmentation.maximumIncomingFragmentSize,
68-
endpoint: endpoint
69-
) {
68+
endpoint: endpoint,
69+
upgradeComplete:{
7070
channel.pipeline.addRSocketClientHandlers(
7171
config: config,
7272
setupPayload: payload,
7373
responder: responder,
7474
connectedPromise: requesterPromise
7575
)
76-
}
76+
},resultHandler: { result in
77+
if case .failure(let error) = result {
78+
requesterPromise.fail(error)
79+
return requesterPromise.futureResult.eventLoop.makeFailedFuture(error)
80+
}
81+
return channel.pipeline.addRSocketClientHandlers(
82+
config: config,
83+
setupPayload: payload,
84+
responder: responder,
85+
connectedPromise: requesterPromise
86+
)
87+
})
7788
}
7889
if sslContext != nil || endpoint.requiresTLS {
7990
do {

Sources/RSocketTCPTransport/TCPTransport.swift

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,7 @@ public struct TCPTransport {
3232
}
3333

3434
extension TCPTransport: TransportChannelHandler {
35-
public func addChannelHandler(
36-
channel: Channel,
37-
maximumIncomingFragmentSize: Int,
38-
endpoint: Endpoint,
39-
upgradeComplete: @escaping () -> EventLoopFuture<Void>
40-
) -> EventLoopFuture<Void> {
35+
public func addChannelHandler(channel: Channel, maximumIncomingFragmentSize: Int, endpoint: Endpoint, upgradeComplete: @escaping () -> EventLoopFuture<Void>, resultHandler: @escaping (Result<Void, Swift.Error>) -> EventLoopFuture<Void>) -> EventLoopFuture<Void> {
4136
channel.pipeline.addHandlers([
4237
ByteToMessageHandler(
4338
LengthFieldBasedFrameDecoder(lengthFieldBitLength: .threeBytes),

Sources/RSocketTSChannel/ClientBootstrap.swift

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,15 +71,26 @@ extension ClientBootstrap: RSocketCore.ClientBootstrap {
7171
transport.addChannelHandler(
7272
channel: channel,
7373
maximumIncomingFragmentSize: config.fragmentation.maximumIncomingFragmentSize,
74-
endpoint: endpoint
75-
) {
74+
endpoint: endpoint,
75+
upgradeComplete:{
7676
channel.pipeline.addRSocketClientHandlers(
7777
config: config,
7878
setupPayload: payload,
7979
responder: responder,
8080
connectedPromise: requesterPromise
8181
)
82-
}
82+
},resultHandler: { result in
83+
if case .failure(let error) = result {
84+
requesterPromise.fail(error)
85+
return requesterPromise.futureResult.eventLoop.makeFailedFuture(error)
86+
}
87+
return channel.pipeline.addRSocketClientHandlers(
88+
config: config,
89+
setupPayload: payload,
90+
responder: responder,
91+
connectedPromise: requesterPromise
92+
)
93+
})
8394
}
8495
.connect(host: endpoint.host, port: endpoint.port)
8596
connectFuture.cascadeFailure(to: requesterPromise)

Sources/RSocketWSTransport/HTTPInitialRequestHandler.swift

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,14 @@ internal final class HTTPInitialRequestHandler: ChannelInboundHandler, Removable
2626
private let port: Int
2727
private let uri: String
2828
private let additionalHTTPHeader: [String: String]
29-
30-
internal init(host: String, port: Int, uri: String, additionalHTTPHeader: [String: String]) {
29+
private let completionhandler :(Result<Void, Error>) -> EventLoopFuture<Void>
30+
31+
internal init(host: String, port: Int, uri: String, additionalHTTPHeader: [String: String],completionhandler : @escaping (Result<Void,Error>)-> EventLoopFuture<Void>){
3132
self.host = host
3233
self.port = port
3334
self.uri = uri
3435
self.additionalHTTPHeader = additionalHTTPHeader
36+
self.completionhandler = completionhandler
3537
}
3638

3739
internal func channelActive(context: ChannelHandlerContext) {
@@ -63,6 +65,7 @@ internal final class HTTPInitialRequestHandler: ChannelInboundHandler, Removable
6365
internal func errorCaught(context: ChannelHandlerContext, error: Error) {
6466
// As we are not really interested getting notified on success or failure
6567
// we just pass nil as promise to reduce allocations.
68+
let _ = completionhandler(.failure(error))
6669
context.close(promise: nil)
6770
}
6871
}

Sources/RSocketWSTransport/WSTransport.swift

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -72,17 +72,13 @@ extension WSTransport.Endpoint: Endpoint {
7272
}
7373

7474
extension WSTransport: TransportChannelHandler {
75-
public func addChannelHandler(
76-
channel: Channel,
77-
maximumIncomingFragmentSize: Int,
78-
endpoint: Endpoint,
79-
upgradeComplete: @escaping () -> EventLoopFuture<Void>
80-
) -> EventLoopFuture<Void> {
75+
public func addChannelHandler(channel: Channel, maximumIncomingFragmentSize: Int, endpoint: Endpoint, upgradeComplete: @escaping () -> EventLoopFuture<Void>, resultHandler : @escaping (Result<Void, Swift.Error>) -> EventLoopFuture<Void>) -> EventLoopFuture<Void> {
8176
let httpHandler = HTTPInitialRequestHandler(
8277
host: endpoint.host,
8378
port: endpoint.port,
8479
uri: endpoint.uri,
85-
additionalHTTPHeader: endpoint.additionalHTTPHeader
80+
additionalHTTPHeader: endpoint.additionalHTTPHeader,
81+
completionhandler: resultHandler
8682
)
8783
let websocketUpgrader = NIOWebSocketClientUpgrader(
8884
maxFrameSize: maximumIncomingFragmentSize,

0 commit comments

Comments
 (0)