Add channel-aware delivery and update roadmap
This commit is contained in:
14
M3_STATUS.md
14
M3_STATUS.md
@@ -8,7 +8,7 @@
|
||||
## What is M3?
|
||||
|
||||
M3 adds:
|
||||
1. **Delivery Service (DS)** — store-and-forward relay for MLS messages (Cap'n Proto RPC on port 7001)
|
||||
1. **Delivery Service (DS)** — store-and-forward relay for MLS messages (Cap'n Proto RPC on the unified NodeService endpoint)
|
||||
2. **MLS Group Lifecycle** — `GroupMember` struct: create group, add member (Welcome), join group, send/receive encrypted application messages
|
||||
|
||||
---
|
||||
@@ -47,14 +47,10 @@ Exposes `pub mod delivery_capnp`.
|
||||
Exposes `pub use group::GroupMember`.
|
||||
|
||||
### `quicnprotochat-server/src/main.rs` ✅
|
||||
Two listeners on one `LocalSet`:
|
||||
- Port 7000 (AS): `AuthServiceImpl` — unchanged from M2
|
||||
- Port 7001 (DS): `DeliveryServiceImpl` — new; uses `DashMap<Vec<u8>, VecDeque<Vec<u8>>>` keyed by Ed25519 public key
|
||||
|
||||
New CLI flag: `--ds-listen` (default `0.0.0.0:7001`, env `QUICNPROTOCHAT_DS_LISTEN`).
|
||||
Unified NodeService listener (Auth + Delivery) on one QUIC/TLS endpoint; uses `DashMap<Vec<u8>, VecDeque<Vec<u8>>>` keyed by Ed25519 public key.
|
||||
|
||||
### `quicnprotochat-client/src/main.rs` ✅
|
||||
Added `demo-group` subcommand to exercise the full Alice↔Bob MLS flow against live AS (7000) and DS (7001): uploads both KeyPackages, delivers Welcome via DS, and exchanges application messages.
|
||||
Added `demo-group` subcommand to exercise the full Alice↔Bob MLS flow against live NodeService (4201): uploads both KeyPackages, delivers Welcome, and exchanges application messages.
|
||||
|
||||
### `quicnprotochat-client/tests` ✅
|
||||
`cargo test -p quicnprotochat-client --tests` passes, including the MLS round-trip integration test.
|
||||
@@ -69,8 +65,8 @@ Open question (future work): if we need persistent groups instead of ephemeral d
|
||||
|
||||
## Key Design Decisions
|
||||
|
||||
### DS Port (7001) vs same port
|
||||
The server uses **two separate listeners** (7000 for AS, 7001 for DS) because capnp-rpc supports only one bootstrap capability per connection. No new schema was needed.
|
||||
### DS Port (single endpoint)
|
||||
The server now exposes a **single NodeService** endpoint (default 4201) that combines Authentication and Delivery over one capnp-rpc bootstrap capability.
|
||||
|
||||
### GroupMember lifecycle (CRITICAL)
|
||||
The `OpenMlsRustCrypto` backend holds the HPKE init private key **in memory**. The **same `GroupMember` instance** must be used from `generate_key_package()` through `join_group()`. Do NOT create a new GroupMember between these calls.
|
||||
|
||||
Reference in New Issue
Block a user