Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
c1e5745
feat(mq-h3): crate skeleton, h3wire submodule, pass-through decorator
mp0rta Oct 6, 2026
42a0900
feat(mq-h3): connection setup, actions and the test rig
mp0rta Oct 6, 2026
b7ce3aa
fix(mq-h3): flush core bytes after every call, exact direction guard
mp0rta Oct 6, 2026
76f750d
feat(mq-h3): request receive — bootstrap, headers, body pull
mp0rta Oct 6, 2026
bb1cc50
fix(mq-h3): retire a request stream aborted during a feed; xqc_h3 ope…
mp0rta Oct 6, 2026
93cb2e0
feat(mq-h3): request send — DATA framing, finish latch, pending FIN, …
mp0rta Oct 6, 2026
99193b4
feat(mq-h3): request lifecycle and connection close
mp0rta Oct 6, 2026
ed40746
feat(mq-h3): request metrics
mp0rta Oct 6, 2026
0b8e8b4
fix(mq-h3): h3_reset after Finished ends the send side
mp0rta Oct 6, 2026
adae77b
fix(mq-h3): a peer reset after Finished ends the send side
mp0rta Oct 6, 2026
c8537e1
test(mq-h3): property test over random op/event sequences
mp0rta Oct 6, 2026
625c347
fix(mq-h3): h3_send_headers after our send side ended returns Reset
mp0rta Oct 6, 2026
95b4ae4
test(mq-h3): deeper property run and the client peer-reset case
mp0rta Oct 6, 2026
31f73ca
test(integration): per-side H3 backend and a raw-H3 peer
mp0rta Oct 6, 2026
1712cb5
fix(mq-h3): re-check liveness on pop as the bare transport does
mp0rta Oct 6, 2026
f3f5c85
test(integration): host the raw-H3 peer as a gateway server, retried …
mp0rta Oct 6, 2026
7187aa8
test(integration): xqc_h3 × h3wire differential matrix
mp0rta Oct 6, 2026
7a8df5a
test(integration): malformed-input cells against each receiver
mp0rta Oct 6, 2026
d4ff0b6
test(integration): mq.req parity per matrixed request
mp0rta Oct 6, 2026
845ee97
perf(mq-h3): sweep only dirty conns, dedupe level events in O(1)
mp0rta Oct 6, 2026
bd75779
test(mq-h3): keep an offered body fin in the property model
mp0rta Oct 6, 2026
1922a6a
test(integration): run pair_mitm in all four backend cells
mp0rta Oct 6, 2026
1abf3aa
fix(mq-h3): close the conn on a server-initiated bidi stream
mp0rta Oct 6, 2026
6fabcc2
fix(mq-h3): defer a peer RESET while the raw FIN is carried
mp0rta Oct 6, 2026
f9f5093
refactor(mq-h3): merge duplicated request helpers, fix a stale comment
mp0rta Oct 6, 2026
33cf97a
test(integration): compare whole header lists per matrixed request
mp0rta Oct 6, 2026
db4401c
test(integration): §5.3 (2) and (3) cells against each receiver
mp0rta Oct 6, 2026
248a170
test(integration): mark h2_cl_100's origin_tls pin as a gateway misre…
mp0rta Oct 6, 2026
503298b
perf(mq-h3): consume the request carry by cursor, not front-drain
mp0rta Oct 6, 2026
d0655f5
perf(mq-h3): flush only streams that may hold core bytes
mp0rta Oct 6, 2026
3e3c9fc
feat(mq-transport-api): conn_live, a cheap conn liveness probe
mp0rta Oct 6, 2026
c1865d3
test(integration): single mutex guard in reset asserts; count gateway…
mp0rta Oct 6, 2026
fff9b3c
fix(ci): initialize deps submodules and pin xquic caches reliably
mp0rta Oct 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 20 additions & 10 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,9 @@ jobs:
run: sudo apt-get update && sudo apt-get install -y cmake libevent-dev libcurl4-openssl-dev libnghttp2-dev golang
- name: Compute xquic SHA
id: xqsha
run: echo "sha=$(git submodule status third_party/xquic | awk '{print $1}' | tr -d '+-')" >> "$GITHUB_OUTPUT"
run: |
sha=$(git -c safe.directory="$GITHUB_WORKSPACE" rev-parse HEAD:third_party/xquic)
echo "sha=$sha" >> "$GITHUB_OUTPUT"

