@@ -1390,20 +1390,67 @@ fn get_hostfunc(
13901390 "proxy_grpc_call" => {
13911391 Some ( Func :: wrap (
13921392 store,
1393- |_caller : Caller < ' _ , ( ) > ,
1394- _service_ptr : i32 ,
1395- _service_size : i32 ,
1396- _service_name_ptr : i32 ,
1397- _service_name_size : i32 ,
1398- _method_name_ptr : i32 ,
1399- _method_name_size : i32 ,
1400- _initial_metadata_ptr : i32 ,
1401- _initial_metadata_size : i32 ,
1402- _request_ptr : i32 ,
1403- _request_size : i32 ,
1404- _timeout_milliseconds : i32 ,
1405- _token_ptr : i32 |
1393+ |mut caller : Caller < ' _ , ( ) > ,
1394+ service_ptr : i32 ,
1395+ service_size : i32 ,
1396+ service_name_ptr : i32 ,
1397+ service_name_size : i32 ,
1398+ method_name_ptr : i32 ,
1399+ method_name_size : i32 ,
1400+ initial_metadata_ptr : i32 ,
1401+ initial_metadata_size : i32 ,
1402+ request_ptr : i32 ,
1403+ request_size : i32 ,
1404+ timeout_milliseconds : i32 ,
1405+ token_ptr : i32 |
14061406 -> i32 {
1407+ print ! ( "[vm->host] proxy_grpc_call({initial_metadata_ptr}, {initial_metadata_size})" ) ;
1408+
1409+ // Default Function: receives and displays http call from proxy-wasm module
1410+ // Expectation: asserts equal the receieved http call with the expected one
1411+ let mem = match caller. get_export ( "memory" ) {
1412+ Some ( Extern :: Memory ( mem) ) => mem,
1413+ _ => {
1414+ println ! ( "Error: proxy_http_call cannot get export \" memory\" " ) ;
1415+ println ! (
1416+ "[vm<-host] proxy_http_call(...) -> (return_token) return: {:?}" ,
1417+ Status :: InternalFailure
1418+ ) ;
1419+ return Status :: InternalFailure as i32 ;
1420+ }
1421+ } ;
1422+
1423+ let service = read_string ( & caller, mem, service_ptr, service_size) ;
1424+ let service_name =
1425+ read_string ( & caller, mem, service_name_ptr, service_name_size) ;
1426+ let method_name = read_string ( & caller, mem, method_name_ptr, method_name_size) ;
1427+ let initial_metadata =
1428+ read_bytes ( & caller, mem, initial_metadata_ptr, initial_metadata_size)
1429+ . unwrap ( ) ;
1430+ let request = read_bytes ( & caller, mem, request_ptr, request_size) . unwrap ( ) ;
1431+
1432+ println ! (
1433+ "[vm->host] proxy_grpc_call(service={service}, service_name={service_name}, method_name={method_name}, initial_metadata={initial_metadata:?}, request={request:?}, timeout={timeout_milliseconds}" ) ;
1434+
1435+ let token_id = match EXPECT . lock ( ) . unwrap ( ) . staged . get_expect_grpc_call (
1436+ service,
1437+ service_name,
1438+ method_name,
1439+ initial_metadata,
1440+ request,
1441+ timeout_milliseconds,
1442+ ) {
1443+ Some ( expect_token) => expect_token,
1444+ None => 0 ,
1445+ } ;
1446+
1447+ unsafe {
1448+ let return_token_add = mem. data_mut ( & mut caller) . get_unchecked_mut (
1449+ token_ptr as u32 as usize ..token_ptr as u32 as usize + 4 ,
1450+ ) ;
1451+ return_token_add. copy_from_slice ( & token_id. to_le_bytes ( ) ) ;
1452+ }
1453+
14071454 // Default Function:
14081455 // Expectation:
14091456 println ! (
@@ -1412,9 +1459,10 @@ fn get_hostfunc(
14121459 ) ;
14131460 println ! (
14141461 "[vm<-host] proxy_grpc_call() -> (..) return: {:?}" ,
1415- Status :: InternalFailure
1462+ Status :: Ok
14161463 ) ;
1417- return Status :: InternalFailure as i32 ;
1464+ assert_ne ! ( get_status( ) , ExpectStatus :: Failed ) ;
1465+ return Status :: Ok as i32 ;
14181466 } ,
14191467 ) )
14201468 }
@@ -1641,6 +1689,18 @@ fn get_hostfunc(
16411689 }
16421690}
16431691
1692+ fn read_string ( caller : & Caller < ( ) > , mem : Memory , ptr : i32 , size : i32 ) -> String {
1693+ read_bytes ( caller, mem, ptr, size)
1694+ . map ( String :: from_utf8_lossy)
1695+ . unwrap ( )
1696+ . to_string ( )
1697+ }
1698+
1699+ fn read_bytes < ' a > ( caller : & ' a Caller < ( ) > , mem : Memory , ptr : i32 , size : i32 ) -> Option < & ' a [ u8 ] > {
1700+ mem. data ( caller)
1701+ . get ( ptr as usize ..ptr as usize + size as usize )
1702+ }
1703+
16441704pub mod serial_utils {
16451705
16461706 type Bytes = Vec < u8 > ;
0 commit comments