209 Commits

Author SHA1 Message Date
Rick Newton-Rogers
f1f6f77219
Enable Swift 6.1 jobs in CI (#268)
Motivation:

Swift 6.1 has been released, we should add it to our CI coverage.

Modifications:

Add additional Swift 6.1 jobs where appropriate in main.yml,
pull_request.yml

Result:

Improved test coverage.
1.26.0
2025-04-14 10:40:54 +01:00
Marc Prud'hommeaux
8526b90bc4
Ignore return value of signal() on Android (#266)
See https://github.com/apple/swift-nio/pull/3181 and
https://github.com/apple/swift-nio/issues/3180
2025-04-09 13:16:39 +00:00
George Barnett
a0189d045c
Strict concurrency for NIOResumableUpload (#265)
HTTPResumableUpload contains the core logic. It uses an event loop to
synchronize its state internally. Some methods are safe to call from off
of that event loop and have been moved to a new sendable view. The
HTTPResumableUpload type is marked as explicitly not sendable.

As such, most other types now hold on to the sendable view and use that
as the interface to HTTPResumableUpload.

HTTPResumableUploadChannel must be sendable (it's a Channel) and now
uses safe abstractions (where possible).
2025-04-08 09:21:01 +01:00
George Barnett
b6b5e1133f
Strict concurrency for NIONFS3 and NIONFS3Tests (#264) 2025-04-07 15:09:17 +01:00
Rick Newton-Rogers
96bce550c6
Enable macOS CI on pull requests (#258)
Motivation:

* Improve test coverage

Modifications:

Enable macOS CI to be run on pull request commits and make the use of
the nightly runner pool for main.yml jobs explicit.

Result:

Improved test coverage.
2025-04-02 13:08:30 +00:00
George Barnett
cf3de22478
Strict concurrency for NIOExtrasPerformanceTester (#263) 2025-04-02 12:26:48 +00:00
George Barnett
1a16877a1b
Strict concurrency for HTTPServerWithQuiescingDemo (#262) 2025-04-02 13:20:46 +01:00
George Barnett
c92af9d4ef
Strict concurrency for HTTPTypes and friends (#259) 2025-04-01 15:44:08 +00:00
George Barnett
7241067079
Strict concurrency for NIOHTTPResponsiveness and NIOHTTPResponsivenessTests (#261) 2025-04-01 15:32:33 +00:00
George Barnett
dbfdade581
Strict concurrency for NIOWritePCAPDemo, NIOWritePartialPCAPDemo and NIOSOCKSClient (#260) 2025-04-01 15:27:24 +00:00
George Barnett
dc6987e77e
Strict concurrency for NIOSOCKS (#256) 2025-04-01 14:33:46 +00:00
George Barnett
0447b0359e
Strict concurrency for NIOHTTPCompression (#257) 2025-04-01 15:29:54 +01:00
George Barnett
20c59b2d64
Strict concurrency for NIOExtras and NIOExtrasTests (#254) 2025-03-31 11:53:06 +01:00
Rick Newton-Rogers
d8a178ea78
Enable macOS CI on merge to main and daily timer (#255)
Motivation:

* Improve test coverage
* Check test pass/fail status
* Monitor CI throughput

Modifications:

Enable macOS CI to be run on all merges to main and on a daily timer.

Result:

Improved test coverage run out-of-band at the moment so we can get a
feeling for if any changes need to be made in the repo or in the CI
pipelines to ensure timely and stable checks.
2025-03-28 14:29:37 +00:00
Honza Dvorsky
ae4d6b4b9a
Add a missing import to CNIOLinux (#251)
### Motivation:

Stricter import rules mean that using the `sin_addr` property on Linux
requires the explicit CNIOLinux import.

### Modifications:

Added the missing import.

### Result:

Fixes a CI diagnostic.
2025-03-11 12:10:01 +00:00
Rick Newton-Rogers
5308c07e83
Only apply standard swift settings on valid targets (#250)
Only apply standard swift settings on valid targets. The current check
ignores plugins but that is not comprehensive enough.
2025-03-07 15:06:05 +00:00
Rick Newton-Rogers
395a46efbb
Rename nightly_6_1 params to nightly_next (#249)
Rename nightly_6_1 params to nightly_next; see
https://github.com/apple/swift-nio/pull/3122
2025-03-03 14:45:37 +00:00
Guoye Zhang
00f3f72d2f
Eliminate hasPrefix usage for pseudo HTTP header names (#248)
UTF8 view is faster than hasPrefix

rdar://144395951
1.25.0
2025-02-15 18:14:17 -08:00
Rick Newton-Rogers
926c3e19e7
Avoid integer overrun in NIOHTTPResponsiveness (#247)
We use 8*10^9 in `NIOHTTPResponsiveness` however this number will
overrun the integer size on platforms with 32-bit pointer-width such as
watchOS.

This change drops down to use 1*10^9 on such platforms.
2025-01-31 16:00:41 +00:00
Rick Newton-Rogers
c96e65891d
CI use 6.1 nightlies (#246)
CI use 6.1 nightlies now that Swift development is happening in the 6.1
branch
2025-01-30 09:45:57 +00:00
Eric Rosenberg
4804de1953
Responsiveness under Working Conditions (#242)
Implementation of
https://datatracker.ietf.org/doc/draft-ietf-ippm-responsiveness/ (draft
5) with flexible download and upload handlers to suit other use cases as
well.

### Motivation:

The provided handlers are useful for measuring responsiveness and
testing things like performance of proxies

### Modifications:

Add `NIOHTTPResponsiveness` and `NIOHTTPResponsivenessServer`

### Result:

We'll now have an implementation of the Responsiveness under Working
Conditions draft

---------

Co-authored-by: George Barnett <gbarnett@apple.com>
2025-01-21 17:14:26 +00:00
Marc Prud'hommeaux
aa0d902637
Android support (#244)
Add Android support

### Motivation:

Support the Android platform.

### Modifications:

Add Android imports and fix the default temporary directory to be
correct for the OS.

### Result:

The package will build and test on Android.

---------

Co-authored-by: George Barnett <gbarnett@apple.com>
2025-01-14 16:48:42 +00:00
George Barnett
74a143a79f
Fix warnings (#245)
Motivation:

The latest NIO release deprecated a number of APIs and added more
Sendable contraints.

Modifications:

- Use sync APIs where possible
- Use `_deprecated` but not `@deprecated` NIOFileHandle API
- Stop using NIOAny

Result:

No warnings
2025-01-14 11:24:08 +00:00
Eric Rosenberg
066c8e4ccd
support h2 stream resets through user events (#241)
Allow applications to trigger HTTP/2 stream resets while using
NIOHTTPTypesHTTP2's codecs

### Motivation:

Resetting streams with specific error codes is required by some
applications such as those implementing the CONNECT method
(see https://datatracker.ietf.org/doc/html/rfc9113#section-8.5-8).
Unfortunately, the HTTP2ToHTTP codecs don't expose this capability to
applications.

### Modifications:

Introduce an outbound user event applications can trigger when needing
to reset an HTTP/2 stream.

### Result:

Now applications can trigger HTTP/2 stream resets while using the codecs
provided by NIOHTTPTypesHTTP2
2025-01-07 08:05:05 +00:00
Franz Busch
892863568e
Update release.yml (#243)
Update the release.yml file with the latest label changes
2024-12-18 14:09:33 +01:00
Rick Newton-Rogers
5c7978016e
Enable MemberImportVisibility check on all targets (#240)
Enable MemberImportVisibility check on all targets. Use a standard
string header and footer to bracket the new block for ease of updating
in the future with scripts.
2024-12-13 15:07:05 +01:00
Guoye Zhang
fde9d65d2e
Import HTTP resumable upload sample code (#203)
Support HTTP resumable upload.

### Motivation:

Supporting HTTP resumable upload protocol defined in
https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-resumable-upload-05

* Interop version 3: iOS 17.0, macOS 14.0
* Interop version 5: iOS 18.0, macOS 15.0
* Interop version 6: iOS 18.1, macOS 15.1

### Modifications:

2 new public classes, `HTTPResumableUploadHandler` and
`HTTPResumableUploadContext`, and a few other supporting objects to
manage resumable uploads and translate them into regular uploads.

---------

Co-authored-by: Jonathan Flat <jflat@apple.com>
Co-authored-by: Cory Benfield <lukasa@apple.com>
2024-12-11 07:39:13 +00:00
Franz Busch
3efabe7202
Aligning semantic version label check name (#239) 2024-11-28 12:02:48 +00:00
Rick Newton-Rogers
a32874df06
remove unused Swift 6 language mode workflow (#237)
remove unused Swift 6 language mode workflow
2024-11-15 09:54:46 +00:00
Rick Newton-Rogers
646bbeb9e6
add .editorconfig file (#236)
add .editorconfig file
2024-11-15 09:51:09 +00:00
Rick Newton-Rogers
608de0d0a1
Unify main.yml and scheduled.yml, remove 5_8 ref (#235)
### Motivation:

* `main.yml` and `scheduled.yml` are mostly duplicative.
* Scheduled runs failed because of a deprecated reference to a Swift 5.8
pipeline

### Modifications:

* Unify `main.yml` and `scheduled.yml`
* Remove the reference to the 5.8 pipeline

### Result:

Working scheduled runs.
2024-10-29 10:58:40 +00:00
Rick Newton-Rogers
3f776e9aaf
Migrate CI to use GitHub Actions. (#234)
### Motivation:

To migrate to GitHub actions and centralised infrastructure.

### Modifications:

Changes of note:
* Adopt swift-format using rules from SwiftNIO
* Remove scripts and docker files which are no longer needed

### Result:

Feature parity with old CI.
2024-10-28 14:00:57 +00:00
Cory Benfield
11b7d82b51
Use .git in Package.swift paths (#233)
Resolves #232.
2024-10-23 07:54:37 +01:00
Rick Newton-Rogers
2e9746cfc5
LineBasedFrameDecoderTest cleanup (#230)
Remove extraneous `print` statement.

Co-authored-by: Rick Newton-Rogers <rnro@apple.com>
1.24.1
2024-09-11 17:04:50 +01:00
Rick Newton-Rogers
4f888611eb
LineBasedFrameDecoder.decodeLast handle more frames (#229)
### Motivation:

`LineBasedFrameDecoder.decodeLast` throws an error if there is more than
one frame’s worth of bytes remaining in the buffer.

This is in violation of the `NIOSingleStepByteToMessageDecoder`protocol
requirement that this method be called in a loop until all bytes are
decoded.

### Modifications:

* The method now only throws if the decode operation could not return a
frame and there are bytes left in the buffer (previously only the latter
criterion applied).
* Method documentation is updated.
* Test added.

### Result:

`LineBasedFrameDecoder.decodeLast` can cope with more edge cases.

Co-authored-by: Rick Newton-Rogers <rnro@apple.com>
2024-09-11 16:44:42 +01:00
Franz Busch
4ad28d0bbd
Add release.yml (#227) 2024-09-06 11:57:47 +01:00
Dimitri Bouniol
d1ead62745
Conditional Response Compression (#225)
* Added support for conditional response compression

* Updated expectations to be fulfilled via a defer

* Updated compression response predicate to return an intent enum rather than a boolean
1.24.0
2024-07-18 16:19:20 +01:00
Dimitri Bouniol
05c36b5745
Added a test for responding with 304 Not Modified with HTTP compression (#224) 1.23.0 2024-06-18 04:51:32 -07:00
Joannis Orlandos
ef36e67dbb
Use oldHeaders.count when reserving capacity in HTTPFields (#223) 2024-05-20 05:05:55 -07:00
Johannes Weiss
efd416ee15
clean up @retroactive conformances (#222) 2024-05-09 13:02:05 +01:00
David Nadoba
8b9030df7c
Enable automatic compression format detection (#208)
Co-authored-by: Cory Benfield <lukasa@apple.com>
2024-03-26 02:57:29 -07:00
Iceman
3bbec9883a
Fix NIOHTTPDecompression bug for multi-request channels (#221)
Motivation:

`NIOHTTPDecompression` erroneously accumulates decompressed data sizes across multiple requests in a single channel, leading to unwarranted `DecompressionError.limit` errors. This affects applications using persistent connections, as the decompression limits are improperly enforced. This change aims to address and rectify this issue.

Modifications:

- Add initialization of `inflated` within `Decompressor.initializeDecoder`.
- Introduced new tests to validate decompression functionality across multiple requests on the same channel

Result:

This fix ensures each request's decompression size is independently considered, eliminating incorrect limit errors, and enhancing reliability for applications using HTTP compression with persistent connections.
2024-03-20 01:58:49 -07:00
Hovik Melikyan
c992030a2d
Fixed the shutdown order for quiescing demo (#220) 2024-03-18 01:11:05 -07:00
George Barnett
a33bb16e79
Raise minimum swift version to 5.8 (#218) 2024-03-11 08:48:32 +00:00
Adam Fowler
a3b640d7dc
Make HTTP type conversion code public (#216)
* Make HTTP1 type conversion code public

* Convert HTTP1TypeConversionError to struct

---------

Co-authored-by: Franz Busch <f.busch@apple.com>
1.22.0
2024-02-12 02:25:12 -08:00
Johannes Weiss
cdd1580a03
LineBasedFrameDecoder: can be a NIOSingleStepByteToMessageDecoder (#217)
Co-authored-by: Johannes Weiss <johannes@jweiss.io>
2024-02-06 16:31:09 +00:00
Si Beaumont
363da63c19
Add missing availability guards in tests (#214) 1.21.0 2023-12-15 08:05:29 -08:00
Adam Fowler
6717fd068f
Add RemovableChannelHandler comformance to HTTPType channel handlers (#213) 2023-12-06 10:00:50 +00:00
Cory Benfield
7264a5a0d7
Add retroactive marker to test conformances (#212)
Motivation

Nightly CI builds require annotations on retroactive conformances.
We have a few used only in tests, which are totally safe.

Modifications

Add retroactive conformance marker.

Result

Nightly CI works again
2023-11-28 17:53:58 +00:00
Alastair Houghton
373b8bba29
Changes for Musl support. (#211)
Make sure we import `Musl` rather than `Glibc`.
2023-11-28 08:38:46 -08:00