Begin implementation of wasi-http (#5929)
* 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>
This commit is contained in:
@@ -16,7 +16,12 @@ use wasmtime_cli_flags::{CommonOptions, WasiModules};
|
||||
use wasmtime_wasi::maybe_exit_on_error;
|
||||
use wasmtime_wasi::sync::{ambient_authority, Dir, TcpListener, WasiCtxBuilder};
|
||||
|
||||
#[cfg(any(feature = "wasi-crypto", feature = "wasi-nn", feature = "wasi-threads"))]
|
||||
#[cfg(any(
|
||||
feature = "wasi-crypto",
|
||||
feature = "wasi-nn",
|
||||
feature = "wasi-threads",
|
||||
feature = "wasi-http"
|
||||
))]
|
||||
use std::sync::Arc;
|
||||
|
||||
#[cfg(feature = "wasi-nn")]
|
||||
@@ -28,6 +33,9 @@ use wasmtime_wasi_crypto::WasiCryptoCtx;
|
||||
#[cfg(feature = "wasi-threads")]
|
||||
use wasmtime_wasi_threads::WasiThreadsCtx;
|
||||
|
||||
#[cfg(feature = "wasi-http")]
|
||||
use wasmtime_wasi_http::WasiHttp;
|
||||
|
||||
fn parse_module(s: &OsStr) -> anyhow::Result<PathBuf> {
|
||||
// Do not accept wasmtime subcommand names as the module name
|
||||
match s.to_str() {
|
||||
@@ -525,6 +533,8 @@ struct Host {
|
||||
wasi_nn: Option<Arc<WasiNnCtx>>,
|
||||
#[cfg(feature = "wasi-threads")]
|
||||
wasi_threads: Option<Arc<WasiThreadsCtx<Host>>>,
|
||||
#[cfg(feature = "wasi-http")]
|
||||
wasi_http: Option<WasiHttp>,
|
||||
limits: StoreLimits,
|
||||
}
|
||||
|
||||
@@ -625,6 +635,21 @@ fn populate_with_wasi(
|
||||
}
|
||||
}
|
||||
|
||||
if wasi_modules.wasi_http {
|
||||
#[cfg(not(feature = "wasi-http"))]
|
||||
{
|
||||
bail!("Cannot enable wasi-http when the binary is not compiled with this feature.");
|
||||
}
|
||||
#[cfg(feature = "wasi-http")]
|
||||
{
|
||||
let w_http = WasiHttp::new();
|
||||
wasmtime_wasi_http::add_to_linker(linker, |host: &mut Host| {
|
||||
host.wasi_http.as_mut().unwrap()
|
||||
})?;
|
||||
store.data_mut().wasi_http = Some(w_http);
|
||||
}
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user