- name: Cache BoringSSL (gcc fPIC)
id: bssl-cache
Expand All @@ -68,7 +70,7 @@ jobs:
path: |
third_party/xquic/build
third_party/xquic/include/xquic/xqc_configure.h
key: xquic-${{ steps.xqsha.outputs.sha }}-linux-gcc-release-eventlog-bssl-0ce57bb-v2
key: xquic-${{ steps.xqsha.outputs.sha }}-linux-gcc-release-eventlog-bssl-0ce57bb-v3
- name: Build xquic
if: steps.xquic-cache.outputs.cache-hit != 'true'
run: |
Expand Down Expand Up @@ -105,7 +107,9 @@ jobs:
run: sudo apt-get update && sudo apt-get install -y cmake libevent-dev libcurl4-openssl-dev libnghttp2-dev golang
- name: Compute xquic SHA
id: xqsha
run: echo "sha=$(git submodule status third_party/xquic | awk '{print $1}' | tr -d '+-')" >> "$GITHUB_OUTPUT"
run: |
sha=$(git -c safe.directory="$GITHUB_WORKSPACE" rev-parse HEAD:third_party/xquic)
echo "sha=$sha" >> "$GITHUB_OUTPUT"

- name: Cache BoringSSL (gcc fPIC)
id: bssl-cache
Expand All @@ -128,7 +132,7 @@ jobs:
path: |
third_party/xquic/build
third_party/xquic/include/xquic/xqc_configure.h
key: xquic-${{ steps.xqsha.outputs.sha }}-linux-gcc-release-eventlog-bssl-0ce57bb-v2
key: xquic-${{ steps.xqsha.outputs.sha }}-linux-gcc-release-eventlog-bssl-0ce57bb-v3
- name: Build xquic
if: steps.xquic-cache.outputs.cache-hit != 'true'
run: |
Expand Down Expand Up @@ -201,7 +205,9 @@ jobs:
run: sudo apt-get update && sudo apt-get install -y cmake libevent-dev libcurl4-openssl-dev libnghttp2-dev golang
- name: Compute xquic SHA
id: xqsha
run: echo "sha=$(git submodule status third_party/xquic | awk '{print $1}' | tr -d '+-')" >> "$GITHUB_OUTPUT"
run: |
sha=$(git -c safe.directory="$GITHUB_WORKSPACE" rev-parse HEAD:third_party/xquic)
echo "sha=$sha" >> "$GITHUB_OUTPUT"

- name: Cache BoringSSL (gcc fPIC)
id: bssl-cache
Expand All @@ -224,7 +230,7 @@ jobs:
path: |
third_party/xquic/build
third_party/xquic/include/xquic/xqc_configure.h
key: xquic-${{ steps.xqsha.outputs.sha }}-linux-gcc-release-eventlog-bssl-0ce57bb-v2
key: xquic-${{ steps.xqsha.outputs.sha }}-linux-gcc-release-eventlog-bssl-0ce57bb-v3
- name: Build xquic
if: steps.xquic-cache.outputs.cache-hit != 'true'
run: |
Expand Down Expand Up @@ -278,7 +284,9 @@ jobs:
ca-certificates
- name: Compute xquic SHA
id: xqsha
run: echo "sha=$(git submodule status third_party/xquic | awk '{print $1}' | tr -d '+-')" >> "$GITHUB_OUTPUT"
run: |
sha=$(git -c safe.directory="$GITHUB_WORKSPACE" rev-parse HEAD:third_party/xquic)
echo "sha=$sha" >> "$GITHUB_OUTPUT"

- name: Cache BoringSSL (gcc fPIC)
id: bssl-cache
Expand All @@ -301,7 +309,7 @@ jobs:
path: |
third_party/xquic/build
third_party/xquic/include/xquic/xqc_configure.h
key: xquic-${{ steps.xqsha.outputs.sha }}-linux-gcc-release-eventlog-bssl-0ce57bb-v2
key: xquic-${{ steps.xqsha.outputs.sha }}-linux-gcc-release-eventlog-bssl-0ce57bb-v3
- name: Build xquic
if: steps.xquic-cache.outputs.cache-hit != 'true'
run: |
Expand Down Expand Up @@ -352,7 +360,9 @@ jobs:
run: sudo apt-get update && sudo apt-get install -y cmake libevent-dev libnghttp2-dev golang pkg-config
- name: Compute xquic SHA
id: xqsha
run: echo "sha=$(git submodule status third_party/xquic | awk '{print $1}' | tr -d '+-')" >> "$GITHUB_OUTPUT"
run: |
sha=$(git -c safe.directory="$GITHUB_WORKSPACE" rev-parse HEAD:third_party/xquic)
echo "sha=$sha" >> "$GITHUB_OUTPUT"

