Compare commits

..

No commits in common. "d980863756f18ce023c2acacb60699c785bbabd1" and "e4bd81b3221513221a869c65398ed403a580e12b" have entirely different histories.

45 changed files with 341 additions and 300 deletions

View File

@ -2,6 +2,8 @@
lint = "clippy --workspace --tests --examples --bins -- -Dclippy::todo" lint = "clippy --workspace --tests --examples --bins -- -Dclippy::todo"
lint-all = "clippy --workspace --all-features --tests --examples --bins -- -Dclippy::todo" lint-all = "clippy --workspace --all-features --tests --examples --bins -- -Dclippy::todo"
ci-doctest = "test --workspace --all-features --doc --no-fail-fast -- --nocapture"
# just check the library (without dev deps) # just check the library (without dev deps)
ci-check-min = "hack --workspace check --no-default-features" ci-check-min = "hack --workspace check --no-default-features"
ci-check-lib = "hack --workspace --feature-powerset --depth=2 --exclude-features=io-uring check" ci-check-lib = "hack --workspace --feature-powerset --depth=2 --exclude-features=io-uring check"
@ -13,9 +15,11 @@ ci-check-linux = "hack --workspace --feature-powerset --depth=2 check --tests --
# tests avoiding io-uring feature # tests avoiding io-uring feature
ci-test = "hack --feature-powerset --depth=2 --exclude-features=io-uring test --lib --tests --no-fail-fast -- --nocapture" ci-test = "hack --feature-powerset --depth=2 --exclude-features=io-uring test --lib --tests --no-fail-fast -- --nocapture"
ci-test-rustls-020 = "hack --feature-powerset --depth=2 --exclude-features=io-uring,rustls-0_21,rustls-0_22 test --lib --tests --no-fail-fast -- --nocapture" ci-test-rustls-020 = "hack --feature-powerset --depth=2 --exclude-features=io-uring,rustls-0_21 test --lib --tests --no-fail-fast -- --nocapture"
ci-test-rustls-021 = "hack --feature-powerset --depth=2 --exclude-features=io-uring,rustls-0_20,rustls-0_22 test --lib --tests --no-fail-fast -- --nocapture" ci-test-rustls-021 = "hack --feature-powerset --depth=2 --exclude-features=io-uring,rustls-0_20 test --lib --tests --no-fail-fast -- --nocapture"
ci-test-rustls-022 = "hack --feature-powerset --depth=2 --exclude-features=io-uring,rustls-0_20,rustls-0_21 test --lib --tests --no-fail-fast -- --nocapture"
# tests avoiding io-uring feature on Windows
ci-test-win = "hack --feature-powerset --depth=2 --exclude-features=io-uring test --lib --tests --no-fail-fast -- --nocapture"
# test with io-uring feature # test with io-uring feature
ci-test-linux = "hack --feature-powerset --depth=2 --exclude-features=rustls-0_20,rustls-0_21 test --lib --tests --no-fail-fast -- --nocapture" ci-test-linux = "hack --feature-powerset --depth=2 --exclude-features=rustls-0_20 test --lib --tests --no-fail-fast -- --nocapture"

View File

@ -22,6 +22,7 @@ jobs:
- { name: macOS, os: macos-latest, triple: x86_64-apple-darwin } - { name: macOS, os: macos-latest, triple: x86_64-apple-darwin }
- { name: Windows, os: windows-latest, triple: x86_64-pc-windows-msvc } - { name: Windows, os: windows-latest, triple: x86_64-pc-windows-msvc }
- { name: Windows (MinGW), os: windows-latest, triple: x86_64-pc-windows-gnu } - { name: Windows (MinGW), os: windows-latest, triple: x86_64-pc-windows-gnu }
- { name: Windows (32-bit), os: windows-latest, triple: i686-pc-windows-msvc }
version: version:
- nightly - nightly
@ -43,22 +44,22 @@ jobs:
- name: Install OpenSSL - name: Install OpenSSL
if: matrix.target.os == 'windows-latest' if: matrix.target.os == 'windows-latest'
shell: bash run: choco install openssl -y --forcex64 --no-progress
- name: Set OpenSSL dir in env
if: matrix.target.os == 'windows-latest'
run: | run: |
set -e echo 'OPENSSL_DIR=C:\Program Files\OpenSSL-Win64' | Out-File -FilePath $env:GITHUB_ENV -Append
choco install openssl --version=1.1.1.2100 -y --no-progress echo 'OPENSSL_DIR=C:\Program Files\OpenSSL' | Out-File -FilePath $env:GITHUB_ENV -Append
echo 'OPENSSL_DIR=C:\Program Files\OpenSSL' >> $GITHUB_ENV
echo "RUSTFLAGS=-C target-feature=+crt-static" >> $GITHUB_ENV
- name: Install Rust (${{ matrix.version }}) - name: Install Rust (${{ matrix.version }})
uses: actions-rust-lang/setup-rust-toolchain@v1.8.0 uses: actions-rust-lang/setup-rust-toolchain@v1.8.0
with: with:
toolchain: ${{ matrix.version }} toolchain: ${{ matrix.version }}
- name: Install just, cargo-hack, cargo-nextest, cargo-ci-cache-clean - name: Install cargo-hack and cargo-ci-cache-clean
uses: taiki-e/install-action@v2.33.17 uses: taiki-e/install-action@v2.25.2
with: with:
tool: just,cargo-hack,cargo-nextest,cargo-ci-cache-clean tool: cargo-hack,cargo-ci-cache-clean
- name: check lib - name: check lib
if: > if: >
@ -83,8 +84,10 @@ jobs:
run: cargo ci-check-linux run: cargo ci-check-linux
- name: tests - name: tests
if: matrix.target.os != 'ubuntu-latest' if: >
run: just test matrix.target.os != 'ubuntu-latest'
&& matrix.target.triple != 'x86_64-pc-windows-gnu'
run: cargo ci-test
- name: tests - name: tests
if: matrix.target.os == 'ubuntu-latest' if: matrix.target.os == 'ubuntu-latest'
run: >- run: >-
@ -112,7 +115,7 @@ jobs:
toolchain: nightly toolchain: nightly
- name: Install cargo-hack & cargo-minimal-versions - name: Install cargo-hack & cargo-minimal-versions
uses: taiki-e/install-action@v2.33.17 uses: taiki-e/install-action@v2.25.2
with: with:
tool: cargo-hack,cargo-minimal-versions tool: cargo-hack,cargo-minimal-versions
@ -129,7 +132,7 @@ jobs:
uses: actions-rust-lang/setup-rust-toolchain@v1.8.0 uses: actions-rust-lang/setup-rust-toolchain@v1.8.0
- name: Install cargo-nextest - name: Install cargo-nextest
uses: taiki-e/install-action@v2.33.17 uses: taiki-e/install-action@v2.25.2
with: with:
tool: cargo-nextest tool: cargo-nextest

View File

