feat(call,http): expose EventEnvelope-level dispatch API for non-QUIC transports

Make Dispatcher::dispatch_requested pub and extract abort-cascade handling
into a pub handle_abort method so the WebSocket handler can feed deserialized
EventEnvelopes directly to the shared Dispatcher without a QUIC Connection.

CallConnection gains a new_overlay_only(identity) constructor (Option A) that
holds the Layer 2 overlay, PendingRequestMap, and resolved bearer Identity
without a QUIC Connection; identity() reads the stored field for the non-QUIC
case. compose_root_env uses the new identity() accessor for both paths.

The existing QUIC path (CallAdapter, CallClient, run_loop, handle_stream) is
unchanged — outgoing client methods guard on connection().is_none().
This commit is contained in:
2026-07-01 17:17:02 +00:00
parent 1900c72deb
commit ef53a03589
5 changed files with 522 additions and 28 deletions

View File

@@ -708,7 +708,10 @@ mod tests {
let registry = registry_with_caps();
let client = CallClient::new(Arc::clone(&registry), Arc::new(NoopIdentityProvider));
let conn = client.spawn_dispatch(stub_connection());
assert_eq!(conn.connection().remote_alpn(), b"alknet/call");
assert_eq!(
conn.connection().expect("quic connection present").remote_alpn(),
b"alknet/call"
);
std::mem::drop(conn);
}