mirror of
https://github.com/swift-server/async-http-client.git
synced 2026-06-02 07:37:34 +00:00
Add "debug initializer" hook for channels (#801)
Motivation: As requested in #596, it can be handy to have a lower-level access to channels (HTTP/1 connection, HTTP/2 connection, or HTTP/2 stream) to enable a more fine-grained interaction for, say, observability, testing, etc. Modifications: - Add 3 new properties (`http1_1ConnectionDebugInitializer`, `http2ConnectionDebugInitializer` and `http2StreamChannelDebugInitializer`) to `HTTPClient.Configuration` with access to the respective channels. These properties are of `Optional` type `@Sendable (Channel) -> EventLoopFuture<Void>` and are called when creating a connection/stream. Result: Provides APIs for a lower-level access to channels. --------- Co-authored-by: Cory Benfield <lukasa@apple.com> Co-authored-by: David Nadoba <d_nadoba@apple.com> Co-authored-by: George Barnett <gbarnett@apple.com>
This commit is contained in:
co-authored by
Cory Benfield
David Nadoba
George Barnett
parent
373862aa09
commit
a3d00a65b9
@@ -847,6 +847,15 @@ public class HTTPClient {
|
||||
/// By default, don't use it
|
||||
public var enableMultipath: Bool
|
||||
|
||||
/// A method with access to the HTTP/1 connection channel that is called when creating the connection.
|
||||
public var http1_1ConnectionDebugInitializer: (@Sendable (Channel) -> EventLoopFuture<Void>)?
|
||||
|
||||
/// A method with access to the HTTP/2 connection channel that is called when creating the connection.
|
||||
public var http2ConnectionDebugInitializer: (@Sendable (Channel) -> EventLoopFuture<Void>)?
|
||||
|
||||
/// A method with access to the HTTP/2 stream channel that is called when creating the stream.
|
||||
public var http2StreamChannelDebugInitializer: (@Sendable (Channel) -> EventLoopFuture<Void>)?
|
||||
|
||||
public init(
|
||||
tlsConfiguration: TLSConfiguration? = nil,
|
||||
redirectConfiguration: RedirectConfiguration? = nil,
|
||||
@@ -949,6 +958,32 @@ public class HTTPClient {
|
||||
decompression: decompression
|
||||
)
|
||||
}
|
||||
|
||||
public init(
|
||||
tlsConfiguration: TLSConfiguration? = nil,
|
||||
redirectConfiguration: RedirectConfiguration? = nil,
|
||||
timeout: Timeout = Timeout(),
|
||||
connectionPool: ConnectionPool = ConnectionPool(),
|
||||
proxy: Proxy? = nil,
|
||||
ignoreUncleanSSLShutdown: Bool = false,
|
||||
decompression: Decompression = .disabled,
|
||||
http1_1ConnectionDebugInitializer: (@Sendable (Channel) -> EventLoopFuture<Void>)? = nil,
|
||||
http2ConnectionDebugInitializer: (@Sendable (Channel) -> EventLoopFuture<Void>)? = nil,
|
||||
http2StreamChannelDebugInitializer: (@Sendable (Channel) -> EventLoopFuture<Void>)? = nil
|
||||
) {
|
||||
self.init(
|
||||
tlsConfiguration: tlsConfiguration,
|
||||
redirectConfiguration: redirectConfiguration,
|
||||
timeout: timeout,
|
||||
connectionPool: connectionPool,
|
||||
proxy: proxy,
|
||||
ignoreUncleanSSLShutdown: ignoreUncleanSSLShutdown,
|
||||
decompression: decompression
|
||||
)
|
||||
self.http1_1ConnectionDebugInitializer = http1_1ConnectionDebugInitializer
|
||||
self.http2ConnectionDebugInitializer = http2ConnectionDebugInitializer
|
||||
self.http2StreamChannelDebugInitializer = http2StreamChannelDebugInitializer
|
||||
}
|
||||
}
|
||||
|
||||
/// Specifies how `EventLoopGroup` will be created and establishes lifecycle ownership.
|
||||
|
||||
Reference in New Issue
Block a user