cwist
Modern C web framework with libttak runtime
Loading...
Searching...
No Matches
grpc.h
Go to the documentation of this file.
1
6#ifndef __CWIST_GRPC_H__
7#define __CWIST_GRPC_H__
8
12#include <stddef.h>
13#include <stdint.h>
14
15struct cwist_app;
16
17#ifdef __cplusplus
18extern "C" {
19#endif
20
40
41typedef struct cwist_grpc_message {
42 uint8_t compressed;
43 const uint8_t *data;
44 size_t len;
46
47typedef struct cwist_grpc_stream {
53 const char *status_message;
54 int closed;
55 int (*write_frame)(void *ctx, const uint8_t *frame, size_t frame_len, int end_stream);
57 /* Incremental streaming state (HTTP/2 transport path); NULL when the
58 * stream was dispatched from a fully buffered request body. */
59 void *session;
61 uint64_t deadline_ms; /* monotonic deadline from grpc-timeout; 0 = none */
62 size_t recv_pos; /* buffered-path recv cursor */
63 /* gRFC A6 server pushback: emitted as grpc-retry-pushback-ms in the
64 * trailers when retry_pushback_set is non-zero. */
68
70typedef struct cwist_grpc_decoder {
71 uint8_t header[5];
72 size_t header_len;
73 uint8_t *payload;
76 uint8_t compressed;
79
80typedef int (*cwist_grpc_message_callback)(void *ctx, const cwist_grpc_message *message);
81
83 const cwist_grpc_message *message, void *user_ctx);
84
85typedef void (*cwist_grpc_stream_handler_func)(cwist_grpc_stream *stream, void *user_ctx);
86
87int cwist_grpc_decode_message(const void *frame, size_t frame_len, cwist_grpc_message *out);
88
89int cwist_grpc_decode_next_message(const void *frames, size_t frames_len, size_t *offset,
91
92int cwist_grpc_encode_message(const void *payload, size_t payload_len, uint8_t compressed,
93 uint8_t **out, size_t *out_len);
94
96 const char *message, const void *payload, size_t payload_len);
97
99 const char *message);
100
101int cwist_grpc_stream_send(cwist_grpc_stream *stream, const void *payload, size_t payload_len);
102
104 const char *message);
105
114
117 int (*write_frame)(void *, const uint8_t *, size_t, int),
118 void *ctx);
119
129
132
135
141const char *cwist_grpc_metadata_get(cwist_http_request *req, const char *key);
142
148int cwist_grpc_metadata_get_binary(cwist_http_request *req, const char *key, uint8_t *out,
149 size_t out_cap, size_t *out_len);
150
153int cwist_grpc_parse_timeout(const char *value, uint64_t *out_ms);
154
155void cwist_grpc_decoder_init(cwist_grpc_decoder *decoder, size_t max_message_size);
158int cwist_grpc_decoder_feed(cwist_grpc_decoder *decoder, const void *data, size_t len,
159 cwist_grpc_message_callback callback, void *ctx);
160
162int cwist_app_grpc_health(struct cwist_app *app);
163int cwist_app_grpc_health_set_status(struct cwist_app *app, const char *service, int serving);
166
168int cwist_app_grpc_reflection(struct cwist_app *app);
169
170int cwist_app_grpc_unary(struct cwist_app *app, const char *service, const char *method,
171 cwist_grpc_unary_handler_func handler, void *user_ctx);
172
173int cwist_app_grpc_stream(struct cwist_app *app, const char *service, const char *method,
174 cwist_grpc_stream_handler_func handler, void *user_ctx);
175
182
183void cwist_grpc_routes_destroy(struct cwist_app *app);
184int cwist_grpc_routes_clone(struct cwist_app *dst, const struct cwist_app *src);
185
186#ifdef __cplusplus
187}
188#endif
189
190#endif
cwist_grpc_status
Definition grpc.h:21
@ CWIST_GRPC_DATA_LOSS
Definition grpc.h:37
@ CWIST_GRPC_FAILED_PRECONDITION
Definition grpc.h:31
@ CWIST_GRPC_OK
Definition grpc.h:22
@ CWIST_GRPC_CANCELLED
Definition grpc.h:23
@ CWIST_GRPC_RESOURCE_EXHAUSTED
Definition grpc.h:30
@ CWIST_GRPC_INVALID_ARGUMENT
Definition grpc.h:25
@ CWIST_GRPC_UNIMPLEMENTED
Definition grpc.h:34
@ CWIST_GRPC_UNAVAILABLE
Definition grpc.h:36
@ CWIST_GRPC_DEADLINE_EXCEEDED
Definition grpc.h:26
@ CWIST_GRPC_UNAUTHENTICATED
Definition grpc.h:38
@ CWIST_GRPC_ABORTED
Definition grpc.h:32
@ CWIST_GRPC_UNKNOWN
Definition grpc.h:24
@ CWIST_GRPC_PERMISSION_DENIED
Definition grpc.h:29
@ CWIST_GRPC_ALREADY_EXISTS
Definition grpc.h:28
@ CWIST_GRPC_OUT_OF_RANGE
Definition grpc.h:33
@ CWIST_GRPC_INTERNAL
Definition grpc.h:35
@ CWIST_GRPC_NOT_FOUND
Definition grpc.h:27
int cwist_app_grpc_health_watchers(struct cwist_app *app)
Count currently active Health/Watch streams.
Definition grpc.c:1212
int(* cwist_grpc_message_callback)(void *ctx, const cwist_grpc_message *message)
Definition grpc.h:80
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.
Definition grpc.c:784
int cwist_app_grpc_health(struct cwist_app *app)
Register the built-in grpc.health.v1.Health service on an app.
Definition grpc.c:1137
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.
Definition grpc.c:1371
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.
Definition grpc.c:734
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.
Definition grpc.c:385
int cwist_grpc_stream_recv(cwist_grpc_stream *stream, cwist_grpc_message *out)
Receive the next inbound message on a stream.
Definition grpc.c:1740
int cwist_grpc_parse_timeout(const char *value, uint64_t *out_ms)
Parse a gRPC timeout value into milliseconds.
Definition grpc.c:146
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.
Definition grpc.c:819
int cwist_grpc_stream_cancelled(cwist_grpc_stream *stream)
Check whether a stream has been cancelled.
Definition grpc.c:1814
const char * cwist_grpc_metadata_get(cwist_http_request *req, const char *key)
Fetch a metadata header value from a gRPC request.
Definition grpc.c:371
void cwist_grpc_decoder_init(cwist_grpc_decoder *decoder, size_t max_message_size)
Initialize an incremental gRPC message decoder.
Definition grpc.c:701
int cwist_grpc_stream_send(cwist_grpc_stream *stream, const void *payload, size_t payload_len)
Send one message on an open gRPC stream.
Definition grpc.c:836
void cwist_grpc_routes_destroy(struct cwist_app *app)
Free all gRPC routes and per-route resources on an app.
Definition grpc.c:1382
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.
Definition grpc.c:963
void cwist_grpc_decoder_destroy(cwist_grpc_decoder *decoder)
Release all resources held by a decoder and reset it to zero.
Definition grpc.c:713
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.
Definition grpc.c:916
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.
Definition grpc.c:677
uint64_t cwist_grpc_stream_deadline_remaining_ms(cwist_grpc_stream *stream)
Milliseconds remaining until the stream deadline.
Definition grpc.c:1834
int cwist_app_grpc_reflection(struct cwist_app *app)
Register the built-in gRPC server reflection service on an app.
Definition grpc.c:1281
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.
Definition grpc.c:933
void(* cwist_grpc_unary_handler_func)(cwist_http_request *req, cwist_http_response *res, const cwist_grpc_message *message, void *user_ctx)
Definition grpc.h:82
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.
Definition grpc.c:1173
int cwist_grpc_decode_message(const void *frame, size_t frame_len, cwist_grpc_message *out)
Decode a single gRPC length-prefixed message frame.
Definition grpc.c:622
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.
Definition grpc.c:649
void(* cwist_grpc_stream_handler_func)(cwist_grpc_stream *stream, void *user_ctx)
Definition grpc.h:85
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.
Definition grpc.c:1357
const cwist_http2_stream_hooks * cwist_grpc_http2_hooks(void)
Access the gRPC HTTP/2 stream hooks table.
Definition grpc.c:2109
HTTP/2 Protocol Definitions for CWIST.
HTTP Protocol Definitions and Helpers.
Small Protobuf wire-format reader/writer helpers.
Main Application Context.
Definition app.h:155
size_t header_len
Definition grpc.h:72
size_t max_message_size
Definition grpc.h:77
uint8_t * payload
Definition grpc.h:73
size_t payload_len
Definition grpc.h:74
uint8_t header[5]
Definition grpc.h:71
uint8_t compressed
Definition grpc.h:76
size_t payload_used
Definition grpc.h:75
const uint8_t * data
Definition grpc.h:43
uint8_t compressed
Definition grpc.h:42
cwist_http_response * res
Definition grpc.h:49
const char * status_message
Definition grpc.h:53
size_t message_count
Definition grpc.h:51
void * session
Definition grpc.h:59
cwist_http_request * req
Definition grpc.h:48
cwist_grpc_status_t status
Definition grpc.h:52
uint64_t deadline_ms
Definition grpc.h:61
int retry_pushback_set
Definition grpc.h:65
int32_t retry_pushback_ms
Definition grpc.h:66
void * write_frame_ctx
Definition grpc.h:56
int(* write_frame)(void *ctx, const uint8_t *frame, size_t frame_len, int end_stream)
Definition grpc.h:55
const cwist_grpc_message * messages
Definition grpc.h:50
size_t recv_pos
Definition grpc.h:62
HTTP Response Object. Supports standard string body or Zero-Copy pointer body.
Definition http.h:82