- name: Cache BoringSSL (gcc fPIC)
id: bssl-cache
Expand All @@ -375,7 +385,7 @@ jobs:
path: |
third_party/xquic/build
third_party/xquic/include/xquic/xqc_configure.h
key: xquic-${{ steps.xqsha.outputs.sha }}-linux-gcc-release-eventlog-bssl-0ce57bb-v2
key: xquic-${{ steps.xqsha.outputs.sha }}-linux-gcc-release-eventlog-bssl-0ce57bb-v3
- name: Build xquic
if: steps.xquic-cache.outputs.cache-hit != 'true'
run: |
Expand Down
6 changes: 4 additions & 2 deletions .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,9 @@ jobs:
# extraction. Same cache keys as ci.yml to ride the existing caches. ---
- name: Compute xquic SHA
id: xqsha
run: echo "sha=$(git submodule status third_party/xquic | awk '{print $1}' | tr -d '+-')" >> "$GITHUB_OUTPUT"
run: |
sha=$(git -c safe.directory="$GITHUB_WORKSPACE" rev-parse HEAD:third_party/xquic)
echo "sha=$sha" >> "$GITHUB_OUTPUT"

- name: Cache BoringSSL (gcc fPIC)
id: bssl-cache
Expand All @@ -58,7 +60,7 @@ jobs:
path: |
third_party/xquic/build
third_party/xquic/include/xquic/xqc_configure.h
key: xquic-${{ steps.xqsha.outputs.sha }}-linux-gcc-release-eventlog-bssl-0ce57bb-v2
key: xquic-${{ steps.xqsha.outputs.sha }}-linux-gcc-release-eventlog-bssl-0ce57bb-v3
- name: Build xquic
if: steps.xquic-cache.outputs.cache-hit != 'true'
run: |
Expand Down
6 changes: 4 additions & 2 deletions .github/workflows/perf-weekly.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,9 @@ jobs:

- name: Compute xquic SHA
id: xqsha
run: echo "sha=$(git submodule status third_party/xquic | awk '{print $1}' | tr -d '+-')" >> "$GITHUB_OUTPUT"
run: |
sha=$(git -c safe.directory="$GITHUB_WORKSPACE" rev-parse HEAD:third_party/xquic)
echo "sha=$sha" >> "$GITHUB_OUTPUT"

- name: Cache BoringSSL (gcc fPIC)
id: bssl-cache
Expand All @@ -69,7 +71,7 @@ jobs:
path: |
third_party/xquic/build
third_party/xquic/include/xquic/xqc_configure.h
key: xquic-${{ steps.xqsha.outputs.sha }}-linux-gcc-release-eventlog-bssl-0ce57bb-v2
key: xquic-${{ steps.xqsha.outputs.sha }}-linux-gcc-release-eventlog-bssl-0ce57bb-v3

- name: Build xquic
if: steps.xquic-cache.outputs.cache-hit != 'true'
Expand Down
6 changes: 4 additions & 2 deletions .github/workflows/perf.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,9 @@ jobs:

- name: Compute xquic SHA
id: xqsha
run: echo "sha=$(git submodule status third_party/xquic | awk '{print $1}' | tr -d '+-')" >> "$GITHUB_OUTPUT"
run: |
sha=$(git -c safe.directory="$GITHUB_WORKSPACE" rev-parse HEAD:third_party/xquic)
echo "sha=$sha" >> "$GITHUB_OUTPUT"

- name: Cache BoringSSL (gcc fPIC)
id: bssl-cache
Expand All @@ -69,7 +71,7 @@ jobs:
path: |
third_party/xquic/build
third_party/xquic/include/xquic/xqc_configure.h
key: xquic-${{ steps.xqsha.outputs.sha }}-linux-gcc-release-eventlog-bssl-0ce57bb-v2
key: xquic-${{ steps.xqsha.outputs.sha }}-linux-gcc-release-eventlog-bssl-0ce57bb-v3

- name: Build xquic
if: steps.xquic-cache.outputs.cache-hit != 'true'
Expand Down
6 changes: 4 additions & 2 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,9 @@ jobs:

- name: Compute xquic SHA
id: xqsha
run: echo "sha=$(git submodule status third_party/xquic | awk '{print $1}' | tr -d '+-')" >> "$GITHUB_OUTPUT"
run: |
sha=$(git -c safe.directory="$GITHUB_WORKSPACE" rev-parse HEAD:third_party/xquic)
echo "sha=$sha" >> "$GITHUB_OUTPUT"

