@@ -224,7 +224,7 @@ class GrpcStreamHandlerBase {
224
224
225
225
// NB: with end_of_stream == true, callbacks can still occur: reset() to
226
226
// prevent further callbacks.
227
- void send (StringView message, bool end_of_stream);
227
+ WasmResult send (StringView message, bool end_of_stream);
228
228
void close (); // NB: callbacks can still occur: reset() to prevent further
229
229
// callbacks.
230
230
void reset ();
@@ -251,13 +251,14 @@ class GrpcStreamHandler : public GrpcStreamHandlerBase {
251
251
GrpcStreamHandler () : GrpcStreamHandlerBase() {}
252
252
virtual ~GrpcStreamHandler () {}
253
253
254
- void send (const Request &message, bool end_of_stream) {
254
+ WasmResult send (const Request &message, bool end_of_stream) {
255
255
std::string output;
256
256
if (!message.SerializeToString (&output)) {
257
- return ;
257
+ return WasmResult::SerializationFailure ;
258
258
}
259
259
GrpcStreamHandlerBase::send (output, end_of_stream);
260
260
local_close_ = local_close_ || end_of_stream;
261
+ return WasmResult::Ok;
261
262
}
262
263
263
264
virtual void onReceive (size_t body_size) = 0;
@@ -335,14 +336,11 @@ class RootContext : public ContextBase {
335
336
uint32_t timeout_milliseconds, HttpCallCallback callback);
336
337
// NB: the message is the response if status == OK and an error message
337
338
// otherwise. Returns false on setup error.
338
- #ifdef PROXY_WASM_PROTOBUF
339
339
WasmResult grpcSimpleCall (StringView service, StringView service_name, StringView method_name,
340
- const HeaderStringPairs &initial_metadata,
341
- const google::protobuf::MessageLite &request,
340
+ const HeaderStringPairs &initial_metadata, StringView request,
342
341
uint32_t timeout_milliseconds, GrpcSimpleCallCallback callback);
343
342
WasmResult grpcSimpleCall (StringView service, StringView service_name, StringView method_name,
344
- const HeaderStringPairs &initial_metadata,
345
- const google::protobuf::MessageLite &request,
343
+ const HeaderStringPairs &initial_metadata, StringView request,
346
344
uint32_t timeout_milliseconds,
347
345
std::function<void (size_t body_size)> success_callback,
348
346
std::function<void(GrpcStatus status)> failure_callback) {
@@ -356,12 +354,48 @@ class RootContext : public ContextBase {
356
354
return grpcSimpleCall (service, service_name, method_name, initial_metadata, request,
357
355
timeout_milliseconds, callback);
358
356
}
357
+ WasmResult grpcCallHandler (StringView service, StringView service_name, StringView method_name,
358
+ const HeaderStringPairs &initial_metadata, StringView request,
359
+ uint32_t timeout_milliseconds,
360
+ std::unique_ptr<GrpcCallHandlerBase> handler);
361
+ #ifdef PROXY_WASM_PROTOBUF
362
+ WasmResult grpcSimpleCall (StringView service, StringView service_name, StringView method_name,
363
+ const HeaderStringPairs &initial_metadata,
364
+ const google::protobuf::MessageLite &request,
365
+ uint32_t timeout_milliseconds, GrpcSimpleCallCallback callback) {
366
+ std::string serialized_request;
367
+ if (!request.SerializeToString (&serialized_request)) {
368
+ return WasmResult::SerializationFailure;
369
+ }
370
+ return grpcSimpleCall (service, service_name, method_name, initial_metadata, serialized_request,
371
+ timeout_milliseconds, callback);
372
+ }
373
+ WasmResult grpcSimpleCall (StringView service, StringView service_name, StringView method_name,
374
+ const HeaderStringPairs &initial_metadata,
375
+ const google::protobuf::MessageLite &request,
376
+ uint32_t timeout_milliseconds,
377
+ std::function<void (size_t body_size)> success_callback,
378
+ std::function<void(GrpcStatus status)> failure_callback) {
379
+ std::string serialized_request;
380
+ if (!request.SerializeToString (&serialized_request)) {
381
+ return WasmResult::SerializationFailure;
382
+ }
383
+ return grpcSimpleCall (service, service_name, method_name, initial_metadata, serialized_request,
384
+ timeout_milliseconds, success_callback, failure_callback);
385
+ }
359
386
// Returns false on setup error.
360
387
WasmResult grpcCallHandler (StringView service, StringView service_name, StringView method_name,
361
388
const HeaderStringPairs &initial_metadata,
362
389
const google::protobuf::MessageLite &request,
363
390
uint32_t timeout_milliseconds,
364
- std::unique_ptr<GrpcCallHandlerBase> handler);
391
+ std::unique_ptr<GrpcCallHandlerBase> handler) {
392
+ std::string serialized_request;
393
+ if (!request.SerializeToString (&serialized_request)) {
394
+ return WasmResult::SerializationFailure;
395
+ }
396
+ return grpcCallHandler (service, service_name, method_name, initial_metadata, serialized_request,
397
+ timeout_milliseconds, std::move (handler));
398
+ }
365
399
#endif
366
400
// Returns false on setup error.
367
401
WasmResult grpcStreamHandler (StringView service, StringView service_name, StringView method_name,
@@ -1185,20 +1219,28 @@ inline Histogram<Tags...> *Histogram<Tags...>::New(StringView name,
1185
1219
std::vector<MetricTag>({toMetricTag (descriptors)...}));
1186
1220
}
1187
1221
1188
- #ifdef PROXY_WASM_PROTOBUF
1189
1222
inline WasmResult grpcCall (StringView service, StringView service_name, StringView method_name,
1190
- const HeaderStringPairs &initial_metadata,
1191
- const google::protobuf::MessageLite &request,
1223
+ const HeaderStringPairs &initial_metadata, StringView request,
1192
1224
uint32_t timeout_milliseconds, uint32_t *token_ptr) {
1193
1225
void *metadata_ptr = nullptr ;
1194
1226
size_t metadata_size = 0 ;
1195
1227
MakeHeaderStringPairsBuffer (initial_metadata, &metadata_ptr, &metadata_size);
1196
- std::string serialized_request;
1197
- request.SerializeToString (&serialized_request);
1198
1228
return proxy_grpc_call (service.data (), service.size (), service_name.data (), service_name.size (),
1199
1229
method_name.data (), method_name.size (), metadata_ptr, metadata_size,
1200
- serialized_request.data (), serialized_request.size (), timeout_milliseconds,
1201
- token_ptr);
1230
+ request.data (), request.size (), timeout_milliseconds, token_ptr);
1231
+ }
1232
+
1233
+ #ifdef PROXY_WASM_PROTOBUF
1234
+ inline WasmResult grpcCall (StringView service, StringView service_name, StringView method_name,
1235
+ const HeaderStringPairs &initial_metadata,
1236
+ const google::protobuf::MessageLite &request,
1237
+ uint32_t timeout_milliseconds, uint32_t *token_ptr) {
1238
+ std::string serialized_request;
1239
+ if (!request.SerializeToString (&serialized_request)) {
1240
+ return WasmResult::SerializationFailure;
1241
+ }
1242
+ return grpcCall (service, service_name, method_name, initial_metadata, serialized_request,
1243
+ timeout_milliseconds, token_ptr);
1202
1244
}
1203
1245
#endif
1204
1246
@@ -1242,12 +1284,10 @@ inline void RootContext::onHttpCallResponse(uint32_t token, uint32_t headers, si
1242
1284
}
1243
1285
}
1244
1286
1245
- #ifdef PROXY_WASM_PROTOBUF
1246
1287
inline WasmResult RootContext::grpcSimpleCall (StringView service, StringView service_name,
1247
1288
StringView method_name,
1248
1289
const HeaderStringPairs &initial_metadata,
1249
- const google::protobuf::MessageLite &request,
1250
- uint32_t timeout_milliseconds,
1290
+ StringView request, uint32_t timeout_milliseconds,
1251
1291
Context::GrpcSimpleCallCallback callback) {
1252
1292
uint32_t token = 0 ;
1253
1293
WasmResult result = grpcCall (service, service_name, method_name, initial_metadata, request,
@@ -1257,7 +1297,6 @@ inline WasmResult RootContext::grpcSimpleCall(StringView service, StringView ser
1257
1297
}
1258
1298
return result;
1259
1299
}
1260
- #endif
1261
1300
1262
1301
inline void GrpcCallHandlerBase::cancel () {
1263
1302
grpcCancel (token_);
@@ -1278,15 +1317,19 @@ inline void GrpcStreamHandlerBase::close() {
1278
1317
// NB: else callbacks can still occur: reset() to prevent further callbacks.
1279
1318
}
1280
1319
1281
- inline void GrpcStreamHandlerBase::send (StringView message, bool end_of_stream) {
1282
- grpcSend (token_, message, end_of_stream);
1320
+ inline WasmResult GrpcStreamHandlerBase::send (StringView message, bool end_of_stream) {
1321
+ WasmResult r = grpcSend (token_, message, end_of_stream);
1322
+ if (r != WasmResult::Ok) {
1323
+ return r;
1324
+ }
1283
1325
if (end_of_stream) {
1284
1326
// NB: callbacks can still occur: reset() to prevent further callbacks.
1285
1327
local_close_ = local_close_ || end_of_stream;
1286
1328
if (local_close_ && remote_close_) {
1287
1329
context_->grpc_streams_ .erase (token_);
1288
1330
}
1289
1331
}
1332
+ return WasmResult::Ok;
1290
1333
}
1291
1334
1292
1335
inline void RootContext::onGrpcReceiveInitialMetadata (uint32_t token, uint32_t headers) {
@@ -1377,12 +1420,10 @@ inline void RootContext::onGrpcClose(uint32_t token, GrpcStatus status) {
1377
1420
}
1378
1421
}
1379
1422
1380
- #ifdef PROXY_WASM_PROTOBUF
1381
1423
inline WasmResult RootContext::grpcCallHandler (StringView service, StringView service_name,
1382
1424
StringView method_name,
1383
1425
const HeaderStringPairs &initial_metadata,
1384
- const google::protobuf::MessageLite &request,
1385
- uint32_t timeout_milliseconds,
1426
+ StringView request, uint32_t timeout_milliseconds,
1386
1427
std::unique_ptr<GrpcCallHandlerBase> handler) {
1387
1428
uint32_t token = 0 ;
1388
1429
auto result = grpcCall (service, service_name, method_name, initial_metadata, request,
@@ -1394,7 +1435,6 @@ inline WasmResult RootContext::grpcCallHandler(StringView service, StringView se
1394
1435
}
1395
1436
return result;
1396
1437
}
1397
- #endif
1398
1438
1399
1439
inline WasmResult RootContext::grpcStreamHandler (StringView service, StringView service_name,
1400
1440
StringView method_name,
0 commit comments