@@ -17,6 +17,34 @@ use wasmtime_wasi_http::{bindings::Proxy, body::HyperIncomingBody as Body, WasiH
1717
1818use crate :: { headers:: prepare_request_headers, server:: HttpExecutor , TriggerInstanceBuilder } ;
1919
20+ pub ( super ) fn prepare_request (
21+ route_match : & RouteMatch < ' _ , ' _ > ,
22+ req : & mut Request < Body > ,
23+ client_addr : SocketAddr ,
24+ ) -> Result < ( ) > {
25+ let spin_http:: routes:: TriggerLookupKey :: Component ( component_id) = route_match. lookup_key ( )
26+ else {
27+ unreachable ! ( )
28+ } ;
29+
30+ tracing:: trace!( "Executing request using the Wasi executor for component {component_id}" ) ;
31+
32+ let headers = prepare_request_headers ( req, route_match, client_addr) ?;
33+ req. headers_mut ( ) . clear ( ) ;
34+ req. headers_mut ( )
35+ . extend ( headers. into_iter ( ) . filter_map ( |( n, v) | {
36+ let Ok ( name) = n. parse :: < HeaderName > ( ) else {
37+ return None ;
38+ } ;
39+ let Ok ( value) = HeaderValue :: from_bytes ( v. as_bytes ( ) ) else {
40+ return None ;
41+ } ;
42+ Some ( ( name, value) )
43+ } ) ) ;
44+
45+ Ok ( ( ) )
46+ }
47+
2048/// An [`HttpExecutor`] that uses the `wasi:http/incoming-handler` interface.
2149pub struct WasiHttpExecutor < ' a > {
2250 pub handler_type : & ' a HandlerType ,
@@ -31,28 +59,10 @@ impl HttpExecutor for WasiHttpExecutor<'_> {
3159 mut req : Request < Body > ,
3260 client_addr : SocketAddr ,
3361 ) -> Result < Response < Body > > {
34- let spin_http:: routes:: TriggerLookupKey :: Component ( component_id) = route_match. lookup_key ( )
35- else {
36- anyhow:: bail!( "INCONCEIVABLE" ) ;
37- } ;
38-
39- tracing:: trace!( "Executing request using the Wasi executor for component {component_id}" ) ;
62+ prepare_request ( route_match, & mut req, client_addr) ?;
4063
4164 let ( instance, mut store) = instance_builder. instantiate ( ( ) ) . await ?;
4265
43- let headers = prepare_request_headers ( & req, route_match, client_addr) ?;
44- req. headers_mut ( ) . clear ( ) ;
45- req. headers_mut ( )
46- . extend ( headers. into_iter ( ) . filter_map ( |( n, v) | {
47- let Ok ( name) = n. parse :: < HeaderName > ( ) else {
48- return None ;
49- } ;
50- let Ok ( value) = HeaderValue :: from_bytes ( v. as_bytes ( ) ) else {
51- return None ;
52- } ;
53- Some ( ( name, value) )
54- } ) ) ;
55-
5666 let mut wasi_http = spin_factor_outbound_http:: OutboundHttpFactor :: get_wasi_http_impl (
5767 store. data_mut ( ) . factors_instance_state_mut ( ) ,
5868 )
0 commit comments