Skip to content

Commit 0dbdf7e

Browse files
committed
Started work on h2
1 parent d949734 commit 0dbdf7e

19 files changed

+4198
-508
lines changed

Diff for: Sources/AsyncHTTPClient/ConnectionPool/HTTPConnectionPool+Factory.swift

+52
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,58 @@ extension HTTPConnectionPool {
4646
}
4747

4848
extension HTTPConnectionPool.ConnectionFactory {
49+
50+
func makeConnection(for pool: HTTPConnectionPool, connectionID: HTTPConnectionPool.Connection.ID, eventLoop: EventLoop, logger: Logger) {
51+
var logger = logger
52+
logger[metadataKey: "ahc-connection"] = "\(connectionID)"
53+
54+
let future: EventLoopFuture<(Channel, HTTPVersion)>
55+
56+
if self.key.scheme.isProxyable, let proxy = self.clientConfiguration.proxy {
57+
future = self.makeHTTPProxyChannel(proxy, connectionID: connectionID, eventLoop: eventLoop, logger: logger)
58+
} else {
59+
future = self.makeChannel(eventLoop: eventLoop, logger: logger)
60+
}
61+
62+
future.whenComplete { result in
63+
do {
64+
switch result {
65+
case .success(let (channel, .http1_0)), .success(let (channel, .http1_1)):
66+
let connection = try HTTP1Connection(
67+
channel: channel,
68+
connectionID: connectionID,
69+
configuration: self.clientConfiguration,
70+
delegate: pool,
71+
logger: logger
72+
)
73+
pool.http1ConnectionCreated(connection)
74+
case .success(let (channel, .http2)):
75+
let http2Connection = try HTTP2Connection(
76+
channel: channel,
77+
connectionID: connectionID,
78+
delegate: pool,
79+
logger: logger
80+
)
81+
82+
http2Connection.readyToAcceptConnectionsFuture.whenComplete { result in
83+
switch result {
84+
case .success:
85+
pool.http2ConnectionCreated(http2Connection)
86+
case .failure(let error):
87+
pool.failedToCreateHTTPConnection(connectionID, error: error)
88+
}
89+
}
90+
case .failure(let error):
91+
throw error
92+
default:
93+
preconditionFailure("Unexpected new http version")
94+
}
95+
} catch {
96+
pool.failedToCreateHTTPConnection(connectionID, error: error)
97+
}
98+
}
99+
}
100+
49101
func makeBestChannel(connectionID: HTTPConnectionPool.Connection.ID, eventLoop: EventLoop, logger: Logger) -> EventLoopFuture<(Channel, HTTPVersion)> {
50102
if self.key.scheme.isProxyable, let proxy = self.clientConfiguration.proxy {
51103
return self.makeHTTPProxyChannel(proxy, connectionID: connectionID, eventLoop: eventLoop, logger: logger)

0 commit comments

Comments
 (0)