1
0
mirror of https://github.com/fafhrd91/actix-net synced 2025-08-14 00:48:23 +02:00

Compare commits

...

53 Commits

Author SHA1 Message Date
Rob Ede
0d3d1926bc fix: relax bounds on with_tokio_rt (#569) 2024-06-09 07:12:24 +01:00
Rob Ede
0c26ecf9fa chore(actix-server): prepare release 2.4.0 2024-06-09 06:12:28 +01:00
Rob Ede
1bdb15ec20 chore(actix-rt): prepare release 2.10.0 2024-06-09 06:12:07 +01:00
dependabot[bot]
a524f15e34 build(deps): update tokio-uring requirement from 0.4 to 0.5 (#568)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Rob Ede <robjtede@icloud.com>
2024-06-07 18:51:27 +01:00
dependabot[bot]
451a44c2e0 build(deps): bump taiki-e/install-action from 2.33.34 to 2.34.1 (#567)
Bumps [taiki-e/install-action](https://github.com/taiki-e/install-action) from 2.33.34 to 2.34.1.
- [Release notes](https://github.com/taiki-e/install-action/releases)
- [Changelog](https://github.com/taiki-e/install-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/taiki-e/install-action/compare/v2.33.34...v2.34.1)

---
updated-dependencies:
- dependency-name: taiki-e/install-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-06-03 18:25:40 +00:00
Rob Ede
18071d1fc0 ci: disable io-uring tests 2024-05-27 22:57:35 +01:00
dependabot[bot]
786014cc2f build(deps): bump taiki-e/install-action from 2.33.26 to 2.33.34 (#566)
Bumps [taiki-e/install-action](https://github.com/taiki-e/install-action) from 2.33.26 to 2.33.34.
- [Release notes](https://github.com/taiki-e/install-action/releases)
- [Changelog](https://github.com/taiki-e/install-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/taiki-e/install-action/compare/v2.33.26...v2.33.34)

---
updated-dependencies:
- dependency-name: taiki-e/install-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-27 21:24:55 +00:00
Rob Ede
a7ef438f25 ci: use mold linker on linux jobs 2024-05-27 22:25:35 +01:00
dependabot[bot]
375c352810 --- (#565)
updated-dependencies:
- dependency-name: taiki-e/install-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-20 19:11:09 +00:00
dependabot[bot]
2d1b5468d0 --- (#563)
updated-dependencies:
- dependency-name: codecov/codecov-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-20 19:08:43 +00:00
dependabot[bot]
3696cda155 --- (#562)
updated-dependencies:
- dependency-name: itertools
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-20 19:06:51 +00:00
dependabot[bot]
55e89d1f30 --- (#564)
updated-dependencies:
- dependency-name: JamesIves/github-pages-deploy-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-20 19:05:28 +00:00
Rob Ede
24be36b18d chore: prepare actix-tls release v3.4.0 2024-05-18 18:14:26 +01:00
Rob Ede
38ae762569 ci: fix msrv just variable 2024-05-18 17:34:18 +01:00
dependabot[bot]
8cf79d3d13 build(deps): bump taiki-e/install-action from 2.33.17 to 2.33.22 (#561)
Bumps [taiki-e/install-action](https://github.com/taiki-e/install-action) from 2.33.17 to 2.33.22.
- [Release notes](https://github.com/taiki-e/install-action/releases)
- [Changelog](https://github.com/taiki-e/install-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/taiki-e/install-action/compare/v2.33.17...v2.33.22)

---
updated-dependencies:
- dependency-name: taiki-e/install-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-13 20:43:50 +00:00
asonix
73451070db actix-tls: Disable default features for rustls 0.23 via tokio-rustls 0.26 (#560)
* actix-tls: Disable default features for rustls 0.23 via tokio-rustls 0.26

This also fixes a panic in accept-rustls due to both ring and aws-lc-rs
being enabled for that example

* Switch a test from aws-lc-rs to ring since aws-lc-rs is no longer enabled in dev-dependencies

* Switch another test from aws-lc-rs to ring since aws-lc-rs is no longer enabled in dev-dependencies

* Go the other way - use aws_lc_rs instead of ring

---------

Co-authored-by: Rob Ede <robjtede@icloud.com>
2024-05-12 21:09:59 +00:00
Rob Ede
2632c984cc ci: fix nightly windows builds 2024-05-12 21:53:26 +01:00
Rob Ede
af8e6cd656 ci: read MSRV from manifest (#559) 2024-05-12 21:35:39 +01:00
SleeplessOne1917
db7988609e feat(actix-tls): support for rustls 0.23 (#554)
* Add feature for using rustls 0.23

* Fix mistake

* Fix use of wrong tokio rustls package

* Fix accept openssl test

* Use rustls 0.23 for the example

* Install nasm in CI step for windows

* Change outdated step name

* Fix CI mistake

* test: install default crypto provider in tests

* docs: update changelog

---------

Co-authored-by: Rob Ede <robjtede@icloud.com>
2024-05-12 18:47:49 +00:00
Rob Ede
1db640f62e chore: update env logger 2024-05-12 19:10:27 +01:00
Rob Ede
9e7d612121 ci: remove 32-bit windows support 2024-05-12 18:25:02 +01:00
Rob Ede
5edbf9e3dc chore: switch to rustversion-msrv 2024-05-12 18:24:37 +01:00
Rob Ede
f028a74240 build: fix rustversion spec 2024-05-11 17:41:31 +01:00
Rob Ede
f4139a0878 chore: update MSRV to 1.70 2024-05-11 17:39:34 +01:00
Rob Ede
3147dbe7ca ci: rely more on just recipes (#558) 2024-05-11 15:10:56 +01:00
dependabot[bot]
95ca8f0318 build(deps): bump taiki-e/install-action from 2.33.12 to 2.33.17 (#555)
Bumps [taiki-e/install-action](https://github.com/taiki-e/install-action) from 2.33.12 to 2.33.17.
- [Release notes](https://github.com/taiki-e/install-action/releases)
- [Changelog](https://github.com/taiki-e/install-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/taiki-e/install-action/compare/v2.33.12...v2.33.17)

---
updated-dependencies:
- dependency-name: taiki-e/install-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-06 21:02:51 +00:00
dependabot[bot]
f947374a73 build(deps): bump codecov/codecov-action from 4.3.0 to 4.3.1 (#556)
Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 4.3.0 to 4.3.1.
- [Release notes](https://github.com/codecov/codecov-action/releases)
- [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/codecov/codecov-action/compare/v4.3.0...v4.3.1)

---
updated-dependencies:
- dependency-name: codecov/codecov-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-06 21:02:32 +00:00
dependabot[bot]
85191934c8 build(deps): bump codecov/codecov-action from 4.1.0 to 4.3.0 (#548)
Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 4.1.0 to 4.3.0.
- [Release notes](https://github.com/codecov/codecov-action/releases)
- [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/codecov/codecov-action/compare/v4.1.0...v4.3.0)

---
updated-dependencies:
- dependency-name: codecov/codecov-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-02 03:24:47 +01:00
dependabot[bot]
234a4c9c7f build(deps): bump JamesIves/github-pages-deploy-action (#549)
Bumps [JamesIves/github-pages-deploy-action](https://github.com/jamesives/github-pages-deploy-action) from 4.5.0 to 4.6.0.
- [Release notes](https://github.com/jamesives/github-pages-deploy-action/releases)
- [Commits](https://github.com/jamesives/github-pages-deploy-action/compare/v4.5.0...v4.6.0)

---
updated-dependencies:
- dependency-name: JamesIves/github-pages-deploy-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-02 02:20:46 +01:00
dependabot[bot]
d5171c2ab3 build(deps): bump taiki-e/cache-cargo-install-action from 1.3.0 to 2.0.0 (#551)
Bumps [taiki-e/cache-cargo-install-action](https://github.com/taiki-e/cache-cargo-install-action) from 1.3.0 to 2.0.0.
- [Release notes](https://github.com/taiki-e/cache-cargo-install-action/releases)
- [Changelog](https://github.com/taiki-e/cache-cargo-install-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/taiki-e/cache-cargo-install-action/compare/v1.3.0...v2.0.0)

---
updated-dependencies:
- dependency-name: taiki-e/cache-cargo-install-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-02 02:20:35 +01:00
dependabot[bot]
875218488c build(deps): bump taiki-e/install-action from 2.28.1 to 2.33.12 (#553)
Bumps [taiki-e/install-action](https://github.com/taiki-e/install-action) from 2.28.1 to 2.33.12.
- [Release notes](https://github.com/taiki-e/install-action/releases)
- [Changelog](https://github.com/taiki-e/install-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/taiki-e/install-action/compare/v2.28.1...v2.33.12)

---
updated-dependencies:
- dependency-name: taiki-e/install-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-02 02:20:21 +01:00
Rob Ede
b826bf8471 ci: relax ahash msrv pin 2024-05-02 01:48:55 +01:00
Rob Ede
10bd847177 ci: fix msrv checks 2024-05-02 01:30:28 +01:00
dependabot[bot]
481cf55414 build(deps): bump codecov/codecov-action from 4.0.2 to 4.1.0 (#538)
Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 4.0.2 to 4.1.0.
- [Release notes](https://github.com/codecov/codecov-action/releases)
- [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/codecov/codecov-action/compare/v4.0.2...v4.1.0)

---
updated-dependencies:
- dependency-name: codecov/codecov-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-05 17:51:42 +00:00
dependabot[bot]
b4990023c4 build(deps): bump taiki-e/install-action from 2.27.11 to 2.28.1 (#537)
Bumps [taiki-e/install-action](https://github.com/taiki-e/install-action) from 2.27.11 to 2.28.1.
- [Release notes](https://github.com/taiki-e/install-action/releases)
- [Changelog](https://github.com/taiki-e/install-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/taiki-e/install-action/compare/v2.27.11...v2.28.1)

---
updated-dependencies:
- dependency-name: taiki-e/install-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-05 17:49:17 +00:00
dependabot[bot]
eb5cec0064 build(deps): bump codecov/codecov-action from 4.0.1 to 4.0.2 (#535)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-01 18:06:10 +00:00
dependabot[bot]
db925bf8e6 build(deps): bump taiki-e/install-action from 2.26.13 to 2.27.11 (#536)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-01 18:05:48 +00:00
Rob Ede
850f6c0491 chore: allow unused trait in test 2024-02-19 12:32:06 +00:00
Rob Ede
0f71fd5a7a chore: remove redundant imports 2024-02-19 12:19:08 +00:00
Rob Ede
40b10847df chore: remove redundant imports 2024-02-19 12:10:47 +00:00
Rob Ede
39bab04800 chore: remove redundant imports 2024-02-19 11:36:15 +00:00
Rob Ede
3cb247874e ci: workaround ahash msrv 2024-02-19 11:31:41 +00:00
Rob Ede
5792d9f010 docs: fix repo links 2024-02-19 11:29:37 +00:00
dependabot[bot]
bd8bd1020b build(deps): bump taiki-e/install-action from 2.26.7 to 2.26.13 (#531)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-05 21:10:17 +00:00
dependabot[bot]
21be7d84bd build(deps): bump codecov/codecov-action from 3.1.6 to 4.0.1 (#532)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Rob Ede <robjtede@icloud.com>
2024-02-05 21:10:06 +00:00
Rob Ede
57fd6ea809 chore(actix-tls): prepare release 3.3.0 (#530) 2024-02-03 20:26:15 +00:00
Rob Ede
9a3f3eef6a test(tls): fix accept-openssl test 2024-02-03 17:01:47 +00:00
Rob Ede
e427911cdb feat(tls): rustls-0_22 create feature 2024-02-03 16:39:21 +00:00
Rob Ede
a1ae524512 docs: clean changelog 2024-02-01 06:42:41 +00:00
dependabot[bot]
88833355e4 build(deps): bump taiki-e/install-action from 2.25.2 to 2.26.7 (#527)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-30 22:41:04 +00:00
dependabot[bot]
7737ba5cfb build(deps): bump codecov/codecov-action from 3.1.4 to 3.1.6 (#529)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-30 22:40:17 +00:00
Rob Ede
fd32a0a97a ci: workaround half crate msrv 2024-01-30 21:51:12 +00:00
Rob Ede
07e7f82345 chore(actix-codec): prepare release 0.5.2 2024-01-30 21:16:42 +00:00
54 changed files with 773 additions and 388 deletions

View File

@@ -2,8 +2,6 @@
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"
@@ -15,11 +13,3 @@ 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 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"
# 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
ci-test-linux = "hack --feature-powerset --depth=2 --exclude-features=rustls-0_20 test --lib --tests --no-fail-fast -- --nocapture"

View File

@@ -22,7 +22,6 @@ 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
@@ -42,24 +41,32 @@ jobs:
if: matrix.target.os == 'ubuntu-latest' if: matrix.target.os == 'ubuntu-latest'
run: ./scripts/free-disk-space.sh run: ./scripts/free-disk-space.sh
- name: Setup mold linker
if: matrix.target.os == 'ubuntu-latest'
uses: rui314/setup-mold@v1
- name: Install nasm
if: matrix.target.os == 'windows-latest'
uses: ilammy/setup-nasm@v1.5.1
- name: Install OpenSSL - name: Install OpenSSL
if: matrix.target.os == 'windows-latest' if: matrix.target.os == 'windows-latest'
run: choco install openssl -y --forcex64 --no-progress shell: bash
- name: Set OpenSSL dir in env
if: matrix.target.os == 'windows-latest'
run: | run: |
echo 'OPENSSL_DIR=C:\Program Files\OpenSSL-Win64' | Out-File -FilePath $env:GITHUB_ENV -Append set -e
echo 'OPENSSL_DIR=C:\Program Files\OpenSSL' | 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' >> $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 cargo-hack and cargo-ci-cache-clean - name: Install just, cargo-hack, cargo-nextest, cargo-ci-cache-clean
uses: taiki-e/install-action@v2.25.2 uses: taiki-e/install-action@v2.34.1
with: with:
tool: cargo-hack,cargo-ci-cache-clean tool: just,cargo-hack,cargo-nextest,cargo-ci-cache-clean
- name: check lib - name: check lib
if: > if: >
@@ -84,21 +91,20 @@ jobs:
run: cargo ci-check-linux run: cargo ci-check-linux
- name: tests - name: tests
if: > run: just test
matrix.target.os != 'ubuntu-latest'
&& matrix.target.triple != 'x86_64-pc-windows-gnu' # TODO: re-instate some io-uring tests PRs
run: cargo ci-test # - name: tests
- name: tests # if: matrix.target.os == 'ubuntu-latest'
if: matrix.target.os == 'ubuntu-latest' # run: >-
run: >- # sudo bash -c "
sudo bash -c " # ulimit -Sl 512
ulimit -Sl 512 # && ulimit -Hl 512
&& ulimit -Hl 512 # && PATH=$PATH:/usr/share/rust/.cargo/bin
&& PATH=$PATH:/usr/share/rust/.cargo/bin # && RUSTUP_TOOLCHAIN=${{ matrix.version }} cargo ci-test-rustls-020
&& RUSTUP_TOOLCHAIN=${{ matrix.version }} cargo ci-test-rustls-020 # && RUSTUP_TOOLCHAIN=${{ matrix.version }} cargo ci-test-rustls-021
&& RUSTUP_TOOLCHAIN=${{ matrix.version }} cargo ci-test-rustls-021 # && RUSTUP_TOOLCHAIN=${{ matrix.version }} cargo ci-test-linux
&& RUSTUP_TOOLCHAIN=${{ matrix.version }} cargo ci-test-linux # "
"
- name: CI cache clean - name: CI cache clean
run: cargo-ci-cache-clean run: cargo-ci-cache-clean
@@ -115,7 +121,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.25.2 uses: taiki-e/install-action@v2.34.1
with: with:
tool: cargo-hack,cargo-minimal-versions tool: cargo-hack,cargo-minimal-versions
@@ -132,7 +138,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.25.2 uses: taiki-e/install-action@v2.34.1
with: with:
tool: cargo-nextest tool: cargo-nextest

View File

@@ -13,7 +13,14 @@ concurrency:
cancel-in-progress: true cancel-in-progress: true
jobs: jobs:
read_msrv:
name: Read MSRV
uses: actions-rust-lang/msrv/.github/workflows/msrv.yml@v0.1.0
build_and_test: build_and_test:
needs:
- read_msrv
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
@@ -23,9 +30,8 @@ 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.65.0 } - { name: msrv, version: "${{ needs.read_msrv.outputs.msrv }}" }
- { name: stable, version: stable } - { name: stable, version: stable }
name: ${{ matrix.target.name }} / ${{ matrix.version.name }} name: ${{ matrix.target.name }} / ${{ matrix.version.name }}
@@ -44,35 +50,39 @@ jobs:
if: matrix.target.os == 'ubuntu-latest' if: matrix.target.os == 'ubuntu-latest'
run: ./scripts/free-disk-space.sh run: ./scripts/free-disk-space.sh
- name: Setup mold linker
if: matrix.target.os == 'ubuntu-latest'
uses: rui314/setup-mold@v1
- name: Install nasm
if: matrix.target.os == 'windows-latest'
uses: ilammy/setup-nasm@v1.5.1
- name: Install OpenSSL - name: Install OpenSSL
if: matrix.target.os == 'windows-latest' if: matrix.target.os == 'windows-latest'
run: choco install openssl -y --forcex64 --no-progress shell: bash
- name: Set OpenSSL dir in env
if: matrix.target.os == 'windows-latest'
run: | run: |
echo 'OPENSSL_DIR=C:\Program Files\OpenSSL-Win64' | Out-File -FilePath $env:GITHUB_ENV -Append set -e
echo 'OPENSSL_DIR=C:\Program Files\OpenSSL' | 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' >> $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 cargo-hack and cargo-ci-cache-clean - name: Install just, cargo-hack, cargo-nextest, cargo-ci-cache-clean
uses: taiki-e/install-action@v2.25.2 uses: taiki-e/install-action@v2.34.1
with: with:
tool: cargo-hack,cargo-ci-cache-clean tool: just,cargo-hack,cargo-nextest,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: | run: just downgrade-for-msrv
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: >
@@ -83,7 +93,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
@@ -97,30 +107,13 @@ jobs:
run: cargo ci-check-linux run: cargo ci-check-linux
- name: tests - name: tests
if: matrix.target.os == 'macos-latest' run: just test
run: cargo ci-test
- 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
rustdoc: docs:
name: rustdoc name: Documentation
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
@@ -131,6 +124,10 @@ jobs:
with: with:
toolchain: nightly toolchain: nightly
- name: doc tests io-uring - name: Install just
run: | uses: taiki-e/install-action@v2.34.1
sudo bash -c "ulimit -Sl 512 && ulimit -Hl 512 && PATH=$PATH:/usr/share/rust/.cargo/bin && RUSTUP_TOOLCHAIN=nightly cargo ci-doctest" with:
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.25.2 uses: taiki-e/install-action@v2.34.1
with: with:
tool: cargo-llvm-cov tool: cargo-llvm-cov
@@ -31,7 +31,9 @@ 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@v3.1.4 uses: codecov/codecov-action@v4.4.1
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.25.2 uses: taiki-e/install-action@v2.34.1
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@v1.3.0 uses: taiki-e/cache-cargo-install-action@v2.0.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.5.0 uses: JamesIves/github-pages-deploy-action@v4.6.1
with: with:
folder: target/doc folder: target/doc
single-commit: true single-commit: true

View File

@@ -1,4 +1,5 @@
[workspace] [workspace]
resolver = "2"
members = [ members = [
"actix-codec", "actix-codec",
"actix-macros", "actix-macros",
@@ -12,12 +13,11 @@ 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.65" rust-version = "1.70"
[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. [#451] - Logs emitted now use the `tracing` crate with `log` compatibility.
- 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`. [#446] - Updated `tokio-util` dependency to `0.7.0`.
[#446]: https://github.com/actix/actix-net/pull/446
## 0.4.2 ## 0.4.2
@@ -23,11 +23,8 @@
## 0.4.1 ## 0.4.1
- Added `LinesCodec.` [#338] - Added `LinesCodec`.
- `Framed::poll_ready` flushes when the buffer is full. [#409] - `Framed::poll_ready` flushes when the buffer is full.
[#338]: https://github.com/actix/actix-net/pull/338
[#409]: https://github.com/actix/actix-net/pull/409
## 0.4.0 ## 0.4.0
@@ -35,12 +32,10 @@
## 0.4.0-beta.1 ## 0.4.0-beta.1
- Replace `pin-project` with `pin-project-lite`. [#237] - Replace `pin-project` with `pin-project-lite`.
- Upgrade `tokio` dependency to `1`. [#237] - Upgrade `tokio` dependency to `1`.
- Upgrade `tokio-util` dependency to `0.6`. [#237] - Upgrade `tokio-util` dependency to `0.6`.
- Upgrade `bytes` dependency to `1`. [#237] - Upgrade `bytes` dependency to `1`.
[#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.1" version = "0.5.2"
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,6 +2,8 @@
## 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,7 +31,6 @@ 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 = "1" rustversion-msrv = "0.99"
trybuild = "1" trybuild = "1"

View File

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

View File

@@ -2,6 +2,12 @@
## Unreleased ## Unreleased
## 2.10.0
- Relax bound (`F: Fn -> FnOnce`) on `{Arbiter, System}::with_tokio_rt()` functions.
- Update `tokio-uring` dependency to `0.5`.
- 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.
@@ -10,150 +16,105 @@
## 2.8.0 ## 2.8.0
- Add `#[track_caller]` attribute to `spawn` functions and methods. [#454] - Add `#[track_caller]` attribute to `spawn` functions and methods.
- Update `tokio-uring` dependency to `0.4`. [#473] - Update `tokio-uring` dependency to `0.4`.
- 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`. [#448] - Update `tokio-uring` dependency to `0.3`.
- 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`. [#436] - Update `tokio-uring` dependency to `0.2`.
[#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`. [#430] - Expose `System::with_tokio_rt` and `Arbiter::with_tokio_rt`.
[#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. [#411] - Add `System::run_with_code` to allow retrieving the exit code on stop.
[#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. [#408] - Add `Arbiter::try_current` for situations where thread may or may not have Arbiter context.
- Start io-uring with `System::new` when feature is enabled. [#395] - Start io-uring with `System::new` when feature is enabled.
[#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. [#369] - The `spawn` method can now resolve with non-unit outputs.
- Add experimental (semver-exempt) `io-uring` feature for enabling async file I/O on linux. [#374] - Add experimental (semver-exempt) `io-uring` feature for enabling async file I/O on linux.
[#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. [#293] - **BREAKING** `ActixStream::{poll_read_ready, poll_write_ready}` methods now return `Ready` object in ok variant.
- 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. [#276] - Add `ActixStream` extension trait to include readiness methods.
- Re-export `tokio::net::TcpSocket` in `net` module [#282] - Re-export `tokio::net::TcpSocket` in `net` module
[#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. [#274] - Add `Arbiter::handle` to get a handle of an owned Arbiter.
- Add `System::try_current` for situations where actix may or may not be running a System. [#275] - Add `System::try_current` for situations where actix may or may not be running a System.
[#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. [#271] - Expose `JoinError` from Tokio.
[#271]: https://github.com/actix/actix-net/pull/271
## 2.0.0 ## 2.0.0
- Remove all Arbiter-local storage methods. [#262] - Remove all Arbiter-local storage methods.
- Re-export `tokio::pin`. [#262] - Re-export `tokio::pin`.
[#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`. [#253] - Remove `run_in_tokio`, `attach_to_tokio` and `AsyncSystemRunner`.
- Return `JoinHandle` from `actix_rt::spawn`. [#253] - Return `JoinHandle` from `actix_rt::spawn`.
- Remove old `Arbiter::spawn`. Implementation is now inlined into `actix_rt::spawn`. [#253] - Remove old `Arbiter::spawn`. Implementation is now inlined into `actix_rt::spawn`.
- Rename `Arbiter::{send => spawn}` and `Arbiter::{exec_fn => spawn_fn}`. [#253] - Rename `Arbiter::{send => spawn}` and `Arbiter::{exec_fn => spawn_fn}`.
- Remove `Arbiter::exec`. [#253] - Remove `Arbiter::exec`.
- Remove deprecated `Arbiter::local_join` and `Arbiter::is_running`. [#253] - Remove deprecated `Arbiter::local_join` and `Arbiter::is_running`.
- `Arbiter::spawn` now accepts !Unpin futures. [#256] - `Arbiter::spawn` now accepts !Unpin futures.
- `System::new` no longer takes arguments. [#257] - `System::new` no longer takes arguments.
- Remove `System::with_current`. [#257] - Remove `System::with_current`.
- Remove `Builder`. [#257] - Remove `Builder`.
- Add `System::with_init` as replacement for `Builder::run`. [#257] - Add `System::with_init` as replacement for `Builder::run`.
- Rename `System::{is_set => is_registered}`. [#257] - Rename `System::{is_set => is_registered}`.
- Add `ArbiterHandle` for sending messages to non-current-thread arbiters. [#257]. - Add `ArbiterHandle` for sending messages to non-current-thread arbiters.
- `System::arbiter` now returns an `&ArbiterHandle`. [#257] - `System::arbiter` now returns an `&ArbiterHandle`.
- `Arbiter::current` now returns an `ArbiterHandle` instead. [#257] - `Arbiter::current` now returns an `ArbiterHandle` instead.
- `Arbiter::join` now takes self by value. [#257] - `Arbiter::join` now takes self by value.
[#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}` [#245] - Add `task` mod with re-export of `tokio::task::{spawn_blocking, yield_now, JoinHandle}`
- 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. [#173] - Add `System::attach_to_tokio` method.
- Update `tokio` dependency to `1.0`. [#236] - Update `tokio` dependency to `1.0`.
- Rename `time` module `delay_for` to `sleep`, `delay_until` to `sleep_until`, `Delay` to `Sleep` to stay aligned with Tokio's naming. [#236] - Rename `time` module `delay_for` to `sleep`, `delay_until` to `sleep_until`, `Delay` to `Sleep` to stay aligned with Tokio's naming.
- 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. [#236] - These methods now accept `&self` when calling.
- Remove `'static` lifetime requirement for `System::run` and `Builder::run`. [#236] - Remove `'static` lifetime requirement for `System::run` and `Builder::run`.
- `Arbiter::spawn` now panics when `System` is not in scope. [#207] - `Arbiter::spawn` now panics when `System` is not in scope.
- Fix work load issue by removing `PENDING` thread local. [#207] - Fix work load issue by removing `PENDING` thread local.
[#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 [#94] (see [#129] for more detail) - Fix memory leak due to
[#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 [#99] - Expose `System::is_set` to check if current system has ben started
- Add `Arbiter::is_running` to check if event loop is running [#124] - Add `Arbiter::is_running` to check if event loop is running
- Add `Arbiter::local_join` associated function to get be able to `await` for spawned futures [#94] - Add `Arbiter::local_join` associated function to get be able to `await` for spawned futures
[#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

@@ -1,6 +1,6 @@
[package] [package]
name = "actix-rt" name = "actix-rt"
version = "2.9.0" version = "2.10.0"
authors = [ authors = [
"Nikolay Kim <fafhrd91@gmail.com>", "Nikolay Kim <fafhrd91@gmail.com>",
"Rob Ede <robjtede@icloud.com>", "Rob Ede <robjtede@icloud.com>",
@@ -33,7 +33,7 @@ tokio = { version = "1.23.1", features = ["rt", "net", "parking_lot", "signal",
# runtime for `io-uring` feature # runtime for `io-uring` feature
[target.'cfg(target_os = "linux")'.dependencies] [target.'cfg(target_os = "linux")'.dependencies]
tokio-uring = { version = "0.4", optional = true } tokio-uring = { version = "0.5", optional = true }
[dev-dependencies] [dev-dependencies]
tokio = { version = "1.23.1", features = ["full"] } tokio = { version = "1.23.1", features = ["full"] }

View File

@@ -3,11 +3,11 @@
> Tokio-based single-threaded async runtime for the Actix ecosystem. > Tokio-based single-threaded async runtime for the Actix ecosystem.
[![crates.io](https://img.shields.io/crates/v/actix-rt?label=latest)](https://crates.io/crates/actix-rt) [![crates.io](https://img.shields.io/crates/v/actix-rt?label=latest)](https://crates.io/crates/actix-rt)
[![Documentation](https://docs.rs/actix-rt/badge.svg?version=2.9.0)](https://docs.rs/actix-rt/2.9.0) [![Documentation](https://docs.rs/actix-rt/badge.svg?version=2.10.0)](https://docs.rs/actix-rt/2.10.0)
[![Version](https://img.shields.io/badge/rustc-1.46+-ab6000.svg)](https://blog.rust-lang.org/2020/03/12/Rust-1.46.html) [![Version](https://img.shields.io/badge/rustc-1.46+-ab6000.svg)](https://blog.rust-lang.org/2020/03/12/Rust-1.46.html)
![MIT or Apache 2.0 licensed](https://img.shields.io/crates/l/actix-rt.svg) ![MIT or Apache 2.0 licensed](https://img.shields.io/crates/l/actix-rt.svg)
<br /> <br />
[![dependency status](https://deps.rs/crate/actix-rt/2.9.0/status.svg)](https://deps.rs/crate/actix-rt/2.9.0) [![dependency status](https://deps.rs/crate/actix-rt/2.10.0/status.svg)](https://deps.rs/crate/actix-rt/2.10.0)
![Download](https://img.shields.io/crates/d/actix-rt.svg) ![Download](https://img.shields.io/crates/d/actix-rt.svg)
[![Chat on Discord](https://img.shields.io/discord/771444961383153695?label=chat&logo=discord)](https://discord.gg/WghFtEH6Hb) [![Chat on Discord](https://img.shields.io/discord/771444961383153695?label=chat&logo=discord)](https://discord.gg/WghFtEH6Hb)

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>> = RefCell::new(None); static HANDLE: RefCell<Option<ArbiterHandle>> = const { RefCell::new(None) };
); );
pub(crate) enum ArbiterCommand { pub(crate) enum ArbiterCommand {
@@ -109,7 +109,7 @@ impl Arbiter {
#[cfg(not(all(target_os = "linux", feature = "io-uring")))] #[cfg(not(all(target_os = "linux", feature = "io-uring")))]
pub fn with_tokio_rt<F>(runtime_factory: F) -> Arbiter pub fn with_tokio_rt<F>(runtime_factory: F) -> Arbiter
where where
F: Fn() -> tokio::runtime::Runtime + Send + 'static, F: FnOnce() -> tokio::runtime::Runtime + Send + 'static,
{ {
let sys = System::current(); let sys = System::current();
let system_id = sys.id(); let system_id = sys.id();

View File

@@ -34,6 +34,7 @@
//! ``` //! ```
//! //!
//! # `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>> = RefCell::new(None); static CURRENT: RefCell<Option<System>> = const { RefCell::new(None) };
); );
/// A manager for a per-thread distributed async runtime. /// A manager for a per-thread distributed async runtime.
@@ -48,7 +48,7 @@ impl System {
/// [tokio-runtime]: tokio::runtime::Runtime /// [tokio-runtime]: tokio::runtime::Runtime
pub fn with_tokio_rt<F>(runtime_factory: F) -> SystemRunner pub fn with_tokio_rt<F>(runtime_factory: F) -> SystemRunner
where where
F: Fn() -> tokio::runtime::Runtime, F: FnOnce() -> tokio::runtime::Runtime,
{ {
let (stop_tx, stop_rx) = oneshot::channel(); let (stop_tx, stop_rx) = oneshot::channel();
let (sys_tx, sys_rx) = mpsc::unbounded_channel(); let (sys_tx, sys_rx) = mpsc::unbounded_channel();
@@ -87,7 +87,7 @@ impl System {
#[doc(hidden)] #[doc(hidden)]
pub fn with_tokio_rt<F>(_: F) -> SystemRunner pub fn with_tokio_rt<F>(_: F) -> SystemRunner
where where
F: Fn() -> tokio::runtime::Runtime, F: FnOnce() -> tokio::runtime::Runtime,
{ {
unimplemented!("System::with_tokio_rt is not implemented for io-uring feature yet") unimplemented!("System::with_tokio_rt is not implemented for io-uring feature yet")
} }

View File

@@ -358,7 +358,7 @@ fn tokio_uring_arbiter() {
let f = tokio_uring::fs::File::create("test.txt").await.unwrap(); let f = tokio_uring::fs::File::create("test.txt").await.unwrap();
let buf = b"Hello World!"; let buf = b"Hello World!";
let (res, _) = f.write_at(&buf[..], 0).await; let (res, _) = f.write_all_at(&buf[..], 0).await;
assert!(res.is_ok()); assert!(res.is_ok());
f.sync_all().await.unwrap(); f.sync_all().await.unwrap();

View File

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

10
actix-server/Cargo.toml Executable file → Normal file
View File

@@ -1,6 +1,6 @@
[package] [package]
name = "actix-server" name = "actix-server"
version = "2.3.0" version = "2.4.0"
authors = [ authors = [
"Nikolay Kim <fafhrd91@gmail.com>", "Nikolay Kim <fafhrd91@gmail.com>",
"Rob Ede <robjtede@icloud.com>", "Rob Ede <robjtede@icloud.com>",
@@ -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.git" repository = "https://github.com/actix/actix-net/tree/master/actix-server"
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
@@ -25,7 +25,7 @@ default = []
io-uring = ["tokio-uring", "actix-rt/io-uring"] io-uring = ["tokio-uring", "actix-rt/io-uring"]
[dependencies] [dependencies]
actix-rt = { version = "2.8", default-features = false } actix-rt = { version = "2.10", default-features = false }
actix-service = "2" actix-service = "2"
actix-utils = "3" actix-utils = "3"
@@ -38,13 +38,13 @@ tracing = { version = "0.1.30", default-features = false, features = ["log"] }
# runtime for `io-uring` feature # runtime for `io-uring` feature
[target.'cfg(target_os = "linux")'.dependencies] [target.'cfg(target_os = "linux")'.dependencies]
tokio-uring = { version = "0.4", optional = true } tokio-uring = { version = "0.5", optional = true }
[dev-dependencies] [dev-dependencies]
actix-codec = "0.5" actix-codec = "0.5"
actix-rt = "2.8" actix-rt = "2.8"
bytes = "1" bytes = "1"
env_logger = "0.10" pretty_env_logger = "0.5"
futures-util = { version = "0.3.17", default-features = false, features = ["sink", "async-await-macro"] } futures-util = { version = "0.3.17", default-features = false, features = ["sink", "async-await-macro"] }
tokio = { version = "1.23.1", features = ["io-util", "rt-multi-thread", "macros", "fs"] } tokio = { version = "1.23.1", features = ["io-util", "rt-multi-thread", "macros", "fs"] }

View File

@@ -5,11 +5,11 @@
<!-- prettier-ignore-start --> <!-- prettier-ignore-start -->
[![crates.io](https://img.shields.io/crates/v/actix-server?label=latest)](https://crates.io/crates/actix-server) [![crates.io](https://img.shields.io/crates/v/actix-server?label=latest)](https://crates.io/crates/actix-server)
[![Documentation](https://docs.rs/actix-server/badge.svg?version=2.3.0)](https://docs.rs/actix-server/2.3.0) [![Documentation](https://docs.rs/actix-server/badge.svg?version=2.4.0)](https://docs.rs/actix-server/2.4.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) [![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-server.svg) ![MIT or Apache 2.0 licensed](https://img.shields.io/crates/l/actix-server.svg)
<br /> <br />
[![Dependency Status](https://deps.rs/crate/actix-server/2.3.0/status.svg)](https://deps.rs/crate/actix-server/2.3.0) [![Dependency Status](https://deps.rs/crate/actix-server/2.4.0/status.svg)](https://deps.rs/crate/actix-server/2.4.0)
![Download](https://img.shields.io/crates/d/actix-server.svg) ![Download](https://img.shields.io/crates/d/actix-server.svg)
[![Chat on Discord](https://img.shields.io/discord/771444961383153695?label=chat&logo=discord)](https://discord.gg/NWpN5mmg3x) [![Chat on Discord](https://img.shields.io/discord/771444961383153695?label=chat&logo=discord)](https://discord.gg/NWpN5mmg3x)

View File

@@ -18,7 +18,8 @@ use futures_util::{SinkExt as _, StreamExt as _};
use tokio::{fs::File, io::AsyncReadExt as _}; use tokio::{fs::File, io::AsyncReadExt as _};
async fn run() -> io::Result<()> { async fn run() -> io::Result<()> {
env_logger::init_from_env(env_logger::Env::default().default_filter_or("info")); pretty_env_logger::formatted_timed_builder()
.parse_env(pretty_env_logger::env_logger::Env::default().default_filter_or("info"));
let addr = ("127.0.0.1", 8080); let addr = ("127.0.0.1", 8080);
tracing::info!("starting server on port: {}", &addr.0); tracing::info!("starting server on port: {}", &addr.0);

View File

@@ -25,7 +25,8 @@ use futures_util::future::ok;
use tokio::io::{AsyncReadExt as _, AsyncWriteExt as _}; use tokio::io::{AsyncReadExt as _, AsyncWriteExt as _};
async fn run() -> io::Result<()> { async fn run() -> io::Result<()> {
env_logger::init_from_env(env_logger::Env::default().default_filter_or("info")); pretty_env_logger::formatted_timed_builder()
.parse_env(pretty_env_logger::env_logger::Env::default().default_filter_or("info"));
let count = Arc::new(AtomicUsize::new(0)); let count = Arc::new(AtomicUsize::new(0));

View File

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

View File

@@ -208,15 +208,13 @@ 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, Service, ServiceFactory, Ready,
}; };
#[derive(Clone)] #[derive(Clone)]

View File

@@ -351,7 +351,6 @@ 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,9 +202,7 @@ mod tests {
use futures_util::future::lazy; use futures_util::future::lazy;
use super::*; use super::*;
use crate::{ use crate::{ok, IntoServiceFactory, Ready, ServiceExt, ServiceFactoryExt};
ok, IntoServiceFactory, Ready, Service, ServiceExt, ServiceFactory, ServiceFactoryExt,
};
struct Srv; struct Srv;

View File

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

View File

@@ -226,7 +226,6 @@ 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,6 +2,15 @@
## Unreleased ## Unreleased
## 3.4.0
- Add `rustls-0_23`, `rustls-0_23-webpki-roots`, and `rustls-0_23-native-roots` crate features.
- Minimum supported Rust version (MSRV) is now 1.70.
## 3.3.0
- Add `rustls-0_22` crate feature which excludes any root certificate methods or re-exports.
## 3.2.0 ## 3.2.0
- Support Rustls v0.22. - Support Rustls v0.22.

41
actix-tls/Cargo.toml Executable file → Normal file
View File

@@ -1,6 +1,6 @@
[package] [package]
name = "actix-tls" name = "actix-tls"
version = "3.2.0" version = "3.4.0"
authors = [ authors = [
"Nikolay Kim <fafhrd91@gmail.com>", "Nikolay Kim <fafhrd91@gmail.com>",
"Rob Ede <robjtede@icloud.com>", "Rob Ede <robjtede@icloud.com>",
@@ -57,8 +57,14 @@ 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-webpki-roots = ["dep:tokio-rustls-025", "dep:rustls-pki-types-1", "dep:webpki-roots-026"] rustls-0_22 = ["dep:tokio-rustls-025", "dep:rustls-pki-types-1"]
rustls-0_22-native-roots = ["dep:tokio-rustls-025", "dep:rustls-pki-types-1", "dep:rustls-native-certs-07"] rustls-0_22-webpki-roots = ["rustls-0_22", "dep:webpki-roots-026"]
rustls-0_22-native-roots = ["rustls-0_22", "dep:rustls-native-certs-07"]
# use rustls v0.23 impls
rustls-0_23 = ["dep:tokio-rustls-026", "dep:rustls-pki-types-1"]
rustls-0_23-webpki-roots = ["rustls-0_23", "dep:webpki-roots-026"]
rustls-0_23-native-roots = ["rustls-0_23", "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"]
@@ -86,19 +92,24 @@ http-1 = { package = "http", version = "1", optional = true }
tls-openssl = { package = "openssl", version = "0.10.55", optional = true } tls-openssl = { package = "openssl", version = "0.10.55", optional = true }
tokio-openssl = { version = "0.6", optional = true } tokio-openssl = { version = "0.6", optional = true }
# rustls PKI types
rustls-pki-types-1 = { package = "rustls-pki-types", version = "1", optional = true }
# rustls v0.20 # rustls v0.20
tokio-rustls-023 = { package = "tokio-rustls", version = "0.23", optional = true } tokio-rustls-023 = { package = "tokio-rustls", version = "0.23", optional = true }
webpki-roots-022 = { package = "webpki-roots", version = "0.22", optional = true }
# rustls v0.21 # rustls v0.21
rustls-021 = { package = "rustls", version = "0.21.6", optional = true }
rustls-webpki-0101 = { package = "rustls-webpki", version = "0.101.4", optional = true }
tokio-rustls-024 = { package = "tokio-rustls", version = "0.24", optional = true } tokio-rustls-024 = { package = "tokio-rustls", version = "0.24", optional = true }
webpki-roots-025 = { package = "webpki-roots", version = "0.25", optional = true }
# rustls v0.22 # rustls v0.22
rustls-pki-types-1 = { package = "rustls-pki-types", version = "1", optional = true }
tokio-rustls-025 = { package = "tokio-rustls", version = "0.25", optional = true } tokio-rustls-025 = { package = "tokio-rustls", version = "0.25", optional = true }
# rustls v0.23
tokio-rustls-026 = { package = "tokio-rustls", version = "0.26", default-features = false, optional = true }
# webpki-roots used with rustls features
webpki-roots-022 = { package = "webpki-roots", version = "0.22", optional = true }
webpki-roots-025 = { package = "webpki-roots", version = "0.25", optional = true }
webpki-roots-026 = { package = "webpki-roots", version = "0.26", optional = true } webpki-roots-026 = { package = "webpki-roots", version = "0.26", optional = true }
# native root certificates for rustls impls # native root certificates for rustls impls
@@ -108,19 +119,23 @@ rustls-native-certs-07 = { package = "rustls-native-certs", version = "0.7", opt
# native-tls # native-tls
tokio-native-tls = { version = "0.3", optional = true } tokio-native-tls = { version = "0.3", optional = true }
[target.'cfg(any())'.dependencies]
rustls-021 = { package = "rustls", version = "0.21.6", optional = true } # force version with add_trust_anchors method
rustls-webpki-0101 = { package = "rustls-webpki", version = "0.101.4", optional = true } # force secure version
[dev-dependencies] [dev-dependencies]
actix-codec = "0.5" actix-codec = "0.5"
actix-rt = "2.2" actix-rt = "2.2"
actix-server = "2" actix-server = "2"
bytes = "1" bytes = "1"
env_logger = "0.10" pretty_env_logger = "0.5"
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.13"
rcgen = "0.11" rcgen = "0.12"
rustls-pemfile = "2" rustls-pemfile = "2"
tokio-rustls-025 = { package = "tokio-rustls", version = "0.25" } tokio-rustls-026 = { package = "tokio-rustls", version = "0.26" }
trust-dns-resolver = "0.23" trust-dns-resolver = "0.23"
[[example]] [[example]]
name = "accept-rustls" name = "accept-rustls"
required-features = ["accept", "rustls-0_22-webpki-roots"] required-features = ["accept", "rustls-0_23"]

21
actix-tls/README.md Normal file
View File

@@ -0,0 +1,21 @@
# `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.4.0)](https://docs.rs/actix-tls/3.4.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.4.0/status.svg)](https://deps.rs/crate/actix-tls/3.4.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

@@ -30,18 +30,19 @@ use std::{
use actix_rt::net::TcpStream; use actix_rt::net::TcpStream;
use actix_server::Server; use actix_server::Server;
use actix_service::ServiceFactoryExt as _; use actix_service::ServiceFactoryExt as _;
use actix_tls::accept::rustls_0_22::{Acceptor as RustlsAcceptor, TlsStream}; use actix_tls::accept::rustls_0_23::{Acceptor as RustlsAcceptor, TlsStream};
use futures_util::future::ok; use futures_util::future::ok;
use itertools::Itertools as _; use itertools::Itertools as _;
use rustls::server::ServerConfig; use rustls::server::ServerConfig;
use rustls_pemfile::{certs, rsa_private_keys}; use rustls_pemfile::{certs, rsa_private_keys};
use rustls_pki_types_1::PrivateKeyDer; use rustls_pki_types_1::PrivateKeyDer;
use tokio_rustls_025::rustls; use tokio_rustls_026::rustls;
use tracing::info; use tracing::info;
#[actix_rt::main] #[actix_rt::main]
async fn main() -> io::Result<()> { async fn main() -> io::Result<()> {
env_logger::init_from_env(env_logger::Env::default().default_filter_or("info")); pretty_env_logger::formatted_timed_builder()
.parse_env(pretty_env_logger::env_logger::Env::default().default_filter_or("info"));
let root_path = env!("CARGO_MANIFEST_DIR") let root_path = env!("CARGO_MANIFEST_DIR")
.parse::<PathBuf>() .parse::<PathBuf>()

View File

@@ -22,12 +22,12 @@ 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(any( #[cfg(feature = "rustls-0_22")]
feature = "rustls-0_22-webpki-roots",
feature = "rustls-0_22-native-roots",
))]
pub mod rustls_0_22; pub mod rustls_0_22;
#[cfg(feature = "rustls-0_23")]
pub mod rustls_0_23;
#[cfg(feature = "native-tls")] #[cfg(feature = "native-tls")]
pub mod native_tls; pub mod native_tls;
@@ -37,8 +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-webpki-roots", feature = "rustls-0_22",
feature = "rustls-0_22-native-roots", feature = "rustls-0_23",
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

@@ -0,0 +1,198 @@
//! `rustls` v0.23 based TLS connection acceptor service.
//!
//! See [`Acceptor`] for main service factory docs.
use std::{
convert::Infallible,
future::Future,
io::{self, IoSlice},
pin::Pin,
sync::Arc,
task::{Context, Poll},
time::Duration,
};
use actix_rt::{
net::{ActixStream, Ready},
time::{sleep, Sleep},
};
use actix_service::{Service, ServiceFactory};
use actix_utils::{
counter::{Counter, CounterGuard},
future::{ready, Ready as FutReady},
};
use pin_project_lite::pin_project;
use tokio::io::{AsyncRead, AsyncWrite, ReadBuf};
use tokio_rustls::{Accept, TlsAcceptor};
use tokio_rustls_026 as tokio_rustls;
use super::{TlsError, DEFAULT_TLS_HANDSHAKE_TIMEOUT, MAX_CONN_COUNTER};
pub mod reexports {
//! Re-exports from `rustls` that are useful for acceptors.
pub use tokio_rustls_026::rustls::ServerConfig;
}
/// Wraps a `rustls` based async TLS stream in order to implement [`ActixStream`].
pub struct TlsStream<IO>(tokio_rustls::server::TlsStream<IO>);
impl_more::impl_from!(<IO> in tokio_rustls::server::TlsStream<IO> => TlsStream<IO>);
impl_more::impl_deref_and_mut!(<IO> in TlsStream<IO> => tokio_rustls::server::TlsStream<IO>);
impl<IO: ActixStream> AsyncRead for TlsStream<IO> {
fn poll_read(
self: Pin<&mut Self>,
cx: &mut Context<'_>,
buf: &mut ReadBuf<'_>,
) -> Poll<io::Result<()>> {
Pin::new(&mut **self.get_mut()).poll_read(cx, buf)
}
}
impl<IO: ActixStream> AsyncWrite for TlsStream<IO> {
fn poll_write(
self: Pin<&mut Self>,
cx: &mut Context<'_>,
buf: &[u8],
) -> Poll<io::Result<usize>> {
Pin::new(&mut **self.get_mut()).poll_write(cx, buf)
}
fn poll_flush(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<io::Result<()>> {
Pin::new(&mut **self.get_mut()).poll_flush(cx)
}
fn poll_shutdown(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<io::Result<()>> {
Pin::new(&mut **self.get_mut()).poll_shutdown(cx)
}
fn poll_write_vectored(
self: Pin<&mut Self>,
cx: &mut Context<'_>,
bufs: &[IoSlice<'_>],
) -> Poll<io::Result<usize>> {
Pin::new(&mut **self.get_mut()).poll_write_vectored(cx, bufs)
}
fn is_write_vectored(&self) -> bool {
(**self).is_write_vectored()
}
}
impl<IO: ActixStream> ActixStream for TlsStream<IO> {
fn poll_read_ready(&self, cx: &mut Context<'_>) -> Poll<io::Result<Ready>> {
IO::poll_read_ready((**self).get_ref().0, cx)
}
fn poll_write_ready(&self, cx: &mut Context<'_>) -> Poll<io::Result<Ready>> {
IO::poll_write_ready((**self).get_ref().0, cx)
}
}
/// Accept TLS connections via the `rustls` crate.
pub struct Acceptor {
config: Arc<reexports::ServerConfig>,
handshake_timeout: Duration,
}
impl Acceptor {
/// Constructs `rustls` based acceptor service factory.
pub fn new(config: reexports::ServerConfig) -> Self {
Acceptor {
config: Arc::new(config),
handshake_timeout: DEFAULT_TLS_HANDSHAKE_TIMEOUT,
}
}
/// Limit the amount of time that the acceptor will wait for a TLS handshake to complete.
///
/// Default timeout is 3 seconds.
pub fn set_handshake_timeout(&mut self, handshake_timeout: Duration) -> &mut Self {
self.handshake_timeout = handshake_timeout;
self
}
}
impl Clone for Acceptor {
fn clone(&self) -> Self {
Self {
config: self.config.clone(),
handshake_timeout: self.handshake_timeout,
}
}
}
impl<IO: ActixStream> ServiceFactory<IO> for Acceptor {
type Response = TlsStream<IO>;
type Error = TlsError<io::Error, Infallible>;
type Config = ();
type Service = AcceptorService;
type InitError = ();
type Future = FutReady<Result<Self::Service, Self::InitError>>;
fn new_service(&self, _: ()) -> Self::Future {
let res = MAX_CONN_COUNTER.with(|conns| {
Ok(AcceptorService {
acceptor: self.config.clone().into(),
conns: conns.clone(),
handshake_timeout: self.handshake_timeout,
})
});
ready(res)
}
}
/// Rustls based acceptor service.
pub struct AcceptorService {
acceptor: TlsAcceptor,
conns: Counter,
handshake_timeout: Duration,
}
impl<IO: ActixStream> Service<IO> for AcceptorService {
type Response = TlsStream<IO>;
type Error = TlsError<io::Error, Infallible>;
type Future = AcceptFut<IO>;
fn poll_ready(&self, cx: &mut Context<'_>) -> Poll<Result<(), Self::Error>> {
if self.conns.available(cx) {
Poll::Ready(Ok(()))
} else {
Poll::Pending
}
}
fn call(&self, req: IO) -> Self::Future {
AcceptFut {
fut: self.acceptor.accept(req),
timeout: sleep(self.handshake_timeout),
_guard: self.conns.get(),
}
}
}
pin_project! {
/// Accept future for Rustls service.
#[doc(hidden)]
pub struct AcceptFut<IO: ActixStream> {
fut: Accept<IO>,
#[pin]
timeout: Sleep,
_guard: CounterGuard,
}
}
impl<IO: ActixStream> Future for AcceptFut<IO> {
type Output = Result<TlsStream<IO>, TlsError<io::Error, Infallible>>;
fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
let mut this = self.project();
match Pin::new(&mut this.fut).poll(cx) {
Poll::Ready(Ok(stream)) => Poll::Ready(Ok(TlsStream(stream))),
Poll::Ready(Err(err)) => Poll::Ready(Err(TlsError::Tls(err))),
Poll::Pending => this.timeout.poll(cx).map(|_| Err(TlsError::Timeout)),
}
}
}

View File

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

View File

@@ -3,7 +3,6 @@
//! 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,
@@ -35,6 +34,8 @@ 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,7 +3,6 @@
//! 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,
@@ -35,6 +34,8 @@ 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,9 +16,8 @@ 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, client::TlsStream as AsyncTlsStream, rustls::ClientConfig, Connect as RustlsConnect,
rustls::{ClientConfig, RootCertStore}, TlsConnector as RustlsTlsConnector,
Connect as RustlsConnect, TlsConnector as RustlsTlsConnector,
}; };
use tokio_rustls_025 as tokio_rustls; use tokio_rustls_025 as tokio_rustls;
@@ -35,9 +34,11 @@ 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<RootCertStore> { pub fn native_roots_cert_store() -> io::Result<tokio_rustls::rustls::RootCertStore> {
let mut root_certs = RootCertStore::empty(); let mut root_certs = tokio_rustls::rustls::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();
@@ -48,8 +49,8 @@ pub fn native_roots_cert_store() -> io::Result<RootCertStore> {
/// 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() -> RootCertStore { pub fn webpki_roots_cert_store() -> tokio_rustls::rustls::RootCertStore {
let mut root_certs = RootCertStore::empty(); let mut root_certs = tokio_rustls::rustls::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

@@ -0,0 +1,163 @@
//! Rustls based connector service.
//!
//! See [`TlsConnector`] for main connector service factory docs.
use std::{
future::Future,
io,
pin::Pin,
sync::Arc,
task::{Context, Poll},
};
use actix_rt::net::ActixStream;
use actix_service::{Service, ServiceFactory};
use actix_utils::future::{ok, Ready};
use futures_core::ready;
use rustls_pki_types_1::ServerName;
use tokio_rustls::{
client::TlsStream as AsyncTlsStream, rustls::ClientConfig, Connect as RustlsConnect,
TlsConnector as RustlsTlsConnector,
};
use tokio_rustls_026 as tokio_rustls;
use crate::connect::{Connection, Host};
pub mod reexports {
//! Re-exports from the `rustls` v0.23 ecosystem that are useful for connectors.
pub use tokio_rustls_026::{client::TlsStream as AsyncTlsStream, rustls::ClientConfig};
#[cfg(feature = "rustls-0_23-webpki-roots")]
pub use webpki_roots_026::TLS_SERVER_ROOTS;
}
/// 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.
///
/// [`rustls_native_certs::load_native_certs()`]: rustls_native_certs_07::load_native_certs()
#[cfg(feature = "rustls-0_23-native-roots")]
pub fn native_roots_cert_store() -> io::Result<tokio_rustls::rustls::RootCertStore> {
let mut root_certs = tokio_rustls::rustls::RootCertStore::empty();
for cert in rustls_native_certs_07::load_native_certs()? {
root_certs.add(cert).unwrap();
}
Ok(root_certs)
}
/// Returns standard root certificates from `webpki-roots` crate as a rustls certificate store.
#[cfg(feature = "rustls-0_23-webpki-roots")]
pub fn webpki_roots_cert_store() -> tokio_rustls::rustls::RootCertStore {
let mut root_certs = tokio_rustls::rustls::RootCertStore::empty();
root_certs.extend(webpki_roots_026::TLS_SERVER_ROOTS.to_owned());
root_certs
}
/// Connector service factory using `rustls`.
#[derive(Clone)]
pub struct TlsConnector {
connector: Arc<ClientConfig>,
}
impl TlsConnector {
/// Constructs new connector service factory from a `rustls` client configuration.
pub fn new(connector: Arc<ClientConfig>) -> Self {
TlsConnector { connector }
}
/// Constructs new connector service from a `rustls` client configuration.
pub fn service(connector: Arc<ClientConfig>) -> TlsConnectorService {
TlsConnectorService { connector }
}
}
impl<R, IO> ServiceFactory<Connection<R, IO>> for TlsConnector
where
R: Host,
IO: ActixStream + 'static,
{
type Response = Connection<R, AsyncTlsStream<IO>>;
type Error = io::Error;
type Config = ();
type Service = TlsConnectorService;
type InitError = ();
type Future = Ready<Result<Self::Service, Self::InitError>>;
fn new_service(&self, _: ()) -> Self::Future {
ok(TlsConnectorService {
connector: self.connector.clone(),
})
}
}
/// Connector service using `rustls`.
#[derive(Clone)]
pub struct TlsConnectorService {
connector: Arc<ClientConfig>,
}
impl<R, IO> Service<Connection<R, IO>> for TlsConnectorService
where
R: Host,
IO: ActixStream,
{
type Response = Connection<R, AsyncTlsStream<IO>>;
type Error = io::Error;
type Future = ConnectFut<R, IO>;
actix_service::always_ready!();
fn call(&self, connection: Connection<R, IO>) -> Self::Future {
tracing::trace!("TLS handshake start for: {:?}", connection.hostname());
let (stream, conn) = connection.replace_io(());
match ServerName::try_from(conn.hostname()) {
Ok(host) => ConnectFut::Future {
connect: RustlsTlsConnector::from(Arc::clone(&self.connector))
.connect(host.to_owned(), stream),
connection: Some(conn),
},
Err(_) => ConnectFut::InvalidServerName,
}
}
}
/// Connect future for Rustls service.
#[doc(hidden)]
#[allow(clippy::large_enum_variant)]
pub enum ConnectFut<R, IO> {
InvalidServerName,
Future {
connect: RustlsConnect<IO>,
connection: Option<Connection<R, ()>>,
},
}
impl<R, IO> Future for ConnectFut<R, IO>
where
R: Host,
IO: ActixStream,
{
type Output = io::Result<Connection<R, AsyncTlsStream<IO>>>;
fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
match self.get_mut() {
Self::InvalidServerName => Poll::Ready(Err(io::Error::new(
io::ErrorKind::InvalidInput,
"connection parameters specified invalid server name",
))),
Self::Future {
connect,
connection,
} => {
let stream = ready!(Pin::new(connect).poll(cx))?;
let connection = connection.take().unwrap();
tracing::trace!("TLS handshake success: {:?}", connection.hostname());
Poll::Ready(Ok(connection.replace_io(stream).1))
}
}
}
}

View File

@@ -3,7 +3,7 @@
#![cfg(all( #![cfg(all(
feature = "accept", feature = "accept",
feature = "connect", feature = "connect",
feature = "rustls-0_22", feature = "rustls-0_23",
feature = "openssl" feature = "openssl"
))] ))]
@@ -12,11 +12,13 @@ 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::accept::openssl::{Acceptor, TlsStream}; use actix_tls::{
accept::openssl::{Acceptor, TlsStream},
connect::rustls_0_23::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::rustls::{ClientConfig, RootCertStore}; use tokio_rustls_026::rustls::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 =
@@ -47,45 +49,46 @@ fn openssl_acceptor(cert: String, key: String) -> tls_openssl::ssl::SslAcceptor
builder.build() builder.build()
} }
#[allow(dead_code)]
mod danger { mod danger {
use tokio_rustls_025::rustls; use rustls_pki_types_1::{CertificateDer, ServerName, UnixTime};
use tokio_rustls_026::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: &rustls_pki_types_1::CertificateDer::CertificateDer<'_>, _end_entity: &CertificateDer<'_>,
intermediates: &[rustls_pki_types_1::CertificateDer::CertificateDer<'_>], _intermediates: &[CertificateDer<'_>],
server_name: &rustls_pki_types_1::CertificateDer::ServerName<'_>, _server_name: &ServerName<'_>,
ocsp_response: &[u8], _ocsp: &[u8],
now: rustls_pki_types_1::CertificateDer::UnixTime, _now: 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())
} }
fn supported_verify_schemes(&self) -> Vec<rustls::SignatureScheme> { fn supported_verify_schemes(&self) -> Vec<rustls::SignatureScheme> {
rustls::crypto::ring::default_provider() rustls::crypto::aws_lc_rs::default_provider()
.signature_verification_algorithms .signature_verification_algorithms
.supported_schemes() .supported_schemes()
} }
@@ -108,6 +111,10 @@ fn rustls_connector(_cert: String, _key: String) -> ClientConfig {
#[actix_rt::test] #[actix_rt::test]
async fn accepts_connections() { async fn accepts_connections() {
tokio_rustls_026::rustls::crypto::aws_lc_rs::default_provider()
.install_default()
.unwrap();
let (cert, key) = new_cert_and_key(); let (cert, key) = new_cert_and_key();
let srv = TestServer::start({ let srv = TestServer::start({
@@ -134,13 +141,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::rustls::ClientConnection::new( let mut conn = tokio_rustls_026::rustls::ClientConnection::new(
config, config,
ServerName::try_from("localhost").unwrap(), ServerName::try_from("localhost").unwrap(),
) )
.unwrap(); .unwrap();
let mut stream = tokio_rustls::rustls::Stream::new(&mut conn, &mut sock); let mut stream = tokio_rustls_026::rustls::Stream::new(&mut conn, &mut sock);
stream.flush().expect("TLS handshake failed"); stream.flush().expect("TLS handshake failed");
} }

View File

@@ -3,7 +3,7 @@
#![cfg(all( #![cfg(all(
feature = "accept", feature = "accept",
feature = "connect", feature = "connect",
feature = "rustls-0_22", feature = "rustls-0_23",
feature = "openssl" feature = "openssl"
))] ))]
@@ -15,14 +15,13 @@ 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_21::{Acceptor, TlsStream}, accept::rustls_0_23::{reexports::ServerConfig, 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 =
@@ -35,7 +34,7 @@ fn new_cert_and_key() -> (String, String) {
(cert, key) (cert, key)
} }
fn rustls_server_config(cert: String, key: String) -> rustls::ServerConfig { fn rustls_server_config(cert: String, key: String) -> 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());
@@ -47,9 +46,8 @@ fn rustls_server_config(cert: String, key: String) -> rustls::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, PrivateKey(keys.remove(0))) .with_single_cert(cert_chain, PrivateKeyDer::Pkcs8(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()];
@@ -75,6 +73,10 @@ fn openssl_connector(cert: String, key: String) -> SslConnector {
#[actix_rt::test] #[actix_rt::test]
async fn accepts_connections() { async fn accepts_connections() {
tokio_rustls_026::rustls::crypto::aws_lc_rs::default_provider()
.install_default()
.unwrap();
let (cert, key) = new_cert_and_key(); let (cert, key) = new_cert_and_key();
let srv = TestServer::start({ let srv = TestServer::start({

View File

@@ -30,7 +30,7 @@ async fn test_string() {
assert_eq!(con.peer_addr().unwrap(), srv.addr()); assert_eq!(con.peer_addr().unwrap(), srv.addr());
} }
#[cfg(feature = "rustls-0_22")] #[cfg(feature = "rustls-0_23")]
#[actix_rt::test] #[actix_rt::test]
async fn test_rustls_string() { async fn test_rustls_string() {
let srv = TestServer::start(|| { let srv = TestServer::start(|| {
@@ -98,8 +98,6 @@ 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);
@@ -114,7 +112,7 @@ async fn test_openssl_uri() {
assert_eq!(con.peer_addr().unwrap(), srv.addr()); assert_eq!(con.peer_addr().unwrap(), srv.addr());
} }
#[cfg(all(feature = "rustls-0_22", feature = "uri"))] #[cfg(all(feature = "rustls-0_23", feature = "uri"))]
#[actix_rt::test] #[actix_rt::test]
async fn test_rustls_uri_http1() { async fn test_rustls_uri_http1() {
let srv = TestServer::start(|| { let srv = TestServer::start(|| {
@@ -131,11 +129,9 @@ async fn test_rustls_uri_http1() {
assert_eq!(con.peer_addr().unwrap(), srv.addr()); assert_eq!(con.peer_addr().unwrap(), srv.addr());
} }
#[cfg(all(feature = "rustls-0_22", feature = "uri"))] #[cfg(all(feature = "rustls-0_23", 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.65. - Minimum supported Rust version (MSRV) is now 1.70.
## 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.git" repository = "https://github.com/actix/actix-net/tree/master/actix-tracing"
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>> = RefCell::new(Vec::new()); static SPAN: RefCell<Vec<span::Id>> = const { RefCell::new(Vec::new()) };
} }
#[derive(Default)] #[derive(Default)]

View File

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

View File

@@ -103,6 +103,7 @@ 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,6 +2,8 @@
## 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, convert::TryFrom, fmt, hash, ops, str}; use core::{borrow::Borrow, fmt, hash, ops, str};
use bytes::Bytes; use bytes::Bytes;

View File

@@ -1,14 +1,69 @@
_list: _list:
@just --list @just --list
# Downgrade dev-dependencies necessary to run MSRV checks/tests.
[private]
downgrade-for-msrv:
cargo update -p=clap --precise=4.4.18
msrv := ```
cargo metadata --format-version=1 \
| jq -r 'first(.packages[] | select(.source == null and .rust_version)) | .rust_version' \
| sed -E 's/^1\.([0-9]{2})$/1\.\1\.0/'
```
msrv_rustup := "+" + msrv
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 + "'"
}
# Run Clippy over workspace.
clippy toolchain="":
cargo {{ toolchain }} clippy --workspace --all-targets {{ all_crate_features }}
# Test workspace code.
[macos, windows]
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 code.
[linux]
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 {{ non_linux_all_features_list }}
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 toolchain)
# Document crates in workspace. # Document crates in workspace.
doc: doc *args:
RUSTDOCFLAGS="--cfg=docsrs" cargo +nightly doc --no-deps --workspace --features=rustls,openssl RUSTDOCFLAGS="--cfg=docsrs -Dwarnings" cargo +nightly doc --no-deps --workspace {{ all_crate_features }} {{ args }}
# Document crates in workspace and watch for changes. # Document crates in workspace and watch for changes.
doc-watch: doc-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 --open @just doc --open
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 cargo watch -- just doc
# 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":
@@ -16,7 +71,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
@@ -29,9 +84,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,6 +2,8 @@
## 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,6 +2,8 @@
## 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.