@ -23,8 +23,9 @@ jobs:
- { name: macOS, os: macos-latest, triple: x86_64-apple-darwin } - { name: macOS, os: macos-latest, triple: x86_64-apple-darwin }
- { name: Windows, os: windows-latest, triple: x86_64-pc-windows-msvc } - { name: Windows, os: windows-latest, triple: x86_64-pc-windows-msvc }
- { name: Windows (MinGW), os: windows-latest, triple: x86_64-pc-windows-gnu } - { name: Windows (MinGW), os: windows-latest, triple: x86_64-pc-windows-gnu }
- { name: Windows (32-bit), os: windows-latest, triple: i686-pc-windows-msvc }
version: version:
- { name: msrv, version: 1.70.0 } - { name: msrv, version: 1.65.0 }
- { name: stable, version: stable } - { name: stable, version: stable }
name: ${{ matrix.target.name }} / ${{ matrix.version.name }} name: ${{ matrix.target.name }} / ${{ matrix.version.name }}
@ -45,29 +46,33 @@ jobs:
- name: Install OpenSSL - name: Install OpenSSL
if: matrix.target.os == 'windows-latest' if: matrix.target.os == 'windows-latest'
shell: bash run: choco install openssl -y --forcex64 --no-progress
- name: Set OpenSSL dir in env
if: matrix.target.os == 'windows-latest'
run: | run: |
set -e echo 'OPENSSL_DIR=C:\Program Files\OpenSSL-Win64' | Out-File -FilePath $env:GITHUB_ENV -Append
choco install openssl --version=1.1.1.2100 -y --no-progress echo 'OPENSSL_DIR=C:\Program Files\OpenSSL' | Out-File -FilePath $env:GITHUB_ENV -Append
echo 'OPENSSL_DIR=C:\Program Files\OpenSSL' >> $GITHUB_ENV
echo "RUSTFLAGS=-C target-feature=+crt-static" >> $GITHUB_ENV
- name: Install Rust (${{ matrix.version.name }}) - name: Install Rust (${{ matrix.version.name }})
uses: actions-rust-lang/setup-rust-toolchain@v1.8.0 uses: actions-rust-lang/setup-rust-toolchain@v1.8.0
with: with:
toolchain: ${{ matrix.version.version }} toolchain: ${{ matrix.version.version }}
- name: Install just, cargo-hack, cargo-nextest, cargo-ci-cache-clean - name: Install cargo-hack and cargo-ci-cache-clean
uses: taiki-e/install-action@v2.33.17 uses: taiki-e/install-action@v2.25.2
with: with:
tool: just,cargo-hack,cargo-nextest,cargo-ci-cache-clean tool: cargo-hack,cargo-ci-cache-clean
- name: Generate Cargo.lock - name: Generate Cargo.lock
run: cargo generate-lockfile run: cargo generate-lockfile
- name: workaround MSRV issues - name: workaround MSRV issues
if: matrix.version.name == 'msrv' if: matrix.version.name == 'msrv'
run: just downgrade-for-msrv run: |
cargo update -p=time --precise=0.3.16
cargo update -p=clap --precise=4.3.24
cargo update -p=clap_lex --precise=0.5.0
cargo update -p=anstyle --precise=1.0.2
- name: check lib - name: check lib
if: > if: >
@ -78,7 +83,7 @@ jobs:
if: matrix.target.os == 'ubuntu-latest' if: matrix.target.os == 'ubuntu-latest'
run: cargo ci-check-lib-linux run: cargo ci-check-lib-linux
- name: check lib - name: check lib
if: matrix.target.triple != 'x86_64-pc-windows-gnu' if: matrix.target.triple == 'x86_64-pc-windows-gnu'
run: cargo ci-check-min run: cargo ci-check-min
- name: check full - name: check full
@ -92,15 +97,30 @@ jobs:
run: cargo ci-check-linux run: cargo ci-check-linux
- name: tests - name: tests
run: just test if: matrix.target.os == 'macos-latest'
run: cargo ci-test
# TODO: re-instate some io-uring tests for PRs - name: tests
if: >
matrix.target.os == 'windows-latest'
&& matrix.target.triple != 'x86_64-pc-windows-gnu'
run: cargo ci-test-win
- name: tests
if: matrix.target.os == 'ubuntu-latest'
run: >-
sudo bash -c "
ulimit -Sl 512
&& ulimit -Hl 512
&& PATH=$PATH:/usr/share/rust/.cargo/bin
&& RUSTUP_TOOLCHAIN=${{ matrix.version.version }} cargo ci-test-rustls-020
&& RUSTUP_TOOLCHAIN=${{ matrix.version.version }} cargo ci-test-rustls-021
&& RUSTUP_TOOLCHAIN=${{ matrix.version.version }} cargo ci-test-linux
"
- name: CI cache clean - name: CI cache clean
run: cargo-ci-cache-clean run: cargo-ci-cache-clean
docs: rustdoc:
name: Documentation name: rustdoc
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
@ -111,10 +131,6 @@ jobs:
with: with:
toolchain: nightly toolchain: nightly
- name: Install just - name: doc tests io-uring
uses: taiki-e/install-action@v2.33.17 run: |
with: sudo bash -c "ulimit -Sl 512 && ulimit -Hl 512 && PATH=$PATH:/usr/share/rust/.cargo/bin && RUSTUP_TOOLCHAIN=nightly cargo ci-doctest"
tool: just
- name: doc tests
run: just test-docs

View File

@ -23,7 +23,7 @@ jobs:
components: llvm-tools-preview components: llvm-tools-preview
- name: Install cargo-llvm-cov - name: Install cargo-llvm-cov
uses: taiki-e/install-action@v2.33.17 uses: taiki-e/install-action@v2.25.2
with: with:
tool: cargo-llvm-cov tool: cargo-llvm-cov
@ -31,9 +31,7 @@ jobs:
run: cargo llvm-cov --workspace --all-features --codecov --output-path codecov.json run: cargo llvm-cov --workspace --all-features --codecov --output-path codecov.json
- name: Upload coverage to Codecov - name: Upload coverage to Codecov
uses: codecov/codecov-action@v4.3.1 uses: codecov/codecov-action@v3.1.4
with: with:
files: codecov.json files: codecov.json
fail_ci_if_error: true fail_ci_if_error: true
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}

View File

@ -55,12 +55,12 @@ jobs:
toolchain: nightly-2023-10-10 toolchain: nightly-2023-10-10
- name: Install just - name: Install just
uses: taiki-e/install-action@v2.33.17 uses: taiki-e/install-action@v2.25.2
with: with:
tool: just tool: just
- name: Install cargo-check-external-types - name: Install cargo-check-external-types
uses: taiki-e/cache-cargo-install-action@v2.0.0 uses: taiki-e/cache-cargo-install-action@v1.3.0
with: with:
tool: cargo-check-external-types@0.1.10 tool: cargo-check-external-types@0.1.10

View File

@ -30,7 +30,7 @@ jobs:
run: echo '<meta http-equiv="refresh" content="0;url=actix_server/index.html">' > target/doc/index.html run: echo '<meta http-equiv="refresh" content="0;url=actix_server/index.html">' > target/doc/index.html
- name: Deploy to GitHub Pages - name: Deploy to GitHub Pages
uses: JamesIves/github-pages-deploy-action@v4.6.0 uses: JamesIves/github-pages-deploy-action@v4.5.0
with: with:
folder: target/doc folder: target/doc
single-commit: true single-commit: true

View File

