6#ifndef __CWIST_GRPC_H__
7#define __CWIST_GRPC_H__
55 int (*
write_frame)(
void *ctx,
const uint8_t *frame,
size_t frame_len,
int end_stream);
93 uint8_t **out,
size_t *out_len);
96 const char *message,
const void *payload,
size_t payload_len);
104 const char *message);
117 int (*write_frame)(
void *,
const uint8_t *,
size_t,
int),
149 size_t out_cap,
size_t *out_len);
@ CWIST_GRPC_FAILED_PRECONDITION
@ CWIST_GRPC_RESOURCE_EXHAUSTED
@ CWIST_GRPC_INVALID_ARGUMENT
@ CWIST_GRPC_UNIMPLEMENTED
@ CWIST_GRPC_DEADLINE_EXCEEDED
@ CWIST_GRPC_UNAUTHENTICATED
@ CWIST_GRPC_PERMISSION_DENIED
@ CWIST_GRPC_ALREADY_EXISTS
@ CWIST_GRPC_OUT_OF_RANGE
int cwist_app_grpc_health_watchers(struct cwist_app *app)
Count currently active Health/Watch streams.
int(* cwist_grpc_message_callback)(void *ctx, const cwist_grpc_message *message)
void cwist_grpc_set_response(cwist_http_response *res, cwist_grpc_status_t status, const char *message, const void *payload, size_t payload_len)
Build a complete buffered unary gRPC response.
int cwist_app_grpc_health(struct cwist_app *app)
Register the built-in grpc.health.v1.Health service on an app.
int cwist_grpc_routes_clone(struct cwist_app *dst, const struct cwist_app *src)
int cwist_app_grpc_stream(struct cwist_app *app, const char *service, const char *method, cwist_grpc_stream_handler_func handler, void *user_ctx)
Register a client-streaming gRPC method on an app.
int cwist_grpc_decoder_feed(cwist_grpc_decoder *decoder, const void *data, size_t len, cwist_grpc_message_callback callback, void *ctx)
Feed bytes into an incremental gRPC message decoder.
int cwist_grpc_metadata_get_binary(cwist_http_request *req, const char *key, uint8_t *out, size_t out_cap, size_t *out_len)
Decode a binary ("-bin" suffixed) metadata header from base64.
int cwist_grpc_stream_recv(cwist_grpc_stream *stream, cwist_grpc_message *out)
Receive the next inbound message on a stream.
int cwist_grpc_parse_timeout(const char *value, uint64_t *out_ms)
Parse a gRPC timeout value into milliseconds.
void cwist_grpc_set_error(cwist_http_response *res, cwist_grpc_status_t status, const char *message)
Build a buffered gRPC error response with an empty message.
int cwist_grpc_stream_cancelled(cwist_grpc_stream *stream)
Check whether a stream has been cancelled.
const char * cwist_grpc_metadata_get(cwist_http_request *req, const char *key)
Fetch a metadata header value from a gRPC request.
void cwist_grpc_decoder_init(cwist_grpc_decoder *decoder, size_t max_message_size)
Initialize an incremental gRPC message decoder.
int cwist_grpc_stream_send(cwist_grpc_stream *stream, const void *payload, size_t payload_len)
Send one message on an open gRPC stream.
void cwist_grpc_routes_destroy(struct cwist_app *app)
Free all gRPC routes and per-route resources on an app.
enum cwist_grpc_status cwist_grpc_status_t
void cwist_grpc_stream_set_retry_pushback(cwist_grpc_stream *stream, int32_t ms)
Advertise a server-side retry pushback hint to the client.
void cwist_grpc_decoder_destroy(cwist_grpc_decoder *decoder)
Release all resources held by a decoder and reset it to zero.
void cwist_grpc_stream_set_writer(cwist_grpc_stream *stream, int(*write_frame)(void *, const uint8_t *, size_t, int), void *ctx)
Install a custom frame writer on a stream.
int cwist_grpc_encode_message(const void *payload, size_t payload_len, uint8_t compressed, uint8_t **out, size_t *out_len)
Wrap a payload in a gRPC length-prefixed message frame.
uint64_t cwist_grpc_stream_deadline_remaining_ms(cwist_grpc_stream *stream)
Milliseconds remaining until the stream deadline.
int cwist_app_grpc_reflection(struct cwist_app *app)
Register the built-in gRPC server reflection service on an app.
void cwist_grpc_stream_close(cwist_grpc_stream *stream, cwist_grpc_status_t status, const char *message)
Close a gRPC stream with a final status.
void(* cwist_grpc_unary_handler_func)(cwist_http_request *req, cwist_http_response *res, const cwist_grpc_message *message, void *user_ctx)
int cwist_app_grpc_health_set_status(struct cwist_app *app, const char *service, int serving)
Set or update the serving status of a named service.
int cwist_grpc_decode_message(const void *frame, size_t frame_len, cwist_grpc_message *out)
Decode a single gRPC length-prefixed message frame.
int cwist_grpc_decode_next_message(const void *frames, size_t frames_len, size_t *offset, cwist_grpc_message *out)
Decode the next message in a concatenated gRPC frame buffer.
void(* cwist_grpc_stream_handler_func)(cwist_grpc_stream *stream, void *user_ctx)
int cwist_app_grpc_unary(struct cwist_app *app, const char *service, const char *method, cwist_grpc_unary_handler_func handler, void *user_ctx)
Register a unary gRPC method on an app.
const cwist_http2_stream_hooks * cwist_grpc_http2_hooks(void)
Access the gRPC HTTP/2 stream hooks table.
HTTP/2 Protocol Definitions for CWIST.
HTTP Protocol Definitions and Helpers.
Small Protobuf wire-format reader/writer helpers.
Main Application Context.
cwist_http_response * res
const char * status_message
cwist_grpc_status_t status
int32_t retry_pushback_ms
int(* write_frame)(void *ctx, const uint8_t *frame, size_t frame_len, int end_stream)
const cwist_grpc_message * messages
HTTP Response Object. Supports standard string body or Zero-Copy pointer body.