{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":123651404,"defaultBranch":"main","name":"swift-nio-http2","ownerLogin":"apple","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2018-03-03T02:20:22.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/10639145?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1713789482.0","currentOid":""},"activityList":{"items":[{"before":"356a3af761e0e2b2cc6dc103ec42471f2e1451b4","after":"8d8eb609929aee75336a0a3d2417280786265868","ref":"refs/heads/main","pushedAt":"2024-05-16T13:12:57.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"glbrntt","name":"George Barnett","path":"/glbrntt","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5047671?s=80&v=4"},"commit":{"message":"Add a variant of configureAsyncHTTP2Pipeline which takes a stream delegate (#439)\n\nMotivation:\r\n\r\n`configureAsyncHTTP2Pipeline` doesn't allow a stream delegate to be\r\nspecified. As the async pipeline uses the \"inline\" stream multiplexer\r\nthere's no way to account for streams within the connection channel.\r\n\r\nModifications:\r\n\r\n- Add a sync and async variants of `configureAsyncHTTP2Pipeline` which\r\n accepts an optional stream delegate\r\n- Rewrite the existing helpers in terms of the new one\r\n\r\nResult:\r\n\r\nUsers can configure an async http pipeline with a stream delegate.","shortMessageHtmlLink":"Add a variant of configureAsyncHTTP2Pipeline which takes a stream del…"}},{"before":"c6afe04165c865faaa687b42c32ed76dfcc91076","after":"356a3af761e0e2b2cc6dc103ec42471f2e1451b4","ref":"refs/heads/main","pushedAt":"2024-05-09T11:59:05.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Lukasa","name":"Cory Benfield","path":"/Lukasa","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1382556?s=80&v=4"},"commit":{"message":"test compiler not language version (#440)","shortMessageHtmlLink":"test compiler not language version (#440)"}},{"before":"a0c580be160af313d1d7d3bf5dda874b9abd025b","after":"c6afe04165c865faaa687b42c32ed76dfcc91076","ref":"refs/heads/main","pushedAt":"2024-04-17T08:08:28.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"glbrntt","name":"George Barnett","path":"/glbrntt","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5047671?s=80&v=4"},"commit":{"message":"Avoid CoW while processing the next state when HTTP2FrameDecoder decodes (#438)\n\nMotivation:\r\n\r\nCoWs appear when switching over the current state of the parser and holding it while also modifying it - inside `processNExtState()`. Following `append(bytes: ByteBuffer)`'s pattern, we should use a function that sets the state to an intermediary one with no associated data, before making the transformations.\r\n\r\nModifications:\r\n- created the `avoidParserCoW()` helper function for the throwing functions\r\n- used it in the switch cases inside `processNextState()`\r\n\r\nResult:\r\n\r\nCoW will be avoided when changing the state of the HTTP2FrameDecoder when decoding, so we won't have unnecessary heap allocations.","shortMessageHtmlLink":"Avoid CoW while processing the next state when HTTP2FrameDecoder deco…"}},{"before":"75c10ea32e520403dfed857dc35788a00dcf6537","after":"a0c580be160af313d1d7d3bf5dda874b9abd025b","ref":"refs/heads/main","pushedAt":"2024-03-11T08:48:54.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Lukasa","name":"Cory Benfield","path":"/Lukasa","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1382556?s=80&v=4"},"commit":{"message":"Raise minimum swift version to 5.8 (#436)","shortMessageHtmlLink":"Raise minimum swift version to 5.8 (#436)"}},{"before":"0904bf0feb5122b7e5c3f15db7df0eabe623dd87","after":"75c10ea32e520403dfed857dc35788a00dcf6537","ref":"refs/heads/main","pushedAt":"2024-02-27T09:07:58.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Lukasa","name":"Cory Benfield","path":"/Lukasa","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1382556?s=80&v=4"},"commit":{"message":"Update documentation for configureAsyncHTTPServerPipeline (#435)","shortMessageHtmlLink":"Update documentation for configureAsyncHTTPServerPipeline (#435)"}},{"before":"d47899f82fa5df8a92d1d78010517a9405937087","after":"0904bf0feb5122b7e5c3f15db7df0eabe623dd87","ref":"refs/heads/main","pushedAt":"2024-01-22T13:11:53.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Lukasa","name":"Cory Benfield","path":"/Lukasa","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1382556?s=80&v=4"},"commit":{"message":"Adopt the Swift CoC (#398)\n\nMotivation:\r\n\r\nWe're centralizing on the Swift code of conduct, so we'll x-reference\r\nthat instead of holding our own.\r\n\r\nModifications:\r\n\r\nHyperlink out to Swift.\r\n\r\nResult:\r\n\r\nShared CoC across the projects.","shortMessageHtmlLink":"Adopt the Swift CoC (#398)"}},{"before":"69e838fb2206512b68c7fd755f895a3459d88c2c","after":"d47899f82fa5df8a92d1d78010517a9405937087","ref":"refs/heads/main","pushedAt":"2024-01-08T16:25:38.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"glbrntt","name":"George Barnett","path":"/glbrntt","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5047671?s=80&v=4"},"commit":{"message":"fix Bench1Conn10kRequests crash (#434)\n\nMotivation:\r\n\r\n`Bench1Conn10kRequests` performance tester incorrectly used a `NIOLoopBound` to access the `HTTP2StreamMultiplexer` to create streams.\r\n\r\nModifications:\r\n\r\nAccess the multiplexer by safely obtaining a reference to the handler.\r\n\r\nResult:\r\n\r\n- `Bench1Conn10kRequests` are not broken","shortMessageHtmlLink":"fix Bench1Conn10kRequests crash (#434)"}},{"before":"94ab10b5af5580d64dd074ab4095a3f4974dbf97","after":"69e838fb2206512b68c7fd755f895a3459d88c2c","ref":"refs/heads/main","pushedAt":"2023-12-20T14:57:41.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Lukasa","name":"Cory Benfield","path":"/Lukasa","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1382556?s=80&v=4"},"commit":{"message":"Remove precondition: yielding to terminated AsyncSequence (#432)\n\nMotivation:\r\n\r\nIf a task iterating over inbound streams using the new async API is\r\ncancelled then it can lead to the process crashing as we hit a\r\nprecondition which guards against yielding to a terminated\r\nNIOHTTP2AsyncSequence.\r\n\r\nModifications:\r\n\r\nRemove the precondition.\r\n\r\nResult:\r\n\r\nThe code no longer crashes, instead it silently drops the yielded value.\r\n\r\nDoing more than this such as closing the connection requires rethinking\r\nmore of the API.\r\n\r\n---------\r\n\r\nCo-authored-by: Cory Benfield ","shortMessageHtmlLink":"Remove precondition: yielding to terminated AsyncSequence (#432)"}},{"before":"28a91a3b09416436d249356c22bf3c0f11e87d14","after":"94ab10b5af5580d64dd074ab4095a3f4974dbf97","ref":"refs/heads/main","pushedAt":"2023-12-18T15:11:15.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"glbrntt","name":"George Barnett","path":"/glbrntt","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5047671?s=80&v=4"},"commit":{"message":"Use explicit 64-bit UInt64 to support 32-bit platforms (#430)","shortMessageHtmlLink":"Use explicit 64-bit UInt64 to support 32-bit platforms (#430)"}},{"before":"285e444b4904f5264146f37adc9b0751afc26fce","after":"28a91a3b09416436d249356c22bf3c0f11e87d14","ref":"refs/heads/main","pushedAt":"2023-12-15T18:02:18.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"simonjbeaumont","name":"Si Beaumont","path":"/simonjbeaumont","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1125539?s=80&v=4"},"commit":{"message":"Add missing availability guards in tests (#429)\n\n## Motivation\r\n\r\nSome of the test code was missing availability guards for Apple platforms, resulting in build failures for these platforms, e.g.\r\n\r\n```\r\nerror: 'NIOAsyncTestingChannel' is only available in iOS 13.0 or newer\r\n var clientChannel: NIOAsyncTestingChannel!\r\n```\r\n\r\n## Modifications\r\n\r\nAdd missing availability guards. I've tried to keep them as scoped as possible. Some test suites used these as class properties, so these got a guard at suite level.\r\n\r\n## Result\r\n\r\nTests can now build and run on iOS and other Apple platforms.","shortMessageHtmlLink":"Add missing availability guards in tests (#429)"}},{"before":"a6c66bcbe7dfba6f23bff8599376b5fad858a818","after":"285e444b4904f5264146f37adc9b0751afc26fce","ref":"refs/heads/main","pushedAt":"2023-11-01T14:36:39.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"glbrntt","name":"George Barnett","path":"/glbrntt","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5047671?s=80&v=4"},"commit":{"message":"Sendability warnings (#417)\n\nMotivation:\r\n\r\nTo address warnings revealed with\r\n`.enableExperimentalFeature(\"StrictConcurrency=complete\"),` in Swift 5.8\r\n\r\nModifications:\r\n\r\n* Numerous protections of state in tests\r\n* Make the multiplexer instances explicitly loop bound\r\n* Update channel initializers to be marked as Sendable\r\n* Mark error backing storage types as unchecked sendable\r\n\r\nResult:\r\n\r\nBetter thread safety","shortMessageHtmlLink":"Sendability warnings (#417)"}},{"before":"3bd9004b9d685ed6b629760fc84903e48efec806","after":"a6c66bcbe7dfba6f23bff8599376b5fad858a818","ref":"refs/heads/main","pushedAt":"2023-10-30T09:29:37.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"rnro","name":"Rick Newton-Rogers","path":"/rnro","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/104022490?s=80&v=4"},"commit":{"message":"Mark public generic async methods inlinable (#426)\n\n* Mark generic async methods inlinable\r\n\r\nMotivation:\r\n\r\nMark generic async methods inlinable where possible to improve performance.\r\n\r\nModifications:\r\n\r\nMultiple methods marked `@inlinable`\r\n\r\nResult:\r\n\r\nPerformance increase","shortMessageHtmlLink":"Mark public generic async methods inlinable (#426)"}},{"before":"462ded73adab44a64697cdd5aa8d9d11e224ef0a","after":"3bd9004b9d685ed6b629760fc84903e48efec806","ref":"refs/heads/main","pushedAt":"2023-10-25T15:07:40.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"FranzBusch","name":"Franz Busch","path":"/FranzBusch","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/3491887?s=80&v=4"},"commit":{"message":"Remove retroactive `CustomDebugStringConvertible` conformance in tests (#425)\n\n# Motivation\r\nWe had a retroactive `CustomDebugStringConvertible` conformance to `ByteBufferView` in one of our tests harnesses which caused compiler errors in the latest nightlies.\r\n\r\n# Modification\r\nThis PR removes the retroactive conformance.\r\n\r\n# Result\r\nNo more compiler errors.","shortMessageHtmlLink":"Remove retroactive CustomDebugStringConvertible conformance in tests ("}},{"before":"d6f9a3b90ded2bc718e27c8f5eb9f08509942573","after":"462ded73adab44a64697cdd5aa8d9d11e224ef0a","ref":"refs/heads/main","pushedAt":"2023-10-25T14:49:16.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"rnro","name":"Rick Newton-Rogers","path":"/rnro","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/104022490?s=80&v=4"},"commit":{"message":"HTTP/2 Async API (#424)\n\nWe previously developed an async API for NIO HTTP/2 which was guarded under SPI. Now that the swift-nio async API is released we can reintroduce this code promoted to SPI.\r\n\r\nThis change introduces:\r\n* `AsyncStreamMultiplexer` - an async variant of the HTTP/2 stream multiplexer which can be used to create outbound streams and provide access to an async sequence (`NIOHTTP2AsyncSequence`) of inbound streams\r\n* New pipeline configuration functions (e.g. `configureAsyncHTTP2Pipeline`) to support the new async mode","shortMessageHtmlLink":"HTTP/2 Async API (#424)"}},{"before":"9c22e4f810ce780453f563fba98e1a1039f83d56","after":"d6f9a3b90ded2bc718e27c8f5eb9f08509942573","ref":"refs/heads/main","pushedAt":"2023-10-11T07:12:29.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"rnro","name":"Rick Newton-Rogers","path":"/rnro","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/104022490?s=80&v=4"},"commit":{"message":"Bump minimum Swift version to 5.7 (#420)\n\n* Bump minimum Swift version to 5.7\r\n\r\nMotivation:\r\n\r\nNow that Swift 5.9 is GM we should update the supported versions and\r\nremove 5.6\r\n\r\nModifications:\r\n\r\n* Update `Package.swift`\r\n* Remove `#if swift(>=5.7)` guards\r\n* Delete the 5.6 docker compose file and make a 5.10 one\r\n* Update 5.10 alloc limits\r\n* Update docs\r\n\r\nResult:\r\n\r\nRemove support for Swift 5.6, add 5.10","shortMessageHtmlLink":"Bump minimum Swift version to 5.7 (#420)"}},{"before":"3798fe5f1564f27461390b4f6163f6ddfb21fd2d","after":"9c22e4f810ce780453f563fba98e1a1039f83d56","ref":"refs/heads/main","pushedAt":"2023-10-10T17:11:34.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Lukasa","name":"Cory Benfield","path":"/Lukasa","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1382556?s=80&v=4"},"commit":{"message":"DOSHeuristics DeadlineClock more explicit on 5.6 (#422)\n\nMotivation:\r\n\r\nThe type inference system isn't able to work out the default clock type\r\nin the DOSHeuristics init on Swift 5.6 so this change makes it more explicit\r\n\r\nModifications:\r\n\r\nAdd more explicit inits\r\n\r\nResult:\r\n\r\nThe code should build on 5.6 and later","shortMessageHtmlLink":"DOSHeuristics DeadlineClock more explicit on 5.6 (#422)"}},{"before":"2140160e95f7d27e8b6a90c11e8cfbc7f69ff4f0","after":"3798fe5f1564f27461390b4f6163f6ddfb21fd2d","ref":"refs/heads/main","pushedAt":"2023-10-10T12:00:57.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Lukasa","name":"Cory Benfield","path":"/Lukasa","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1382556?s=80&v=4"},"commit":{"message":"Merge pull request from GHSA-qppj-fm5r-hxr3\n\n* Limit rate of permitted RST frames\n\nMotivation:\n\nLarge number of stream reset frames may be used as a DoS (Denial of\nService) vector in an attempt to overload the CPU of the handling server.\n\nModifications:\n\nIntroduce an additional DoS heuristic which evaluates the rate of\nincoming stream reset frames. If the rate exceeds that which is\npermitted then the connection is closed and a `GOAWAY` issued.\n\nThe allowed rate is configurable but defaults to 200 resets within 30\nseconds. This should be acceptable for most applications.\n\nResult:\n\nExcessive reset frames result in the connection being closed.\n\n* review comments\n\n* further review comments\n\n* add integration test","shortMessageHtmlLink":"Merge pull request from GHSA-qppj-fm5r-hxr3"}},{"before":"82753147395e0e272e5fac5c66c07a00d04f2139","after":"2140160e95f7d27e8b6a90c11e8cfbc7f69ff4f0","ref":"refs/heads/main","pushedAt":"2023-10-04T12:21:17.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"glbrntt","name":"George Barnett","path":"/glbrntt","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5047671?s=80&v=4"},"commit":{"message":"Remove dependency on SPI (#419)\n\nMotivation:\r\n\r\nRemove dependency on SPI so that we can cut a release without\r\nintroducing dependency on code subject to change.\r\n\r\nModifications:\r\n\r\nRemove all code which introduces a dependency on the NIOAsyncChannel SPI\r\n\r\nResult:\r\n\r\nCode inside SPI is removed","shortMessageHtmlLink":"Remove dependency on SPI (#419)"}},{"before":"92afa4fa84b47aa83016ca552be05fc5cb3afd31","after":"82753147395e0e272e5fac5c66c07a00d04f2139","ref":"refs/heads/main","pushedAt":"2023-09-11T13:46:41.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"glbrntt","name":"George Barnett","path":"/glbrntt","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5047671?s=80&v=4"},"commit":{"message":"Async stream initializers order matches existing (#415)\n\nMotivation:\r\n\r\nWhen adding in the SPI methods for exposing async sequences of HTTP/2\r\nstreams we moved the stream initialization to a subtly different\r\nlocation so that it was easier to exfiltrate the outputs of those\r\ninitialization functions (such as protocol negotiation outputs).\r\n\r\nIn some cases this broke ordering expectations.\r\n\r\nModifications:\r\n\r\nYield the (optionally wrapped) channels as initializer outputs to the async stream\r\n\r\nResult:\r\n\r\nChanges only exist within SPI. Async inbound stream channel\r\ninitialization now matches previous behavior.","shortMessageHtmlLink":"Async stream initializers order matches existing (#415)"}},{"before":"2bf57336ec1716a37b42e61cfbaa1912bcb858f7","after":"92afa4fa84b47aa83016ca552be05fc5cb3afd31","ref":"refs/heads/main","pushedAt":"2023-08-23T10:28:07.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"glbrntt","name":"George Barnett","path":"/glbrntt","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5047671?s=80&v=4"},"commit":{"message":"Delay stream creation until the next loop tick (#416)\n\nMotivation:\r\n\r\nA recent change allowed stream creation to run immediately if the caller\r\nwas on the correct event loop. Normally that's fine, however, it opens\r\nup a code path where streams can become activated twice which leads to a\r\ncrash.\r\n\r\nModifications:\r\n\r\n- Delay stream creation until the next loop tick\r\n- Add a loop tick to tests which now require it\r\n\r\nResult:\r\n\r\nAvoid re-entrantly activating streams twice.","shortMessageHtmlLink":"Delay stream creation until the next loop tick (#416)"}},{"before":"493897c4744de24fe7c48940c3654e41fb6673fc","after":"2bf57336ec1716a37b42e61cfbaa1912bcb858f7","ref":"refs/heads/main","pushedAt":"2023-08-08T13:36:51.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Lukasa","name":"Cory Benfield","path":"/Lukasa","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1382556?s=80&v=4"},"commit":{"message":"Update to latest NIO with updated protocol negotiation SPI (#414)\n\n* Update to latest NIO with updated protocol negotiation API\r\n\r\nSigned-off-by: Si Beaumont \r\n\r\n* fixup: Also replace deprecated get().waitForFinalResult()\r\n\r\nSigned-off-by: Si Beaumont \r\n\r\n---------\r\n\r\nSigned-off-by: Si Beaumont ","shortMessageHtmlLink":"Update to latest NIO with updated protocol negotiation SPI (#414)"}},{"before":"7e4dd147b027c8bdafc8d66b9d8252992a824f13","after":"493897c4744de24fe7c48940c3654e41fb6673fc","ref":"refs/heads/main","pushedAt":"2023-07-28T08:15:01.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Lukasa","name":"Cory Benfield","path":"/Lukasa","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1382556?s=80&v=4"},"commit":{"message":"Fix parent channel `read()` call on `HTTP2StreamChannel` initialization causing incorrect order of inbound `HTTP2Frame`s (#413)\n\nMotivation:\r\n\r\nMake sure the order of `HTTP2Frame`s that are fired through the pipeline of a `HTTP2StreamChannel` by `HTTP2CommonInboundStreamMultiplexer` is correct when a `read()` call on the parent channel synchronously causes further frames to be processed.\r\n\r\nModifications:\r\n\r\nReorder calls in `HTTP2CommonInboundStreamMultiplexer.receivedFrame(frame:context:multiplexer)` so that initial header frame is buffered and processed first.\r\n\r\nResult:\r\n\r\nResolves #410 and makes newly added test case `HTTP2StreamMultiplexerTests.testMultiplexerFiresInitialFramesInCorrectOrder()` pass.","shortMessageHtmlLink":"Fix parent channel read() call on HTTP2StreamChannel initializati…"}},{"before":"044339de7bdffddb81cb77fc57fb77ff2e743088","after":"7e4dd147b027c8bdafc8d66b9d8252992a824f13","ref":"refs/heads/main","pushedAt":"2023-07-26T12:48:25.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"glbrntt","name":"George Barnett","path":"/glbrntt","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5047671?s=80&v=4"},"commit":{"message":"Adopt latest AsyncChannel changes (#411)\n\n# Motivation\r\nIn my latest PR in NIO, I removed a bunch of API from the bootstrap methods to make the API easier to digest and reduce a number of duplicated code issues.\r\n\r\n# Modification\r\nThis PR adopts the latest NIO changes and adapts the APIs in H2. More specifically, it removes the `NIOAsyncChannel` convenience methods and makes sure that everything aligns nicely with the proposes bootstrap APIs.\r\n\r\n# Result\r\nWe now have the APIs in place to bootstrap a protocol negotiated H1/H2 server.","shortMessageHtmlLink":"Adopt latest AsyncChannel changes (#411)"}},{"before":"188fa9ba27294ba1a62e4f9833f31069d449f427","after":"044339de7bdffddb81cb77fc57fb77ff2e743088","ref":"refs/heads/main","pushedAt":"2023-07-12T10:07:53.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"glbrntt","name":"George Barnett","path":"/glbrntt","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5047671?s=80&v=4"},"commit":{"message":"HTTP/2 negotiated connection pipeline config (#408)\n\nMotivation:\r\n\r\nThis continues the work to expose functionality which allows users to interact\r\nwith HTTP/2 connections via async abstractions and using structured\r\nconcurrency.\r\n\r\nThis work enables protocol negotiation between HTTP/1.1 and HTTP/2 in its most generic form.\r\n\r\nModifications:\r\n\r\nEnable protocol negotiation between HTTP/1.1 and HTTP/2 using typed\r\nnegotiation results (`NIOProtocolNegotiationResult`) from the\r\n`NIOTypedApplicationProtocolNegotiationHandler`.\r\nIn the HTTP/2 case the negotiation result will return the HTTP/2 connection\r\nchannel and the `NIOHTTP2Handler.AsyncStreamMultiplexer` which exposes\r\ninbound streams as an iterable async stream.\r\n\r\nResult:\r\n\r\nUsers will be able to set up negotiated HTTP/1.1 / HTTP/2 connections and\r\niterate over inbound streams.","shortMessageHtmlLink":"HTTP/2 negotiated connection pipeline config (#408)"}},{"before":"d5f0715865f85d02a5ae3c1e4b3fb454a203e998","after":"188fa9ba27294ba1a62e4f9833f31069d449f427","ref":"refs/heads/main","pushedAt":"2023-07-11T15:43:41.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"glbrntt","name":"George Barnett","path":"/glbrntt","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5047671?s=80&v=4"},"commit":{"message":"adopt NIOAsyncChannel.Configuration (#409)\n\nAdopt NIOAsyncChannel.Configuration as the NIO SPI changed","shortMessageHtmlLink":"adopt NIOAsyncChannel.Configuration (#409)"}},{"before":"6e35856efa2e80794ff3d646158cb6c0a3366308","after":"d5f0715865f85d02a5ae3c1e4b3fb454a203e998","ref":"refs/heads/main","pushedAt":"2023-07-05T12:35:47.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"glbrntt","name":"George Barnett","path":"/glbrntt","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5047671?s=80&v=4"},"commit":{"message":"Tweak formatting of function DocC comments (#407)\n\nMotivation:\r\n\r\nTweaking the formatting of the DocC comments enables syntax highlighting\r\nfor parameter names in Xcode\r\n\r\nModifications:\r\n\r\nWhitespace changes, capitalisation changes and added a parameter\r\ndescription for `indexing` in HOACKHeaders `replaceOrAdd`, `add`.\r\n\r\nResult:\r\n\r\nMore readable DocC comments","shortMessageHtmlLink":"Tweak formatting of function DocC comments (#407)"}},{"before":"f6f43195a2751c74b04643688e26b7069e93082e","after":"6e35856efa2e80794ff3d646158cb6c0a3366308","ref":"refs/heads/main","pushedAt":"2023-07-04T16:24:08.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Lukasa","name":"Cory Benfield","path":"/Lukasa","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1382556?s=80&v=4"},"commit":{"message":"Add additional NIOAsyncChannel config (#406)\n\n* Add additional NIOAsyncChannel config\r\n\r\nMotivation:\r\n\r\nRecent additions to pipeline configuration did not expose some of the\r\n`NIOAsyncChannel` configuration.\r\n\r\nModifications:\r\n\r\nExpose `backpressureStrategy`, `isOutboundHalfClosureEnabled`.\r\n\r\nI think specific naming and object encapsulation for these parameters should be discussed\r\nlater before SPI is removed and we review the API as a whole.\r\n\r\nResult:\r\n\r\nPipelie helpers for `NIOAsyncChannel` expose `backpressureStrategy`, `isOutboundHalfClosureEnabled`.\r\n\r\n* review comments, re-order parameters\r\n\r\n* review comments\r\n\r\n* param reordering, missing docs comments","shortMessageHtmlLink":"Add additional NIOAsyncChannel config (#406)"}},{"before":"e0ffed790ae6fe17d17fd826e5e2e3df2581acbe","after":"f6f43195a2751c74b04643688e26b7069e93082e","ref":"refs/heads/main","pushedAt":"2023-07-04T10:09:40.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Lukasa","name":"Cory Benfield","path":"/Lukasa","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1382556?s=80&v=4"},"commit":{"message":"H2 stream AsyncIterator non-sendable on 5.7 (#405)\n\nMotivation:\r\n\r\nMarking `NIOHTTP2InboundStreamChannels.AsyncIterator` as non-sendable\r\nfails to compile on 5.6 however implicitly non-sendable will do, this is\r\na nice-to-have.\r\n\r\nModifications:\r\n\r\nMove the non-sendable annotation to only apply >= 5.7\r\n\r\nResult:\r\n\r\n`NIOHTTP2InboundStreamChannels.AsyncIterator` is implicitly non-sendable\r\non 5.6","shortMessageHtmlLink":"H2 stream AsyncIterator non-sendable on 5.7 (#405)"}},{"before":"b9fe8f57a00913f925b449fafa0cafd6a4064846","after":"e0ffed790ae6fe17d17fd826e5e2e3df2581acbe","ref":"refs/heads/main","pushedAt":"2023-07-04T05:21:57.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"rnro","name":"Rick Newton-Rogers","path":"/rnro","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/104022490?s=80&v=4"},"commit":{"message":"HTTP/2 pipeline NIOAsyncChannel pipeline config (#403)\n\n* HTTP/2 pipeline NIOAsyncChannel pipeline config\r\n\r\nMotivation:\r\n\r\nThis continues the work to expose functionality which allows users to interact\r\nwith HTTP/2 connections via async abstractions and using structured\r\nconcurrency.\r\n\r\nWe build atop of previous work to configure pipelines to deal with\r\nHTTP/2 (with no protocol negotiation) and to wrap connection/stream\r\nchannels with `NIOAsyncChannel`s. This will allow users to iterate over\r\nstreams and HTTP2Frames.\r\n\r\nModifications:\r\n\r\nProvide functions which configure channels and pipelines with the HTTP2\r\nhandler, expose a multiplexer for dealing with streams and wrap\r\nconnection and stream channels with `NIOAsyncChannel`s.\r\n\r\nResult:\r\n\r\nUsers will be able to create and interact with HTTP/2 connections via\r\n`NIOAsyncChannel`s. Because HTTP/2 is a negotiated protocol and we do\r\nnot yet handle it, this is of limited utility.\r\n\r\n* review comments\r\n\r\n* Update Sources/NIOHTTP2/HTTP2ChannelHandler+InlineStreamMultiplexer.swift\r\n\r\nCo-authored-by: George Barnett \r\n\r\n---------\r\n\r\nCo-authored-by: George Barnett ","shortMessageHtmlLink":"HTTP/2 pipeline NIOAsyncChannel pipeline config (#403)"}},{"before":"83c04dbddb2be2e7ec602262353642f16954b0f1","after":"b9fe8f57a00913f925b449fafa0cafd6a4064846","ref":"refs/heads/main","pushedAt":"2023-07-03T10:54:55.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"glbrntt","name":"George Barnett","path":"/glbrntt","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5047671?s=80&v=4"},"commit":{"message":"Inline http2 fixups (#402)\n\nThere are a few places where bugs / poorly structured code crept in during the inline multiplexer work. This attempts to address some of them:\r\n\r\n- overly long lines\r\n- mis-named variables\r\n- unnecessary use of generics in one case","shortMessageHtmlLink":"Inline http2 fixups (#402)"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAES6VjIgA","startCursor":null,"endCursor":null}},"title":"Activity · apple/swift-nio-http2"}