@ -1,5 +1,4 @@
[workspace] [workspace]
resolver = "2"
members = [ members = [
"actix-codec", "actix-codec",
"actix-macros", "actix-macros",
@ -13,11 +12,12 @@ members = [
"local-channel", "local-channel",
"local-waker", "local-waker",
] ]
resolver = "2"
[workspace.package] [workspace.package]
license = "MIT OR Apache-2.0" license = "MIT OR Apache-2.0"
edition = "2021" edition = "2021"
rust-version = "1.70" rust-version = "1.65"
[patch.crates-io] [patch.crates-io]
actix-codec = { path = "actix-codec" } actix-codec = { path = "actix-codec" }

View File

@ -2,20 +2,20 @@
## Unreleased ## Unreleased
- Minimum supported Rust version (MSRV) is now 1.70.
## 0.5.2
- Minimum supported Rust version (MSRV) is now 1.65. - Minimum supported Rust version (MSRV) is now 1.65.
## 0.5.1 ## 0.5.1
- Logs emitted now use the `tracing` crate with `log` compatibility. - Logs emitted now use the `tracing` crate with `log` compatibility. [#451]
- Minimum supported Rust version (MSRV) is now 1.49. - Minimum supported Rust version (MSRV) is now 1.49.
[#451]: https://github.com/actix/actix-net/pull/451
## 0.5.0 ## 0.5.0
- Updated `tokio-util` dependency to `0.7.0`. - Updated `tokio-util` dependency to `0.7.0`. [#446]
[#446]: https://github.com/actix/actix-net/pull/446
## 0.4.2 ## 0.4.2
@ -23,8 +23,11 @@
## 0.4.1 ## 0.4.1
- Added `LinesCodec`. - Added `LinesCodec.` [#338]
- `Framed::poll_ready` flushes when the buffer is full. - `Framed::poll_ready` flushes when the buffer is full. [#409]
[#338]: https://github.com/actix/actix-net/pull/338
[#409]: https://github.com/actix/actix-net/pull/409
## 0.4.0 ## 0.4.0
@ -32,10 +35,12 @@
## 0.4.0-beta.1 ## 0.4.0-beta.1
- Replace `pin-project` with `pin-project-lite`. - Replace `pin-project` with `pin-project-lite`. [#237]
- Upgrade `tokio` dependency to `1`. - Upgrade `tokio` dependency to `1`. [#237]
- Upgrade `tokio-util` dependency to `0.6`. - Upgrade `tokio-util` dependency to `0.6`. [#237]
- Upgrade `bytes` dependency to `1`. - Upgrade `bytes` dependency to `1`. [#237]
[#237]: https://github.com/actix/actix-net/pull/237
## 0.3.0 ## 0.3.0

View File

@ -1,6 +1,6 @@
[package] [package]
name = "actix-codec" name = "actix-codec"
version = "0.5.2" version = "0.5.1"
authors = [ authors = [
"Nikolay Kim <fafhrd91@gmail.com>", "Nikolay Kim <fafhrd91@gmail.com>",
"Rob Ede <robjtede@icloud.com>", "Rob Ede <robjtede@icloud.com>",

View File

@ -2,8 +2,6 @@
## Unreleased ## Unreleased
- Minimum supported Rust version (MSRV) is now 1.70.
## 0.2.4 ## 0.2.4
- Update `syn` dependency to `2`. - Update `syn` dependency to `2`.

View File

@ -31,6 +31,7 @@ proc-macro2 = "1.0.60"
[dev-dependencies] [dev-dependencies]
actix-rt = "2" actix-rt = "2"
futures-util = { version = "0.3.17", default-features = false } futures-util = { version = "0.3.17", default-features = false }
rustversion-msrv = "0.99" rustversion = "1"
trybuild = "1" trybuild = "1"

View File

@ -1,4 +1,4 @@
#[rustversion_msrv::msrv] #[rustversion::stable(1.65)] // MSRV
#[test] #[test]
fn compile_macros() { fn compile_macros() {
let t = trybuild::TestCases::new(); let t = trybuild::TestCases::new();

View File

@ -2,8 +2,6 @@
## Unreleased ## Unreleased
- Minimum supported Rust version (MSRV) is now 1.70.
## 2.9.0 ## 2.9.0
- Add `actix_rt::System::runtime()` method to retrieve the underlying `actix_rt::Runtime` runtime. - Add `actix_rt::System::runtime()` method to retrieve the underlying `actix_rt::Runtime` runtime.
@ -12,105 +10,150 @@
## 2.8.0 ## 2.8.0
- Add `#[track_caller]` attribute to `spawn` functions and methods. - Add `#[track_caller]` attribute to `spawn` functions and methods. [#454]
- Update `tokio-uring` dependency to `0.4`. - Update `tokio-uring` dependency to `0.4`. [#473]
- Minimum supported Rust version (MSRV) is now 1.59. - Minimum supported Rust version (MSRV) is now 1.59.
[#454]: https://github.com/actix/actix-net/pull/454
[#473]: https://github.com/actix/actix-net/pull/473
## 2.7.0 ## 2.7.0
- Update `tokio-uring` dependency to `0.3`. - Update `tokio-uring` dependency to `0.3`. [#448]
- Minimum supported Rust version (MSRV) is now 1.49. - Minimum supported Rust version (MSRV) is now 1.49.
[#448]: https://github.com/actix/actix-net/pull/448
## 2.6.0 ## 2.6.0
- Update `tokio-uring` dependency to `0.2`. - Update `tokio-uring` dependency to `0.2`. [#436]
[#436]: https://github.com/actix/actix-net/pull/436
## 2.5.1 ## 2.5.1
- Expose `System::with_tokio_rt` and `Arbiter::with_tokio_rt`. - Expose `System::with_tokio_rt` and `Arbiter::with_tokio_rt`. [#430]
[#430]: https://github.com/actix/actix-net/pull/430
## 2.5.0 ## 2.5.0
- Add `System::run_with_code` to allow retrieving the exit code on stop. - Add `System::run_with_code` to allow retrieving the exit code on stop. [#411]
[#411]: https://github.com/actix/actix-net/pull/411
## 2.4.0 ## 2.4.0
- Add `Arbiter::try_current` for situations where thread may or may not have Arbiter context. - Add `Arbiter::try_current` for situations where thread may or may not have Arbiter context. [#408]
- Start io-uring with `System::new` when feature is enabled. - Start io-uring with `System::new` when feature is enabled. [#395]
[#395]: https://github.com/actix/actix-net/pull/395
[#408]: https://github.com/actix/actix-net/pull/408
## 2.3.0 ## 2.3.0
- The `spawn` method can now resolve with non-unit outputs. - The `spawn` method can now resolve with non-unit outputs. [#369]
- Add experimental (semver-exempt) `io-uring` feature for enabling async file I/O on linux. - Add experimental (semver-exempt) `io-uring` feature for enabling async file I/O on linux. [#374]
[#369]: https://github.com/actix/actix-net/pull/369
[#374]: https://github.com/actix/actix-net/pull/374
## 2.2.0 ## 2.2.0
- **BREAKING** `ActixStream::{poll_read_ready, poll_write_ready}` methods now return `Ready` object in ok variant. - **BREAKING** `ActixStream::{poll_read_ready, poll_write_ready}` methods now return `Ready` object in ok variant. [#293]
- Breakage is acceptable since `ActixStream` was not intended to be public. - Breakage is acceptable since `ActixStream` was not intended to be public.
[#293]: https://github.com/actix/actix-net/pull/293
## 2.1.0 ## 2.1.0
- Add `ActixStream` extension trait to include readiness methods. - Add `ActixStream` extension trait to include readiness methods. [#276]
- Re-export `tokio::net::TcpSocket` in `net` module - Re-export `tokio::net::TcpSocket` in `net` module [#282]
[#276]: https://github.com/actix/actix-net/pull/276
[#282]: https://github.com/actix/actix-net/pull/282
## 2.0.2 ## 2.0.2
- Add `Arbiter::handle` to get a handle of an owned Arbiter. - Add `Arbiter::handle` to get a handle of an owned Arbiter. [#274]
- Add `System::try_current` for situations where actix may or may not be running a System. - Add `System::try_current` for situations where actix may or may not be running a System. [#275]
[#274]: https://github.com/actix/actix-net/pull/274
[#275]: https://github.com/actix/actix-net/pull/275
## 2.0.1 ## 2.0.1
- Expose `JoinError` from Tokio. - Expose `JoinError` from Tokio. [#271]
[#271]: https://github.com/actix/actix-net/pull/271
## 2.0.0 ## 2.0.0
- Remove all Arbiter-local storage methods. - Remove all Arbiter-local storage methods. [#262]
- Re-export `tokio::pin`. - Re-export `tokio::pin`. [#262]
[#262]: https://github.com/actix/actix-net/pull/262
## 2.0.0-beta.3 ## 2.0.0-beta.3
- Remove `run_in_tokio`, `attach_to_tokio` and `AsyncSystemRunner`. - Remove `run_in_tokio`, `attach_to_tokio` and `AsyncSystemRunner`. [#253]
- Return `JoinHandle` from `actix_rt::spawn`. - Return `JoinHandle` from `actix_rt::spawn`. [#253]
- Remove old `Arbiter::spawn`. Implementation is now inlined into `actix_rt::spawn`. - Remove old `Arbiter::spawn`. Implementation is now inlined into `actix_rt::spawn`. [#253]
- Rename `Arbiter::{send => spawn}` and `Arbiter::{exec_fn => spawn_fn}`. - Rename `Arbiter::{send => spawn}` and `Arbiter::{exec_fn => spawn_fn}`. [#253]
- Remove `Arbiter::exec`. - Remove `Arbiter::exec`. [#253]
- Remove deprecated `Arbiter::local_join` and `Arbiter::is_running`. - Remove deprecated `Arbiter::local_join` and `Arbiter::is_running`. [#253]
- `Arbiter::spawn` now accepts !Unpin futures. - `Arbiter::spawn` now accepts !Unpin futures. [#256]
- `System::new` no longer takes arguments. - `System::new` no longer takes arguments. [#257]
- Remove `System::with_current`. - Remove `System::with_current`. [#257]
- Remove `Builder`. - Remove `Builder`. [#257]
- Add `System::with_init` as replacement for `Builder::run`. - Add `System::with_init` as replacement for `Builder::run`. [#257]
- Rename `System::{is_set => is_registered}`. - Rename `System::{is_set => is_registered}`. [#257]
- Add `ArbiterHandle` for sending messages to non-current-thread arbiters. - Add `ArbiterHandle` for sending messages to non-current-thread arbiters. [#257].
- `System::arbiter` now returns an `&ArbiterHandle`. - `System::arbiter` now returns an `&ArbiterHandle`. [#257]
- `Arbiter::current` now returns an `ArbiterHandle` instead. - `Arbiter::current` now returns an `ArbiterHandle` instead. [#257]
- `Arbiter::join` now takes self by value. - `Arbiter::join` now takes self by value. [#257]
[#253]: https://github.com/actix/actix-net/pull/253
[#254]: https://github.com/actix/actix-net/pull/254
[#256]: https://github.com/actix/actix-net/pull/256
[#257]: https://github.com/actix/actix-net/pull/257
## 2.0.0-beta.2 ## 2.0.0-beta.2
- Add `task` mod with re-export of `tokio::task::{spawn_blocking, yield_now, JoinHandle}` - Add `task` mod with re-export of `tokio::task::{spawn_blocking, yield_now, JoinHandle}` [#245]
- Add default "macros" feature to allow faster compile times when using `default-features=false`. - Add default "macros" feature to allow faster compile times when using `default-features=false`.
[#245]: https://github.com/actix/actix-net/pull/245
## 2.0.0-beta.1 ## 2.0.0-beta.1
- Add `System::attach_to_tokio` method. - Add `System::attach_to_tokio` method. [#173]
- Update `tokio` dependency to `1.0`. - Update `tokio` dependency to `1.0`. [#236]
- Rename `time` module `delay_for` to `sleep`, `delay_until` to `sleep_until`, `Delay` to `Sleep` to stay aligned with Tokio's naming. - Rename `time` module `delay_for` to `sleep`, `delay_until` to `sleep_until`, `Delay` to `Sleep` to stay aligned with Tokio's naming. [#236]
- Remove `'static` lifetime requirement for `Runtime::block_on` and `SystemRunner::block_on`. - Remove `'static` lifetime requirement for `Runtime::block_on` and `SystemRunner::block_on`.
- These methods now accept `&self` when calling. - These methods now accept `&self` when calling. [#236]
- Remove `'static` lifetime requirement for `System::run` and `Builder::run`. - Remove `'static` lifetime requirement for `System::run` and `Builder::run`. [#236]
- `Arbiter::spawn` now panics when `System` is not in scope. - `Arbiter::spawn` now panics when `System` is not in scope. [#207]
- Fix work load issue by removing `PENDING` thread local. - Fix work load issue by removing `PENDING` thread local. [#207]
[#207]: https://github.com/actix/actix-net/pull/207
[#236]: https://github.com/actix/actix-net/pull/236
## 1.1.1 ## 1.1.1
- Fix memory leak due to - Fix memory leak due to [#94] (see [#129] for more detail)
[#129]: https://github.com/actix/actix-net/issues/129
## 1.1.0 _(YANKED)_ ## 1.1.0 _(YANKED)_
- Expose `System::is_set` to check if current system has ben started - Expose `System::is_set` to check if current system has ben started [#99]
- Add `Arbiter::is_running` to check if event loop is running - Add `Arbiter::is_running` to check if event loop is running [#124]
- Add `Arbiter::local_join` associated function to get be able to `await` for spawned futures - Add `Arbiter::local_join` associated function to get be able to `await` for spawned futures [#94]
[#94]: https://github.com/actix/actix-net/pull/94
[#99]: https://github.com/actix/actix-net/pull/99
[#124]: https://github.com/actix/actix-net/pull/124
## 1.0.0 ## 1.0.0

View File

@ -16,7 +16,7 @@ use crate::system::{System, SystemCommand};
pub(crate) static COUNT: AtomicUsize = AtomicUsize::new(0); pub(crate) static COUNT: AtomicUsize = AtomicUsize::new(0);
thread_local!( thread_local!(
static HANDLE: RefCell<Option<ArbiterHandle>> = const { RefCell::new(None) }; static HANDLE: RefCell<Option<ArbiterHandle>> = RefCell::new(None);
); );
pub(crate) enum ArbiterCommand { pub(crate) enum ArbiterCommand {

View File

@ -34,7 +34,6 @@
//! ``` //! ```
//! //!
//! # `io-uring` Support //! # `io-uring` Support
//!
//! There is experimental support for using io-uring with this crate by enabling the //! There is experimental support for using io-uring with this crate by enabling the
//! `io-uring` feature. For now, it is semver exempt. //! `io-uring` feature. For now, it is semver exempt.
//! //!

View File

@ -16,7 +16,7 @@ use crate::{arbiter::ArbiterHandle, Arbiter};
static SYSTEM_COUNT: AtomicUsize = AtomicUsize::new(0); static SYSTEM_COUNT: AtomicUsize = AtomicUsize::new(0);
thread_local!( thread_local!(
static CURRENT: RefCell<Option<System>> = const { RefCell::new(None) }; static CURRENT: RefCell<Option<System>> = RefCell::new(None);
); );
/// A manager for a per-thread distributed async runtime. /// A manager for a per-thread distributed async runtime.

View File

@ -2,8 +2,6 @@
## Unreleased ## Unreleased
- Minimum supported Rust version (MSRV) is now 1.70.
## 2.3.0 ## 2.3.0
- Add support for MultiPath TCP (MPTCP) with `MpTcp` enum and `ServerBuilder::mptcp()` method. - Add support for MultiPath TCP (MPTCP) with `MpTcp` enum and `ServerBuilder::mptcp()` method.
@ -12,7 +10,9 @@
## 2.2.0 ## 2.2.0
- Minimum supported Rust version (MSRV) is now 1.59. - Minimum supported Rust version (MSRV) is now 1.59.
- Update `tokio-uring` dependency to `0.4`. - Update `tokio-uring` dependency to `0.4`. [#473]
[#473]: https://github.com/actix/actix-net/pull/473
## 2.1.1 ## 2.1.1
@ -20,9 +20,12 @@
## 2.1.0 ## 2.1.0
- Update `tokio-uring` dependency to `0.3`. - Update `tokio-uring` dependency to `0.3`. [#448]
- Logs emitted now use the `tracing` crate with `log` compatibility. - Logs emitted now use the `tracing` crate with `log` compatibility. [#448]
- Wait for accept thread to stop before sending completion signal. - Wait for accept thread to stop before sending completion signal. [#443]
[#443]: https://github.com/actix/actix-net/pull/443
[#448]: https://github.com/actix/actix-net/pull/448
## 2.0.0 ## 2.0.0
@ -30,7 +33,9 @@
## 2.0.0-rc.4 ## 2.0.0-rc.4
- Update `tokio-uring` dependency to `0.2`. - Update `tokio-uring` dependency to `0.2`. [#436]
[#436]: https://github.com/actix/actix-net/pull/436
## 2.0.0-rc.3 ## 2.0.0-rc.3
@ -38,80 +43,117 @@
## 2.0.0-rc.2 ## 2.0.0-rc.2
- Simplify `TestServer`. - Simplify `TestServer`. [#431]
[#431]: https://github.com/actix/actix-net/pull/431
## 2.0.0-rc.1 ## 2.0.0-rc.1
- Hide implementation details of `Server`. - Hide implementation details of `Server`. [#424]
- `Server` now runs only after awaiting it. - `Server` now runs only after awaiting it. [#425]
[#424]: https://github.com/actix/actix-net/pull/424
[#425]: https://github.com/actix/actix-net/pull/425
## 2.0.0-beta.9 ## 2.0.0-beta.9
- Restore `Arbiter` support lost in `beta.8`. - Restore `Arbiter` support lost in `beta.8`. [#417]
[#417]: https://github.com/actix/actix-net/pull/417
## 2.0.0-beta.8 ## 2.0.0-beta.8
- Fix non-unix signal handler. - Fix non-unix signal handler. [#410]
[#410]: https://github.com/actix/actix-net/pull/410
## 2.0.0-beta.7 ## 2.0.0-beta.7
- Server can be started in regular Tokio runtime. - Server can be started in regular Tokio runtime. [#408]
- Expose new `Server` type whose `Future` impl resolves when server stops. - Expose new `Server` type whose `Future` impl resolves when server stops. [#408]
- Rename `Server` to `ServerHandle`. - Rename `Server` to `ServerHandle`. [#407]
- Add `Server::handle` to obtain handle to server. - Add `Server::handle` to obtain handle to server. [#408]
- Rename `ServerBuilder::{maxconn => max_concurrent_connections}`. - Rename `ServerBuilder::{maxconn => max_concurrent_connections}`. [#407]
- Deprecate crate-level `new` shortcut for server builder. - Deprecate crate-level `new` shortcut for server builder. [#408]
- Minimum supported Rust version (MSRV) is now 1.52. - Minimum supported Rust version (MSRV) is now 1.52.
[#407]: https://github.com/actix/actix-net/pull/407
[#408]: https://github.com/actix/actix-net/pull/408
## 2.0.0-beta.6 ## 2.0.0-beta.6
- Add experimental (semver-exempt) `io-uring` feature for enabling async file I/O on linux. - Add experimental (semver-exempt) `io-uring` feature for enabling async file I/O on linux. [#374]
- Server no long listens to `SIGHUP` signal. Previously, the received was not used but did block subsequent exit signals from working. - Server no long listens to `SIGHUP` signal. Previously, the received was not used but did block subsequent exit signals from working. [#389]
- Remove `config` module. `ServiceConfig`, `ServiceRuntime` public types are removed due to this change. - Remove `config` module. `ServiceConfig`, `ServiceRuntime` public types are removed due to this change. [#349]
- Remove `ServerBuilder::configure`. - Remove `ServerBuilder::configure` [#349]
[#374]: https://github.com/actix/actix-net/pull/374
[#349]: https://github.com/actix/actix-net/pull/349
[#389]: https://github.com/actix/actix-net/pull/389
## 2.0.0-beta.5 ## 2.0.0-beta.5
- Server shutdown notifies all workers to exit regardless if shutdown is graceful. This causes all workers to shutdown immediately in force shutdown case. - Server shutdown notifies all workers to exit regardless if shutdown is graceful. This causes all workers to shutdown immediately in force shutdown case. [#333]
[#333]: https://github.com/actix/actix-net/pull/333
## 2.0.0-beta.4 ## 2.0.0-beta.4
- Prevent panic when `shutdown_timeout` is very large. [f9262db] - Prevent panic when `shutdown_timeout` is very large. [f9262db]
[f9262db]: https://github.com/actix/actix-net/commit/f9262db
## 2.0.0-beta.3 ## 2.0.0-beta.3
- Hidden `ServerBuilder::start` method has been removed. Use `ServerBuilder::run`. - Hidden `ServerBuilder::start` method has been removed. Use `ServerBuilder::run`. [#246]
- Add retry for EINTR signal (`io::Interrupted`) in `Accept`'s poll loop. - Add retry for EINTR signal (`io::Interrupted`) in `Accept`'s poll loop. [#264]
- Add `ServerBuilder::worker_max_blocking_threads` to customize blocking thread pool size. - Add `ServerBuilder::worker_max_blocking_threads` to customize blocking thread pool size. [#265]
- Update `actix-rt` to `2.0.0`. - Update `actix-rt` to `2.0.0`. [#273]
[#246]: https://github.com/actix/actix-net/pull/246
[#264]: https://github.com/actix/actix-net/pull/264
[#265]: https://github.com/actix/actix-net/pull/265
[#273]: https://github.com/actix/actix-net/pull/273
## 2.0.0-beta.2 ## 2.0.0-beta.2
- Merge `actix-testing` to `actix-server` as `test_server` mod. - Merge `actix-testing` to `actix-server` as `test_server` mod. [#242]
[#242]: https://github.com/actix/actix-net/pull/242
## 2.0.0-beta.1 ## 2.0.0-beta.1
- Added explicit info log message on accept queue pause. - Added explicit info log message on accept queue pause. [#215]
- Prevent double registration of sockets when back-pressure is resolved. - Prevent double registration of sockets when back-pressure is resolved. [#223]
- Update `mio` dependency to `0.7.3`. - Update `mio` dependency to `0.7.3`. [#239]
- Remove `socket2` dependency. - Remove `socket2` dependency. [#239]
- `ServerBuilder::backlog` now accepts `u32` instead of `i32`. - `ServerBuilder::backlog` now accepts `u32` instead of `i32`. [#239]
- Remove `AcceptNotify` type and pass `WakerQueue` to `Worker` to wake up `Accept`'s `Poll`. - Remove `AcceptNotify` type and pass `WakerQueue` to `Worker` to wake up `Accept`'s `Poll`. [#239]
- Convert `mio::net::TcpStream` to `actix_rt::net::TcpStream`(`UnixStream` for uds) using `FromRawFd` and `IntoRawFd`(`FromRawSocket` and `IntoRawSocket` on windows). - Convert `mio::net::TcpStream` to `actix_rt::net::TcpStream`(`UnixStream` for uds) using `FromRawFd` and `IntoRawFd`(`FromRawSocket` and `IntoRawSocket` on windows). [#239]
- Remove `AsyncRead` and `AsyncWrite` trait bound for `socket::FromStream` trait. - Remove `AsyncRead` and `AsyncWrite` trait bound for `socket::FromStream` trait. [#239]
[#215]: https://github.com/actix/actix-net/pull/215
[#223]: https://github.com/actix/actix-net/pull/223
[#239]: https://github.com/actix/actix-net/pull/239
## 1.0.4 ## 1.0.4
- Update actix-codec to 0.3.0. - Update actix-codec to 0.3.0.
- Workers must be greater than 0. - Workers must be greater than 0. [#167]
[#167]: https://github.com/actix/actix-net/pull/167
## 1.0.3 ## 1.0.3
- Replace deprecated `net2` crate with `socket2`. - Replace deprecated `net2` crate with `socket2` [#140]
[#140]: https://github.com/actix/actix-net/pull/140
## 1.0.2 ## 1.0.2
- Avoid error by calling `reregister()` on Windows. - Avoid error by calling `reregister()` on Windows [#103]
[#103]: https://github.com/actix/actix-net/pull/103
## 1.0.1 ## 1.0.1

View File

@ -10,7 +10,7 @@ description = "General purpose TCP server built for the Actix ecosystem"
keywords = ["network", "tcp", "server", "framework", "async"] keywords = ["network", "tcp", "server", "framework", "async"]
categories = ["network-programming", "asynchronous"] categories = ["network-programming", "asynchronous"]
homepage = "https://actix.rs" homepage = "https://actix.rs"
repository = "https://github.com/actix/actix-net/tree/master/actix-server" repository = "https://github.com/actix/actix-net.git"
license = "MIT OR Apache-2.0" license = "MIT OR Apache-2.0"
edition.workspace = true edition.workspace = true
rust-version.workspace = true rust-version.workspace = true

View File

@ -2,7 +2,7 @@
## Unreleased ## Unreleased
- Minimum supported Rust version (MSRV) is now 1.70. - Minimum supported Rust version (MSRV) is now 1.65.
## 2.0.2 ## 2.0.2

View File

@ -208,13 +208,15 @@ where
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use core::task::Poll;
use futures_util::future::lazy; use futures_util::future::lazy;
use super::*; use super::*;
use crate::{ use crate::{
ok, ok,
pipeline::{pipeline, pipeline_factory}, pipeline::{pipeline, pipeline_factory},
Ready, Ready, Service, ServiceFactory,
}; };
#[derive(Clone)] #[derive(Clone)]

View File

@ -351,6 +351,7 @@ mod tests {
use futures_util::future::lazy; use futures_util::future::lazy;
use super::*; use super::*;
use crate::{ok, Service, ServiceFactory};
#[actix_rt::test] #[actix_rt::test]
async fn test_fn_service() { async fn test_fn_service() {

View File

@ -202,7 +202,9 @@ mod tests {
use futures_util::future::lazy; use futures_util::future::lazy;
use super::*; use super::*;
use crate::{ok, IntoServiceFactory, Ready, ServiceExt, ServiceFactoryExt}; use crate::{
ok, IntoServiceFactory, Ready, Service, ServiceExt, ServiceFactory, ServiceFactoryExt,
};
struct Srv; struct Srv;

View File

@ -205,7 +205,9 @@ mod tests {
use futures_util::future::lazy; use futures_util::future::lazy;
use super::*; use super::*;
use crate::{err, ok, IntoServiceFactory, Ready, ServiceExt, ServiceFactoryExt}; use crate::{
err, ok, IntoServiceFactory, Ready, Service, ServiceExt, ServiceFactory, ServiceFactoryExt,
};
struct Srv; struct Srv;

View File

@ -226,6 +226,7 @@ mod tests {
use actix_utils::future::{ready, Ready}; use actix_utils::future::{ready, Ready};
use super::*; use super::*;
use crate::Service;
// pseudo-doctest for Transform trait // pseudo-doctest for Transform trait
pub struct TimeoutTransform { pub struct TimeoutTransform {

View File

@ -2,12 +2,6 @@
## Unreleased ## Unreleased
- Minimum supported Rust version (MSRV) is now 1.70.
## 3.3.0
- Add `rustls-0_22` create feature which excludes any root certificate methods or re-exports.
## 3.2.0 ## 3.2.0
- Support Rustls v0.22. - Support Rustls v0.22.

View File

@ -1,6 +1,6 @@
[package] [package]
name = "actix-tls" name = "actix-tls"
version = "3.3.0" version = "3.2.0"
authors = [ authors = [
"Nikolay Kim <fafhrd91@gmail.com>", "Nikolay Kim <fafhrd91@gmail.com>",
"Rob Ede <robjtede@icloud.com>", "Rob Ede <robjtede@icloud.com>",
@ -57,9 +57,8 @@ rustls-0_21-webpki-roots = ["tokio-rustls-024", "webpki-roots-025"]
rustls-0_21-native-roots = ["tokio-rustls-024", "dep:rustls-native-certs-06"] rustls-0_21-native-roots = ["tokio-rustls-024", "dep:rustls-native-certs-06"]
# use rustls v0.22 impls # use rustls v0.22 impls
rustls-0_22 = ["dep:tokio-rustls-025", "dep:rustls-pki-types-1"] rustls-0_22-webpki-roots = ["dep:tokio-rustls-025", "dep:rustls-pki-types-1", "dep:webpki-roots-026"]
rustls-0_22-webpki-roots = ["rustls-0_22", "dep:webpki-roots-026"] rustls-0_22-native-roots = ["dep:tokio-rustls-025", "dep:rustls-pki-types-1", "dep:rustls-native-certs-07"]
rustls-0_22-native-roots = ["rustls-0_22", "dep:rustls-native-certs-07"]
# use native-tls impls # use native-tls impls
native-tls = ["dep:tokio-native-tls"] native-tls = ["dep:tokio-native-tls"]
@ -117,11 +116,11 @@ bytes = "1"
env_logger = "0.11" env_logger = "0.11"
futures-util = { version = "0.3.17", default-features = false, features = ["sink"] } futures-util = { version = "0.3.17", default-features = false, features = ["sink"] }
itertools = "0.12" itertools = "0.12"
rcgen = "0.12" rcgen = "0.11"
rustls-pemfile = "2" rustls-pemfile = "2"
tokio-rustls-025 = { package = "tokio-rustls", version = "0.25" } tokio-rustls-025 = { package = "tokio-rustls", version = "0.25" }
trust-dns-resolver = "0.23" trust-dns-resolver = "0.23"
[[example]] [[example]]
name = "accept-rustls" name = "accept-rustls"
required-features = ["accept", "rustls-0_22"] required-features = ["accept", "rustls-0_22-webpki-roots"]

View File

@ -1,21 +0,0 @@
# `actix-tls`
> TLS acceptor and connector services for the Actix ecosystem.
<!-- prettier-ignore-start -->
[![crates.io](https://img.shields.io/crates/v/actix-tls?label=latest)](https://crates.io/crates/actix-tls)
[![Documentation](https://docs.rs/actix-tls/badge.svg?version=3.3.0)](https://docs.rs/actix-tls/3.3.0)
[![Version](https://img.shields.io/badge/rustc-1.52+-ab6000.svg)](https://blog.rust-lang.org/2021/05/06/Rust-1.52.0.html)
![MIT or Apache 2.0 licensed](https://img.shields.io/crates/l/actix-tls.svg)
<br />
[![Dependency Status](https://deps.rs/crate/actix-tls/3.3.0/status.svg)](https://deps.rs/crate/actix-tls/3.3.0)
![Download](https://img.shields.io/crates/d/actix-tls.svg)
[![Chat on Discord](https://img.shields.io/discord/771444961383153695?label=chat&logo=discord)](https://discord.gg/NWpN5mmg3x)
<!-- prettier-ignore-end -->
## Resources
- [Library Documentation](https://docs.rs/actix-tls)
- [Examples](/actix-tls/examples)

View File

@ -22,7 +22,10 @@ pub use rustls_0_20 as rustls;
#[cfg(feature = "rustls-0_21")] #[cfg(feature = "rustls-0_21")]
pub mod rustls_0_21; pub mod rustls_0_21;
#[cfg(feature = "rustls-0_22")] #[cfg(any(
feature = "rustls-0_22-webpki-roots",
feature = "rustls-0_22-native-roots",
))]
pub mod rustls_0_22; pub mod rustls_0_22;
#[cfg(feature = "native-tls")] #[cfg(feature = "native-tls")]
@ -34,7 +37,8 @@ pub(crate) static MAX_CONN: AtomicUsize = AtomicUsize::new(256);
feature = "openssl", feature = "openssl",
feature = "rustls-0_20", feature = "rustls-0_20",
feature = "rustls-0_21", feature = "rustls-0_21",
feature = "rustls-0_22", feature = "rustls-0_22-webpki-roots",
feature = "rustls-0_22-native-roots",
feature = "native-tls", feature = "native-tls",
))] ))]
pub(crate) const DEFAULT_TLS_HANDSHAKE_TIMEOUT: std::time::Duration = pub(crate) const DEFAULT_TLS_HANDSHAKE_TIMEOUT: std::time::Duration =

View File

@ -46,7 +46,10 @@ pub use rustls_0_20 as rustls;
))] ))]
pub mod rustls_0_21; pub mod rustls_0_21;
#[cfg(feature = "rustls-0_22")] #[cfg(any(
feature = "rustls-0_22-webpki-roots",
feature = "rustls-0_22-native-roots",
))]
pub mod rustls_0_22; pub mod rustls_0_22;
#[cfg(feature = "native-tls")] #[cfg(feature = "native-tls")]

View File

@ -3,6 +3,7 @@
//! See [`TlsConnector`] for main connector service factory docs. //! See [`TlsConnector`] for main connector service factory docs.
use std::{ use std::{
convert::TryFrom,
future::Future, future::Future,
io, io,
pin::Pin, pin::Pin,
@ -34,8 +35,6 @@ pub mod reexports {
/// Returns root certificates via `rustls-native-certs` crate as a rustls certificate store. /// Returns root certificates via `rustls-native-certs` crate as a rustls certificate store.
/// ///
/// See [`rustls_native_certs::load_native_certs()`] for more info on behavior and errors. /// See [`rustls_native_certs::load_native_certs()`] for more info on behavior and errors.
///
/// [`rustls_native_certs::load_native_certs()`]: rustls_native_certs_06::load_native_certs()
#[cfg(feature = "rustls-0_20-native-roots")] #[cfg(feature = "rustls-0_20-native-roots")]
pub fn native_roots_cert_store() -> io::Result<RootCertStore> { pub fn native_roots_cert_store() -> io::Result<RootCertStore> {
let mut root_certs = RootCertStore::empty(); let mut root_certs = RootCertStore::empty();

View File

@ -3,6 +3,7 @@
//! See [`TlsConnector`] for main connector service factory docs. //! See [`TlsConnector`] for main connector service factory docs.
use std::{ use std::{
convert::TryFrom,
future::Future, future::Future,
io, io,
pin::Pin, pin::Pin,
@ -34,8 +35,6 @@ pub mod reexports {
/// Returns root certificates via `rustls-native-certs` crate as a rustls certificate store. /// Returns root certificates via `rustls-native-certs` crate as a rustls certificate store.
/// ///
/// See [`rustls_native_certs::load_native_certs()`] for more info on behavior and errors. /// See [`rustls_native_certs::load_native_certs()`] for more info on behavior and errors.
///
/// [`rustls_native_certs::load_native_certs()`]: rustls_native_certs_06::load_native_certs()
#[cfg(feature = "rustls-0_21-native-roots")] #[cfg(feature = "rustls-0_21-native-roots")]
pub fn native_roots_cert_store() -> io::Result<RootCertStore> { pub fn native_roots_cert_store() -> io::Result<RootCertStore> {
let mut root_certs = RootCertStore::empty(); let mut root_certs = RootCertStore::empty();

View File

@ -16,8 +16,9 @@ use actix_utils::future::{ok, Ready};
use futures_core::ready; use futures_core::ready;
use rustls_pki_types_1::ServerName; use rustls_pki_types_1::ServerName;
use tokio_rustls::{ use tokio_rustls::{
client::TlsStream as AsyncTlsStream, rustls::ClientConfig, Connect as RustlsConnect, client::TlsStream as AsyncTlsStream,
TlsConnector as RustlsTlsConnector, rustls::{ClientConfig, RootCertStore},
Connect as RustlsConnect, TlsConnector as RustlsTlsConnector,
}; };
use tokio_rustls_025 as tokio_rustls; use tokio_rustls_025 as tokio_rustls;
@ -34,11 +35,9 @@ pub mod reexports {
/// Returns root certificates via `rustls-native-certs` crate as a rustls certificate store. /// Returns root certificates via `rustls-native-certs` crate as a rustls certificate store.
/// ///
/// See [`rustls_native_certs::load_native_certs()`] for more info on behavior and errors. /// See [`rustls_native_certs::load_native_certs()`] for more info on behavior and errors.
///
/// [`rustls_native_certs::load_native_certs()`]: rustls_native_certs_07::load_native_certs()
#[cfg(feature = "rustls-0_22-native-roots")] #[cfg(feature = "rustls-0_22-native-roots")]
pub fn native_roots_cert_store() -> io::Result<tokio_rustls::rustls::RootCertStore> { pub fn native_roots_cert_store() -> io::Result<RootCertStore> {
let mut root_certs = tokio_rustls::rustls::RootCertStore::empty(); let mut root_certs = RootCertStore::empty();
for cert in rustls_native_certs_07::load_native_certs()? { for cert in rustls_native_certs_07::load_native_certs()? {
root_certs.add(cert).unwrap(); root_certs.add(cert).unwrap();
@ -49,8 +48,8 @@ pub fn native_roots_cert_store() -> io::Result<tokio_rustls::rustls::RootCertSto
/// Returns standard root certificates from `webpki-roots` crate as a rustls certificate store. /// Returns standard root certificates from `webpki-roots` crate as a rustls certificate store.
#[cfg(feature = "rustls-0_22-webpki-roots")] #[cfg(feature = "rustls-0_22-webpki-roots")]
pub fn webpki_roots_cert_store() -> tokio_rustls::rustls::RootCertStore { pub fn webpki_roots_cert_store() -> RootCertStore {
let mut root_certs = tokio_rustls::rustls::RootCertStore::empty(); let mut root_certs = RootCertStore::empty();
root_certs.extend(webpki_roots_026::TLS_SERVER_ROOTS.to_owned()); root_certs.extend(webpki_roots_026::TLS_SERVER_ROOTS.to_owned());
root_certs root_certs
} }

View File

@ -12,13 +12,11 @@ use std::{io::Write as _, sync::Arc};
use actix_rt::net::TcpStream; use actix_rt::net::TcpStream;
use actix_server::TestServer; use actix_server::TestServer;
use actix_service::ServiceFactoryExt as _; use actix_service::ServiceFactoryExt as _;
use actix_tls::{ use actix_tls::accept::openssl::{Acceptor, TlsStream};
accept::openssl::{Acceptor, TlsStream},
connect::rustls_0_22::reexports::ClientConfig,
};
use actix_utils::future::ok; use actix_utils::future::ok;
use rustls_pki_types_1::ServerName; use rustls_pki_types_1::ServerName;
use tokio_rustls_025::rustls::RootCertStore; use tokio_rustls::rustls::{ClientConfig, RootCertStore};
use tokio_rustls_025 as tokio_rustls;
fn new_cert_and_key() -> (String, String) { fn new_cert_and_key() -> (String, String) {
let cert = let cert =
@ -49,40 +47,39 @@ fn openssl_acceptor(cert: String, key: String) -> tls_openssl::ssl::SslAcceptor
builder.build() builder.build()
} }
#[allow(dead_code)]
mod danger { mod danger {
use rustls_pki_types_1::{CertificateDer, ServerName, UnixTime};
use tokio_rustls_025::rustls; use tokio_rustls_025::rustls;
/// Disables certificate verification to allow self-signed certs from rcgen.
#[derive(Debug)] #[derive(Debug)]
pub struct NoCertificateVerification; pub struct NoCertificateVerification;
impl rustls::client::danger::ServerCertVerifier for NoCertificateVerification { impl rustls::client::danger::ServerCertVerifier for NoCertificateVerification {
fn verify_server_cert( fn verify_server_cert(
&self, &self,
_end_entity: &CertificateDer<'_>, end_entity: &rustls_pki_types_1::CertificateDer::CertificateDer<'_>,
_intermediates: &[CertificateDer<'_>], intermediates: &[rustls_pki_types_1::CertificateDer::CertificateDer<'_>],
_server_name: &ServerName<'_>, server_name: &rustls_pki_types_1::CertificateDer::ServerName<'_>,
_ocsp_response: &[u8], ocsp_response: &[u8],
_now: UnixTime, now: rustls_pki_types_1::CertificateDer::UnixTime,
) -> Result<rustls::client::danger::ServerCertVerified, rustls::Error> { ) -> Result<rustls::client::danger::ServerCertVerified, rustls::Error> {
Ok(rustls::client::danger::ServerCertVerified::assertion()) Ok(rustls::client::danger::ServerCertVerified::assertion())
} }
fn verify_tls12_signature( fn verify_tls12_signature(
&self, &self,
_message: &[u8], message: &[u8],
_cert: &rustls_pki_types_1::CertificateDer<'_>, cert: &rustls_pki_types_1::CertificateDer<'_>,
_dss: &rustls::DigitallySignedStruct, dss: &rustls::DigitallySignedStruct,
) -> Result<rustls::client::danger::HandshakeSignatureValid, rustls::Error> { ) -> Result<rustls::client::danger::HandshakeSignatureValid, rustls::Error> {
Ok(rustls::client::danger::HandshakeSignatureValid::assertion()) Ok(rustls::client::danger::HandshakeSignatureValid::assertion())
} }
fn verify_tls13_signature( fn verify_tls13_signature(
&self, &self,
_message: &[u8], message: &[u8],
_cert: &rustls_pki_types_1::CertificateDer<'_>, cert: &rustls_pki_types_1::CertificateDer<'_>,
_dss: &rustls::DigitallySignedStruct, dss: &rustls::DigitallySignedStruct,
) -> Result<rustls::client::danger::HandshakeSignatureValid, rustls::Error> { ) -> Result<rustls::client::danger::HandshakeSignatureValid, rustls::Error> {
Ok(rustls::client::danger::HandshakeSignatureValid::assertion()) Ok(rustls::client::danger::HandshakeSignatureValid::assertion())
} }
@ -137,13 +134,13 @@ async fn accepts_connections() {
let config = rustls_connector(cert, key); let config = rustls_connector(cert, key);
let config = Arc::new(config); let config = Arc::new(config);
let mut conn = tokio_rustls_025::rustls::ClientConnection::new( let mut conn = tokio_rustls::rustls::ClientConnection::new(
config, config,
ServerName::try_from("localhost").unwrap(), ServerName::try_from("localhost").unwrap(),
) )
.unwrap(); .unwrap();
let mut stream = tokio_rustls_025::rustls::Stream::new(&mut conn, &mut sock); let mut stream = tokio_rustls::rustls::Stream::new(&mut conn, &mut sock);
stream.flush().expect("TLS handshake failed"); stream.flush().expect("TLS handshake failed");
} }

View File

@ -15,13 +15,14 @@ use actix_rt::net::TcpStream;
use actix_server::TestServer; use actix_server::TestServer;
use actix_service::ServiceFactoryExt as _; use actix_service::ServiceFactoryExt as _;
use actix_tls::{ use actix_tls::{
accept::rustls_0_22::{reexports::ServerConfig, Acceptor, TlsStream}, accept::rustls_0_21::{Acceptor, TlsStream},
connect::openssl::reexports::SslConnector, connect::openssl::reexports::SslConnector,
}; };
use actix_utils::future::ok; use actix_utils::future::ok;
use rustls_pemfile::{certs, pkcs8_private_keys}; use rustls_pemfile::{certs, pkcs8_private_keys};
use rustls_pki_types_1::PrivateKeyDer;
use tls_openssl::ssl::SslVerifyMode; use tls_openssl::ssl::SslVerifyMode;
use tokio_rustls::rustls::{self, Certificate, PrivateKey, ServerConfig};
use tokio_rustls_024 as tokio_rustls;
fn new_cert_and_key() -> (String, String) { fn new_cert_and_key() -> (String, String) {
let cert = let cert =
@ -34,7 +35,7 @@ fn new_cert_and_key() -> (String, String) {
(cert, key) (cert, key)
} }
fn rustls_server_config(cert: String, key: String) -> ServerConfig { fn rustls_server_config(cert: String, key: String) -> rustls::ServerConfig {
// Load TLS key and cert files // Load TLS key and cert files
let cert = &mut BufReader::new(cert.as_bytes()); let cert = &mut BufReader::new(cert.as_bytes());
@ -46,8 +47,9 @@ fn rustls_server_config(cert: String, key: String) -> ServerConfig {
.unwrap(); .unwrap();
let mut config = ServerConfig::builder() let mut config = ServerConfig::builder()
.with_safe_defaults()
.with_no_client_auth() .with_no_client_auth()
.with_single_cert(cert_chain, PrivateKeyDer::Pkcs8(keys.remove(0))) .with_single_cert(cert_chain, PrivateKey(keys.remove(0)))
.unwrap(); .unwrap();
config.alpn_protocols = vec![b"http/1.1".to_vec()]; config.alpn_protocols = vec![b"http/1.1".to_vec()];

View File

@ -98,6 +98,8 @@ async fn service_factory() {
#[cfg(all(feature = "openssl", feature = "uri"))] #[cfg(all(feature = "openssl", feature = "uri"))]
#[actix_rt::test] #[actix_rt::test]
async fn test_openssl_uri() { async fn test_openssl_uri() {
use std::convert::TryFrom;
let srv = TestServer::start(|| { let srv = TestServer::start(|| {
fn_service(|io: TcpStream| async { fn_service(|io: TcpStream| async {
let mut framed = Framed::new(io, BytesCodec); let mut framed = Framed::new(io, BytesCodec);
@ -132,6 +134,8 @@ async fn test_rustls_uri_http1() {
#[cfg(all(feature = "rustls-0_22", feature = "uri"))] #[cfg(all(feature = "rustls-0_22", feature = "uri"))]
#[actix_rt::test] #[actix_rt::test]
async fn test_rustls_uri() { async fn test_rustls_uri() {
use std::convert::TryFrom;
let srv = TestServer::start(|| { let srv = TestServer::start(|| {
fn_service(|io: TcpStream| async { fn_service(|io: TcpStream| async {
let mut framed = Framed::new(io, BytesCodec); let mut framed = Framed::new(io, BytesCodec);

View File

@ -2,7 +2,7 @@
## Unreleased ## Unreleased
- Minimum supported Rust version (MSRV) is now 1.70. - Minimum supported Rust version (MSRV) is now 1.65.
## 0.1.0 ## 0.1.0

View File

@ -5,7 +5,7 @@ authors = ["Rajasekharan Vengalil <avranju@gmail.com>"]
description = "Support for tokio tracing with Actix services" description = "Support for tokio tracing with Actix services"
keywords = ["network", "framework", "tracing"] keywords = ["network", "framework", "tracing"]
homepage = "https://actix.rs" homepage = "https://actix.rs"
repository = "https://github.com/actix/actix-net/tree/master/actix-tracing" repository = "https://github.com/actix/actix-net.git"
documentation = "https://docs.rs/actix-tracing" documentation = "https://docs.rs/actix-tracing"
categories = ["network-programming", "asynchronous"] categories = ["network-programming", "asynchronous"]
license = "MIT OR Apache-2.0" license = "MIT OR Apache-2.0"
@ -27,6 +27,6 @@ actix-utils = "3"
tracing = "0.1.35" tracing = "0.1.35"
tracing-futures = "0.2" tracing-futures = "0.2"
[dev-dependencies] [dev_dependencies]
actix-rt = "2" actix-rt = "2"
slab = "0.4" slab = "0.4"

View File

@ -131,7 +131,7 @@ mod test {
use super::*; use super::*;
thread_local! { thread_local! {
static SPAN: RefCell<Vec<span::Id>> = const { RefCell::new(Vec::new()) }; static SPAN: RefCell<Vec<span::Id>> = RefCell::new(Vec::new());
} }
#[derive(Default)] #[derive(Default)]

View File

@ -2,7 +2,7 @@
## Unreleased ## Unreleased
- Minimum supported Rust version (MSRV) is now 1.70. - Minimum supported Rust version (MSRV) is now 1.65.
## 3.0.1 ## 3.0.1

View File

@ -103,7 +103,6 @@ mod tests {
#[allow(dead_code)] #[allow(dead_code)]
fn require_sync<T: Sync>(_t: &T) {} fn require_sync<T: Sync>(_t: &T) {}
#[allow(unused)]
trait AmbiguousIfUnpin<A> { trait AmbiguousIfUnpin<A> {
fn some_item(&self) {} fn some_item(&self) {}
} }

View File

@ -2,8 +2,6 @@
## Unreleased ## Unreleased
- Minimum supported Rust version (MSRV) is now 1.70.
## 1.3.1 ## 1.3.1
- No significant changes since `1.3.0`. - No significant changes since `1.3.0`.

View File

@ -13,7 +13,7 @@ use alloc::{
string::{String, ToString}, string::{String, ToString},
vec::Vec, vec::Vec,
}; };
use core::{borrow::Borrow, fmt, hash, ops, str}; use core::{borrow::Borrow, convert::TryFrom, fmt, hash, ops, str};
use bytes::Bytes; use bytes::Bytes;

View File

@ -1,62 +1,14 @@
_list: _list:
@just --list @just --list
# Downgrade dev-dependencies necessary to run MSRV checks/tests.
[private]
downgrade-for-msrv:
cargo update -p=ciborium --precise=0.2.1
cargo update -p=ciborium-ll --precise=0.2.1
cargo update -p=time --precise=0.3.16
cargo update -p=clap --precise=4.3.24
cargo update -p=clap_lex --precise=0.5.0
cargo update -p=anstyle --precise=1.0.2
cargo update -p=trybuild --precise=1.0.89
msrv := ```
cargo metadata --format-version=1 \
| jq -r 'first(.packages[] | select(.source == null and .name == "actix-tls")) | .rust_version'
```
msrv_full := msrv + ".0" # comment out if the MSRV has a patch version specified
msrv_rustup := "+" + msrv_full
non_linux_all_features_list := ```
cargo metadata --format-version=1 \
| jq '.packages[] | select(.source == null) | .features | keys' \
| jq -r --slurp \
--arg exclusions "tokio-uring,io-uring" \
'add | unique | . - ($exclusions | split(",")) | join(",")'
```
all_crate_features := if os() == "linux" {
"--all-features"
} else {
"--features='" + non_linux_all_features_list + "'"
}
# Test workspace code.
test toolchain="":
cargo {{ toolchain }} test --lib --tests --package=actix-macros
cargo {{ toolchain }} nextest run --workspace --exclude=actix-macros --no-default-features
cargo {{ toolchain }} nextest run --workspace --exclude=actix-macros {{ all_crate_features }}
# Test workspace using MSRV.
test-msrv: downgrade-for-msrv (test msrv_rustup)
# Test workspace docs.
test-docs toolchain="": && doc
cargo {{ toolchain }} test --doc --workspace {{ all_crate_features }} --no-fail-fast -- --nocapture
# Test workspace.
test-all toolchain="": (test toolchain) (test-docs)
# Document crates in workspace. # Document crates in workspace.
doc *args: doc:
RUSTDOCFLAGS="--cfg=docsrs -Dwarnings" cargo +nightly doc --no-deps --workspace {{ all_crate_features }} {{ args }} RUSTDOCFLAGS="--cfg=docsrs" cargo +nightly doc --no-deps --workspace --features=rustls,openssl
# Document crates in workspace and watch for changes. # Document crates in workspace and watch for changes.
doc-watch: doc-watch:
@just doc --open RUSTDOCFLAGS="--cfg=docsrs" cargo +nightly doc --no-deps --workspace --features=rustls-0_20,rustls-0_21,rustls-0_20-native-roots,rustls-0_21-native-roots,openssl --open
cargo watch -- just doc cargo watch -- RUSTDOCFLAGS="--cfg=docsrs" cargo +nightly doc --no-deps --workspace --features=rustls-0_20,rustls-0_21,rustls-0_20-native-roots,rustls-0_21-native-roots,openssl
# Check for unintentional external type exposure on all crates in workspace. # Check for unintentional external type exposure on all crates in workspace.
check-external-types-all toolchain="+nightly": check-external-types-all toolchain="+nightly":
@ -64,7 +16,7 @@ check-external-types-all toolchain="+nightly":
set -euo pipefail set -euo pipefail
exit=0 exit=0
for f in $(find . -mindepth 2 -maxdepth 2 -name Cargo.toml | grep -vE "\-codegen/|\-derive/|\-macros/"); do for f in $(find . -mindepth 2 -maxdepth 2 -name Cargo.toml | grep -vE "\-codegen/|\-derive/|\-macros/"); do
if ! just check-external-types-manifest "$f" {{ toolchain }}; then exit=1; fi if ! just check-external-types-manifest "$f" {{toolchain}}; then exit=1; fi
echo echo
echo echo
done done
@ -77,9 +29,9 @@ check-external-types-all-table toolchain="+nightly":
for f in $(find . -mindepth 2 -maxdepth 2 -name Cargo.toml | grep -vE "\-codegen/|\-derive/|\-macros/"); do for f in $(find . -mindepth 2 -maxdepth 2 -name Cargo.toml | grep -vE "\-codegen/|\-derive/|\-macros/"); do
echo echo
echo "Checking for $f" echo "Checking for $f"
just check-external-types-manifest "$f" {{ toolchain }} --output-format=markdown-table just check-external-types-manifest "$f" {{toolchain}} --output-format=markdown-table
done done
# Check for unintentional external type exposure on a crate. # Check for unintentional external type exposure on a crate.
check-external-types-manifest manifest_path toolchain="+nightly" *extra_args="": check-external-types-manifest manifest_path toolchain="+nightly" *extra_args="":
cargo {{ toolchain }} check-external-types --manifest-path "{{ manifest_path }}" {{ extra_args }} cargo {{toolchain}} check-external-types --manifest-path "{{manifest_path}}" {{extra_args}}

View File

@ -2,8 +2,6 @@
## Unreleased ## Unreleased
- Minimum supported Rust version (MSRV) is now 1.70.
## 0.1.5 ## 0.1.5
- No significant changes since `0.1.4`. - No significant changes since `0.1.4`.

View File

@ -2,8 +2,6 @@
## Unreleased ## Unreleased
- Minimum supported Rust version (MSRV) is now 1.70.
## 0.1.4 ## 0.1.4
- Minimum supported Rust version (MSRV) is now 1.65. - Minimum supported Rust version (MSRV) is now 1.65.