* Integrate experimental HTTP into wasmtime. * Reset Cargo.lock * Switch to bail!, plumb options partially. * Implement timeouts. * Remove generated files & wasm, add Makefile * Remove generated code textfile * Update crates/wasi-http/Cargo.toml Co-authored-by: Eduardo de Moura Rodrigues <16357187+eduardomourar@users.noreply.github.com> * Update crates/wasi-http/Cargo.toml Co-authored-by: Eduardo de Moura Rodrigues <16357187+eduardomourar@users.noreply.github.com> * Extract streams from request/response. * Fix read for len < buffer length. * Formatting. * types impl: swap todos for traps * streams_impl: idioms, and swap todos for traps * component impl: idioms, swap all unwraps for traps, swap all todos for traps * http impl: idiom * Remove an unnecessary mut. * Remove an unsupported function. * Switch to the tokio runtime for the HTTP request. * Add a rust example. * Update to latest wit definition * Remove example code. * wip: start writing a http test... * finish writing the outbound request example havent executed it yet * better debug output * wasi-http: some stubs required for rust rewrite of the example * add wasi_http tests to test-programs * CI: run the http tests * Fix some warnings. * bump new deps to latest releases (#3) * Add tests for wasi-http to test-programs (#2) * wip: start writing a http test... * finish writing the outbound request example havent executed it yet * better debug output * wasi-http: some stubs required for rust rewrite of the example * add wasi_http tests to test-programs * CI: run the http tests * bump new deps to latest releases h2 0.3.16 http 0.2.9 mio 0.8.6 openssl 0.10.48 openssl-sys 0.9.83 tokio 1.26.0 --------- Co-authored-by: Brendan Burns <bburns@microsoft.com> * Update crates/test-programs/tests/http_tests/runtime/wasi_http_tests.rs * Update crates/test-programs/tests/http_tests/runtime/wasi_http_tests.rs * Update crates/test-programs/tests/http_tests/runtime/wasi_http_tests.rs * wasi-http: fix cargo.toml file and publish script to work together (#4) unfortunately, the publish script doesn't use a proper toml parser (in order to not have any dependencies), so the whitespace has to be the trivial expected case. then, add wasi-http to the list of crates to publish. * Update crates/test-programs/build.rs * Switch to rustls * Cleanups. * Merge switch to rustls. * Formatting * Remove libssl install * Fix tests. * Rename wasi-http -> wasmtime-wasi-http * prtest:full Conditionalize TLS on riscv64gc. * prtest:full Fix formatting, also disable tls on s390x * prtest:full Add a path parameter to wit-bindgen, remove symlink. * prtest:full Fix tests for places where SSL isn't supported. * Update crates/wasi-http/Cargo.toml --------- Co-authored-by: Eduardo de Moura Rodrigues <16357187+eduardomourar@users.noreply.github.com> Co-authored-by: Pat Hickey <phickey@fastly.com> Co-authored-by: Pat Hickey <pat@moreproductive.org>
81 lines
1.9 KiB
Rust
81 lines
1.9 KiB
Rust
use crate::types::{Method, Scheme};
|
|
use bytes::Bytes;
|
|
use std::collections::HashMap;
|
|
|
|
#[derive(Clone)]
|
|
pub struct WasiHttp {
|
|
pub request_id_base: u32,
|
|
pub response_id_base: u32,
|
|
pub fields_id_base: u32,
|
|
pub streams_id_base: u32,
|
|
pub requests: HashMap<u32, ActiveRequest>,
|
|
pub responses: HashMap<u32, ActiveResponse>,
|
|
pub fields: HashMap<u32, HashMap<String, Vec<String>>>,
|
|
pub streams: HashMap<u32, Bytes>,
|
|
}
|
|
|
|
#[derive(Clone)]
|
|
pub struct ActiveRequest {
|
|
pub id: u32,
|
|
pub active_request: bool,
|
|
pub method: Method,
|
|
pub scheme: Option<Scheme>,
|
|
pub path: String,
|
|
pub query: String,
|
|
pub authority: String,
|
|
pub headers: HashMap<String, Vec<String>>,
|
|
pub body: u32,
|
|
}
|
|
|
|
#[derive(Clone)]
|
|
pub struct ActiveResponse {
|
|
pub id: u32,
|
|
pub active_response: bool,
|
|
pub status: u16,
|
|
pub body: u32,
|
|
pub response_headers: HashMap<String, Vec<String>>,
|
|
}
|
|
|
|
impl ActiveRequest {
|
|
pub fn new(id: u32) -> Self {
|
|
Self {
|
|
id: id,
|
|
active_request: false,
|
|
method: Method::Get,
|
|
scheme: Some(Scheme::Http),
|
|
path: "".to_string(),
|
|
query: "".to_string(),
|
|
authority: "".to_string(),
|
|
headers: HashMap::new(),
|
|
body: 0,
|
|
}
|
|
}
|
|
}
|
|
|
|
impl ActiveResponse {
|
|
pub fn new(id: u32) -> Self {
|
|
Self {
|
|
id: id,
|
|
active_response: false,
|
|
status: 0,
|
|
body: 0,
|
|
response_headers: HashMap::new(),
|
|
}
|
|
}
|
|
}
|
|
|
|
impl WasiHttp {
|
|
pub fn new() -> Self {
|
|
Self {
|
|
request_id_base: 1,
|
|
response_id_base: 1,
|
|
fields_id_base: 1,
|
|
streams_id_base: 1,
|
|
requests: HashMap::new(),
|
|
responses: HashMap::new(),
|
|
fields: HashMap::new(),
|
|
streams: HashMap::new(),
|
|
}
|
|
}
|
|
}
|