Skip to content

Commit 227d46e

Browse files
committed
Started work on h2
1 parent 4f1d525 commit 227d46e

31 files changed

+6501
-504
lines changed

Diff for: Package.swift

+2-1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ let package = Package(
2222
],
2323
dependencies: [
2424
.package(url: "https://github.com/apple/swift-nio.git", from: "2.27.0"),
25+
.package(url: "https://github.com/apple/swift-nio-http2.git", from: "1.7.0"),
2526
.package(url: "https://github.com/apple/swift-nio-ssl.git", from: "2.13.0"),
2627
.package(url: "https://github.com/apple/swift-nio-extras.git", from: "1.3.0"),
2728
.package(url: "https://github.com/apple/swift-nio-transport-services.git", from: "1.5.1"),
@@ -30,7 +31,7 @@ let package = Package(
3031
targets: [
3132
.target(
3233
name: "AsyncHTTPClient",
33-
dependencies: ["NIO", "NIOHTTP1", "NIOSSL", "NIOConcurrencyHelpers", "NIOHTTPCompression",
34+
dependencies: ["NIO", "NIOHTTP1", "NIOHTTP2", "NIOSSL", "NIOConcurrencyHelpers", "NIOHTTPCompression",
3435
"NIOFoundationCompat", "NIOTransportServices", "Logging"]
3536
),
3637
.testTarget(
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
//===----------------------------------------------------------------------===//
2+
//
3+
// This source file is part of the AsyncHTTPClient open source project
4+
//
5+
// Copyright (c) 2021 Apple Inc. and the AsyncHTTPClient project authors
6+
// Licensed under Apache License v2.0
7+
//
8+
// See LICENSE.txt for license information
9+
// See CONTRIBUTORS.txt for the list of AsyncHTTPClient project authors
10+
//
11+
// SPDX-License-Identifier: Apache-2.0
12+
//
13+
//===----------------------------------------------------------------------===//
14+
15+
enum HTTPConnectionEvent {
16+
case cancelRequest
17+
}

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)