@@ -1107,10 +1107,24 @@ int proxyContinueStream(int arg) {
11071107 return result .getValue ();
11081108 }
11091109
1110- // TODO: implement
1111- // https://github.com/proxy-wasm/spec/tree/main/abi-versions/v0.2.1#proxy_close_stream
1112- // TODO: implement
1113- // https://github.com/proxy-wasm/spec/tree/main/abi-versions/v0.2.1#proxy_get_status
1110+ /**
1111+ * implements: https://github.com/proxy-wasm/spec/tree/main/abi-versions/v0.2.1#proxy_close_stream
1112+ */
1113+ @ WasmExport
1114+ int proxyCloseStream (int proxyStreamType ) {
1115+ // TODO: implement
1116+ return WasmResult .UNIMPLEMENTED .getValue ();
1117+ }
1118+
1119+ /**
1120+ * implements: https://github.com/proxy-wasm/spec/tree/main/abi-versions/v0.2.1#proxy_get_status
1121+ */
1122+ @ WasmExport
1123+ int proxyGetStatus (
1124+ int returnStatusCode , int returnStatusMessageData , int returnStatusMessageSize ) {
1125+ // TODO: implement
1126+ return WasmResult .UNIMPLEMENTED .getValue ();
1127+ }
11141128
11151129 // //////////////////////////////////////////////////////////////////////
11161130 // TCP streams
@@ -1421,16 +1435,109 @@ void proxyOnHttpCallResponse(int arg0, int arg1, int arg2, int arg3, int arg4) {
14211435 // gRPC calls
14221436 // //////////////////////////////////////////////////////////////////////
14231437
1424- // TODO: implement
1425- // https://github.com/proxy-wasm/spec/tree/main/abi-versions/vNEXT#proxy_grpc_call
1426- // TODO: implement
1427- // https://github.com/proxy-wasm/spec/tree/main/abi-versions/vNEXT#proxy_grpc_stream
1428- // TODO: implement
1429- // https://github.com/proxy-wasm/spec/tree/main/abi-versions/vNEXT#proxy_grpc_send
1430- // TODO: implement
1431- // https://github.com/proxy-wasm/spec/tree/main/abi-versions/vNEXT#proxy_grpc_cancel
1432- // TODO: implement
1433- // https://github.com/proxy-wasm/spec/tree/main/abi-versions/vNEXT#proxy_grpc_close
1438+ /**
1439+ * implements https://github.com/proxy-wasm/spec/tree/main/abi-versions/vNEXT#proxy_grpc_call
1440+ */
1441+ @ WasmExport
1442+ int proxyGrpcCall (
1443+ int upstreamNameData ,
1444+ int upstreamNameSize ,
1445+ int serviceNameData ,
1446+ int serviceNameSize ,
1447+ int methodNameData ,
1448+ int methodNameSize ,
1449+ int serialized_initial_metadataData ,
1450+ int serialized_initial_metadataSize ,
1451+ int messageData ,
1452+ int messageSize ,
1453+ int timeout ,
1454+ int returnCalloutID ) {
1455+
1456+ try {
1457+ var upstreamName = string (readMemory (upstreamNameData , upstreamNameSize ));
1458+ var serviceName = string (readMemory (serviceNameData , serviceNameSize ));
1459+ var methodName = string (readMemory (methodNameData , methodNameSize ));
1460+ var initialMetadata =
1461+ decodeMap (serialized_initial_metadataData , serialized_initial_metadataSize );
1462+ var message = readMemory (messageData , messageSize );
1463+
1464+ int callId =
1465+ handler .grpcCall (
1466+ upstreamName ,
1467+ serviceName ,
1468+ methodName ,
1469+ initialMetadata ,
1470+ message ,
1471+ timeout );
1472+ putUint32 (returnCalloutID , callId );
1473+ return callId ;
1474+ } catch (WasmException e ) {
1475+ return e .result ().getValue ();
1476+ }
1477+ }
1478+
1479+ /**
1480+ * implements https://github.com/proxy-wasm/spec/tree/main/abi-versions/vNEXT#proxy_grpc_stream
1481+ */
1482+ @ WasmExport
1483+ int proxyGrpcStream (
1484+ int upstreamNameData ,
1485+ int upstreamNameSize ,
1486+ int serviceNameData ,
1487+ int serviceNameSize ,
1488+ int methodNameData ,
1489+ int methodNameSize ,
1490+ int serialized_initial_metadataData ,
1491+ int serialized_initial_metadataSize ,
1492+ int returnStreamId ) {
1493+
1494+ try {
1495+ var upstreamName = string (readMemory (upstreamNameData , upstreamNameSize ));
1496+ var serviceName = string (readMemory (serviceNameData , serviceNameSize ));
1497+ var methodName = string (readMemory (methodNameData , methodNameSize ));
1498+ var initialMetadata =
1499+ decodeMap (serialized_initial_metadataData , serialized_initial_metadataSize );
1500+
1501+ int streamId =
1502+ handler .grpcStream (upstreamName , serviceName , methodName , initialMetadata );
1503+ putUint32 (returnStreamId , streamId );
1504+ return streamId ;
1505+ } catch (WasmException e ) {
1506+ return e .result ().getValue ();
1507+ }
1508+ }
1509+
1510+ /**
1511+ * https://github.com/proxy-wasm/spec/tree/main/abi-versions/vNEXT#proxy_grpc_send
1512+ */
1513+ @ WasmExport
1514+ int proxyGrpcSend (int streamId , int messageData , int messageSize , int endStream ) {
1515+ try {
1516+ byte [] message = readMemory (messageData , messageSize );
1517+ WasmResult result = handler .grpcSend (streamId , message , endStream );
1518+ return result .getValue ();
1519+ } catch (WasmException e ) {
1520+ return e .result ().getValue ();
1521+ }
1522+ }
1523+
1524+ /**
1525+ * https://github.com/proxy-wasm/spec/tree/main/abi-versions/vNEXT#proxy_grpc_cancel
1526+ */
1527+ @ WasmExport
1528+ int proxyGrpcCancel (int callOrstreamId ) {
1529+ WasmResult result = handler .grpcCancel (callOrstreamId );
1530+ return result .getValue ();
1531+ }
1532+
1533+ /**
1534+ * https://github.com/proxy-wasm/spec/tree/main/abi-versions/vNEXT#proxy_grpc_close
1535+ */
1536+ @ WasmExport
1537+ int proxyGrpcClose (int callOrstreamId ) {
1538+ WasmResult result = handler .grpcClose (callOrstreamId );
1539+ return result .getValue ();
1540+ }
14341541
14351542 /**
14361543 * implements https://github.com/proxy-wasm/spec/tree/main/abi-versions/vNEXT#proxy_on_grpc_receive_initial_metadata
@@ -1720,8 +1827,26 @@ int proxyGetProperty(int keyPtr, int keySize, int returnValueData, int returnVal
17201827 }
17211828 }
17221829
1723- // TODO: implement
1724- // https://github.com/proxy-wasm/spec/tree/main/abi-versions/vNEXT#proxy_set_property
1830+ /**
1831+ * https://github.com/proxy-wasm/spec/tree/main/abi-versions/vNEXT#proxy_set_property
1832+ */
1833+ @ WasmExport
1834+ int proxySetProperty (int pathDataPtr , int pathSize , int valueDataPtr , int valueSize ) {
1835+ try {
1836+ // Get key from memory
1837+ String path = string (readMemory (pathDataPtr , pathSize ));
1838+
1839+ // Get value from memory
1840+ String value = string (readMemory (valueDataPtr , valueSize ));
1841+
1842+ // Set property value using handler
1843+ WasmResult result = handler .setProperty (path , value );
1844+ return result .getValue ();
1845+
1846+ } catch (WasmException e ) {
1847+ return e .result ().getValue ();
1848+ }
1849+ }
17251850
17261851 // //////////////////////////////////////////////////////////////////////
17271852 // Foreign function interface (FFI)
0 commit comments