# Cache keys are arch-qualified: the matrix runs amd64 + arm64, and a
# non-arch key would let arm64 restore an amd64 BoringSSL/xquic build.
Expand All @@ -79,7 +81,7 @@ jobs:
path: |
third_party/xquic/build
third_party/xquic/include/xquic/xqc_configure.h
key: xquic-${{ steps.xqsha.outputs.sha }}-${{ matrix.arch }}-gcc-release-bssl-0ce57bb-v1
key: xquic-${{ steps.xqsha.outputs.sha }}-${{ matrix.arch }}-gcc-release-bssl-0ce57bb-v2
- name: Build xquic
if: steps.xquic-cache.outputs.cache-hit != 'true'
run: |
Expand Down
14 changes: 10 additions & 4 deletions .github/workflows/rust.yml
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,8 @@ jobs:
timeout-minutes: 15
steps:
- uses: actions/checkout@v6
with:
submodules: recursive
- uses: taiki-e/install-action@v2
with:
tool: cargo-deny,cargo-audit
Expand Down Expand Up @@ -186,15 +188,17 @@ jobs:
echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"
- name: Compute xquic SHA
id: xqsha
run: echo "sha=$(git submodule status third_party/xquic | awk '{print $1}' | tr -d '+-')" >> "$GITHUB_OUTPUT"
run: |
sha=$(git -c safe.directory="$GITHUB_WORKSPACE" rev-parse HEAD:third_party/xquic)
echo "sha=$sha" >> "$GITHUB_OUTPUT"
- name: Cache xquic + BoringSSL (build-xquic.sh)
uses: actions/cache@v5
with:
path: |
third_party/xquic/build
third_party/xquic/third_party/boringssl/build
third_party/xquic/include/xquic/xqc_configure.h
key: xquic-${{ steps.xqsha.outputs.sha }}-build-xquic-sh-v1
key: xquic-${{ steps.xqsha.outputs.sha }}-build-xquic-sh-v2
- name: Build the C mqproxy (interop peer)
run: |
scripts/build-xquic.sh
Expand Down Expand Up @@ -274,7 +278,9 @@ jobs:
- name: Compute xquic SHA
if: github.event_name != 'push'
id: xqsha
run: echo "sha=$(git submodule status third_party/xquic | awk '{print $1}' | tr -d '+-')" >> "$GITHUB_OUTPUT"
run: |
sha=$(git -c safe.directory="$GITHUB_WORKSPACE" rev-parse HEAD:third_party/xquic)
echo "sha=$sha" >> "$GITHUB_OUTPUT"
- name: Cache xquic + BoringSSL (build-xquic.sh)
if: github.event_name != 'push'
uses: actions/cache@v5
Expand All @@ -283,7 +289,7 @@ jobs:
third_party/xquic/build
third_party/xquic/third_party/boringssl/build
third_party/xquic/include/xquic/xqc_configure.h
key: xquic-${{ steps.xqsha.outputs.sha }}-build-xquic-sh-v1
key: xquic-${{ steps.xqsha.outputs.sha }}-build-xquic-sh-v2
- name: Build the C mqproxy (baseline)
if: github.event_name != 'push'
run: |
Expand Down
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,6 @@
path = third_party/xquic
url = https://github.com/mp0rta/xquic.git
branch = mqvpn-main
[submodule "third_party/h3wire"]
path = third_party/h3wire
url = https://github.com/mp0rta/h3wire.git
20 changes: 20 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ resolver = "2"
members = [
"crates/xquic-sys", "crates/mq-linux", "crates/mq-wire", "crates/mq-http", "crates/mq-wire-difftest",
"crates/mq-transport-api", "crates/mq-transport", "crates/mq-runtime",
"crates/mq-proxy", "crates/mqproxy", "crates/mq-integration",
"crates/mq-h3", "crates/mq-proxy", "crates/mqproxy", "crates/mq-integration",
]
exclude = ["crates/mq-wire/fuzz", "crates/mq-proxy/fuzz", "crates/mq-http/fuzz"] # cargo-fuzz crates are their own workspaces

Expand Down
18 changes: 18 additions & 0 deletions crates/mq-h3/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
[package]
name = "mq-h3"
version.workspace = true
edition.workspace = true
rust-version.workspace = true
license.workspace = true

[dependencies]
h3wire = { path = "../../third_party/h3wire/h3wire" }
mq-transport-api = { path = "../mq-transport-api" }
log = { workspace = true }

[features]
test-support = []

[dev-dependencies]
mq-runtime = { path = "../mq-runtime", features = ["test-support"] }
proptest = { workspace = true }
Loading
Loading