XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFESystem

【Rust】XFE系统,基于Rust和汇编

公开
关注 0 Fork 0 Star 0
Readme.md

裸机 HTTP 协议与 QEMU 受控服务

NativeHttpProtocolTests.cs 直接编译内核 NativeWebTransport.cs 中的同一份有界 HTTP framing 代码。测试条件仅排除必须由 Cosmos runtime 执行的 socket/网卡部分,不使用同名假 Cosmos 包或宿主 fetch 代替 guest 传输。25 项测试覆盖 Content-Length、Chunked、close-delimited、任意包边界、UTF-8、截断、超限、歧义帧、控制字符、CSP 与字符集。

$Artifacts = Join-Path (Get-Location) 'build/CSharp/HttpProtocolArtifacts'
dotnet test Tests/XFESystem.HttpProtocol.Tests "-p:ArtifactsPath=$Artifacts"

原生适配器使用 Cosmos 3.0.94 的 IPv4 socket 与 DNS,要求已初始化的单调时钟、timer、网卡及 IPv4 配置。3.0.94 修复了 3.0.88 的失败连接清理和接收语义;ConnectTcp 仍固定等待至多 5 秒,因此适配器要求至少 5.1 秒整次预算,剩余预算不足时不会再发起连接。整个导航共享 deadline;正文、header、行、字段、重定向都有上限。异常且未关闭的 peer 会触发该 transport 的熔断,避免反复累积上游 detached half-close 状态。

HTTPS 当前明确拒绝:没有经过移植和验收的原生 TLS/证书链实现,不降低验证要求。压缩正文与非 UTF-8/ASCII/Latin1 字符集也明确拒绝。

QEMU 独立测试配置需要 -netdev user,id=Net0 -device e1000e,netdev=Net0,内核 CosmosEnableNetwork=true,使用 DHCP 配置;3.0.94 的 DriverKit 初始化/调度模式也必须实际验证。已配置后把 new NativeWebTransport() 显式注入 BrowserService。

受控 host 端点:

python Tests/XFESystem.HttpProtocol.Tests/Fixtures/NativeHttpServer.py --Port 18080 --Nonce OneRunRandomValue --Log build/CSharp/HttpPeer/HttpServer.jsonl

服务仅监听 127.0.0.1,guest 经 QEMU NAT 访问 http://10.0.2.2:18080/Index。它只提供固定测试字节,不访问 guest 文件,不替 guest 请求网站。每次使用不同 nonce,guest 串口和截图出现该 nonce 才能关联本次响应。

端点:

路径 行为
/Index Content-Length、中文、nonce、真实 inline JS 修改 DOM 为 Native network JS: 42
/Chunked 多次字节分块、chunk extension 与 trailer
/Redirect 跳转 /Index
/Csp script-src 'none',自动脚本应被阻止
/Truncated 少于 Content-Length,应拒绝
/Oversized 过大的 Content-Length,应拒绝分配
/InvalidFraming 同时 TE 与 CL,应拒绝
/Drop 无响应关闭,应拒绝
/Slow 等待 30 秒后发正文,供整次 deadline 验证

测试脚本应创建自己的 headless QEMU 与服务进程,记录 PID 并在 finally 中清理,不能向用户正在操作的虚拟机输入。纯协议或宿主 socket 测试通过不代表原生网卡路径已验收,须以独立 QEMU 串口、peer 请求日志及画面证据确认。