blob: 407f36ad82e200f43dc1251235d88ce6d7cf5d79 [file] [log] [blame]
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -08001/*
2 *
Craig Tiller06059952015-02-18 08:34:56 -08003 * Copyright 2015, Google Inc.
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -08004 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are
8 * met:
9 *
10 * * Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * * Redistributions in binary form must reproduce the above
13 * copyright notice, this list of conditions and the following disclaimer
14 * in the documentation and/or other materials provided with the
15 * distribution.
16 * * Neither the name of Google Inc. nor the names of its
17 * contributors may be used to endorse or promote products derived from
18 * this software without specific prior written permission.
19 *
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 *
32 */
33
Nicolas "Pixel" Noble1ff52d52015-03-01 05:24:36 +010034#ifndef GRPC_GRPC_H
35#define GRPC_GRPC_H
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -080036
37#include <grpc/status.h>
38
39#include <stddef.h>
David Garcia Quintas25d02d52015-06-04 17:40:54 -070040#include <grpc/byte_buffer.h>
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -080041#include <grpc/support/slice.h>
42#include <grpc/support/time.h>
43
44#ifdef __cplusplus
45extern "C" {
46#endif
47
Craig Tiller2d984bf2015-07-20 15:01:38 -070048/*! \mainpage GRPC Core
49 *
50 * \section intro_sec The GRPC Core library is a low-level library designed
51 * to be wrapped by higher level libraries.
52 *
Alistair Veitchff32faf2015-07-30 09:54:15 -070053 * The top-level API is provided in grpc.h.
Craig Tiller2d984bf2015-07-20 15:01:38 -070054 * Security related functionality lives in grpc_security.h.
55 */
56
57/** Completion Queues enable notification of the completion of asynchronous
58 actions. */
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -080059typedef struct grpc_completion_queue grpc_completion_queue;
60
Craig Tiller2d984bf2015-07-20 15:01:38 -070061/** The Channel interface allows creation of Call objects. */
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -080062typedef struct grpc_channel grpc_channel;
63
Craig Tiller2d984bf2015-07-20 15:01:38 -070064/** A server listens to some port and responds to request calls */
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -080065typedef struct grpc_server grpc_server;
66
Craig Tiller2d984bf2015-07-20 15:01:38 -070067/** A Call represents an RPC. When created, it is in a configuration state
68 allowing properties to be set until it is invoked. After invoke, the Call
69 can have messages written to it and read from it. */
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -080070typedef struct grpc_call grpc_call;
71
Craig Tiller2d984bf2015-07-20 15:01:38 -070072/** Type specifier for grpc_arg */
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -080073typedef enum {
74 GRPC_ARG_STRING,
75 GRPC_ARG_INTEGER,
76 GRPC_ARG_POINTER
77} grpc_arg_type;
78
Craig Tiller2d984bf2015-07-20 15:01:38 -070079/** A single argument... each argument has a key and a value
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -080080
Craig Tiller2d984bf2015-07-20 15:01:38 -070081 A note on naming keys:
82 Keys are namespaced into groups, usually grouped by library, and are
83 keys for module XYZ are named XYZ.key1, XYZ.key2, etc. Module names must
84 be restricted to the regex [A-Za-z][_A-Za-z0-9]{,15}.
85 Key names must be restricted to the regex [A-Za-z][_A-Za-z0-9]{,47}.
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -080086
Craig Tiller2d984bf2015-07-20 15:01:38 -070087 GRPC core library keys are prefixed by grpc.
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -080088
Craig Tiller2d984bf2015-07-20 15:01:38 -070089 Library authors are strongly encouraged to \#define symbolic constants for
90 their keys so that it's possible to change them in the future. */
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -080091typedef struct {
92 grpc_arg_type type;
93 char *key;
94 union {
95 char *string;
96 int integer;
97 struct {
98 void *p;
99 void *(*copy)(void *p);
100 void (*destroy)(void *p);
101 } pointer;
102 } value;
103} grpc_arg;
104
Craig Tillere793ba12015-05-18 09:37:22 -0700105/** An array of arguments that can be passed around.
David Garcia Quintas02c677c2015-06-02 14:40:07 -0700106
Craig Tillere793ba12015-05-18 09:37:22 -0700107 Used to set optional channel-level configuration.
108 These configuration options are modelled as key-value pairs as defined
109 by grpc_arg; keys are strings to allow easy backwards-compatible extension
110 by arbitrary parties.
Masood Malekghassemi7128a902015-06-17 13:17:58 -0700111 All evaluation is performed at channel creation time (i.e. the values in
112 this structure need only live through the creation invocation). */
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800113typedef struct {
114 size_t num_args;
115 grpc_arg *args;
116} grpc_channel_args;
117
118/* Channel argument keys: */
Craig Tiller2d984bf2015-07-20 15:01:38 -0700119/** Enable census for tracing and stats collection */
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800120#define GRPC_ARG_ENABLE_CENSUS "grpc.census"
Craig Tiller2d984bf2015-07-20 15:01:38 -0700121/** Maximum number of concurrent incoming streams to allow on a http2
122 connection */
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800123#define GRPC_ARG_MAX_CONCURRENT_STREAMS "grpc.max_concurrent_streams"
Craig Tiller2d984bf2015-07-20 15:01:38 -0700124/** Maximum message length that the channel can receive */
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800125#define GRPC_ARG_MAX_MESSAGE_LENGTH "grpc.max_message_length"
Craig Tiller2d984bf2015-07-20 15:01:38 -0700126/** Initial sequence number for http2 transports */
Craig Tiller88025582015-05-04 09:41:10 -0700127#define GRPC_ARG_HTTP2_INITIAL_SEQUENCE_NUMBER \
128 "grpc.http2.initial_sequence_number"
Craig Tiller26b37142015-07-26 12:53:27 -0700129/** Default authority to pass if none specified on call construction */
130#define GRPC_ARG_DEFAULT_AUTHORITY "grpc.default_authority"
Craig Tiller0dc5e6c2015-07-10 10:07:53 -0700131/** Primary user agent: goes at the start of the user-agent metadata
132 sent on each request */
133#define GRPC_ARG_PRIMARY_USER_AGENT_STRING "grpc.primary_user_agent"
134/** Secondary user agent: goes at the end of the user-agent metadata
135 sent on each request */
136#define GRPC_ARG_SECONDARY_USER_AGENT_STRING "grpc.secondary_user_agent"
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800137
Craig Tiller3f475422015-06-25 10:43:05 -0700138/** Connectivity state of a channel. */
139typedef enum {
Craig Tiller11bf14e2015-06-29 16:35:41 -0700140 /** channel is idle */
141 GRPC_CHANNEL_IDLE,
Craig Tiller3f475422015-06-25 10:43:05 -0700142 /** channel is connecting */
143 GRPC_CHANNEL_CONNECTING,
144 /** channel is ready for work */
145 GRPC_CHANNEL_READY,
146 /** channel has seen a failure but expects to recover */
147 GRPC_CHANNEL_TRANSIENT_FAILURE,
Craig Tiller3f475422015-06-25 10:43:05 -0700148 /** channel has seen a failure that it cannot recover from */
149 GRPC_CHANNEL_FATAL_FAILURE
150} grpc_connectivity_state;
151
Craig Tiller2d984bf2015-07-20 15:01:38 -0700152/** Result of a grpc call. If the caller satisfies the prerequisites of a
153 particular operation, the grpc_call_error returned will be GRPC_CALL_OK.
154 Receiving any other value listed here is an indication of a bug in the
155 caller. */
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800156typedef enum grpc_call_error {
Craig Tiller2d984bf2015-07-20 15:01:38 -0700157 /** everything went ok */
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800158 GRPC_CALL_OK = 0,
Craig Tiller2d984bf2015-07-20 15:01:38 -0700159 /** something failed, we don't know what */
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800160 GRPC_CALL_ERROR,
Craig Tiller2d984bf2015-07-20 15:01:38 -0700161 /** this method is not available on the server */
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800162 GRPC_CALL_ERROR_NOT_ON_SERVER,
Craig Tiller2d984bf2015-07-20 15:01:38 -0700163 /** this method is not available on the client */
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800164 GRPC_CALL_ERROR_NOT_ON_CLIENT,
Craig Tiller2d984bf2015-07-20 15:01:38 -0700165 /** this method must be called before server_accept */
nnoble0c475f02014-12-05 15:37:39 -0800166 GRPC_CALL_ERROR_ALREADY_ACCEPTED,
Craig Tiller2d984bf2015-07-20 15:01:38 -0700167 /** this method must be called before invoke */
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800168 GRPC_CALL_ERROR_ALREADY_INVOKED,
Craig Tiller2d984bf2015-07-20 15:01:38 -0700169 /** this method must be called after invoke */
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800170 GRPC_CALL_ERROR_NOT_INVOKED,
Craig Tiller2d984bf2015-07-20 15:01:38 -0700171 /** this call is already finished
172 (writes_done or write_status has already been called) */
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800173 GRPC_CALL_ERROR_ALREADY_FINISHED,
Craig Tiller2d984bf2015-07-20 15:01:38 -0700174 /** there is already an outstanding read/write operation on the call */
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800175 GRPC_CALL_ERROR_TOO_MANY_OPERATIONS,
Craig Tiller2d984bf2015-07-20 15:01:38 -0700176 /** the flags value was illegal for this call */
Craig Tillerb96d0012015-05-06 15:33:23 -0700177 GRPC_CALL_ERROR_INVALID_FLAGS,
Craig Tiller2d984bf2015-07-20 15:01:38 -0700178 /** invalid metadata was passed to this call */
Craig Tillerb56975c2015-06-15 10:11:16 -0700179 GRPC_CALL_ERROR_INVALID_METADATA,
Craig Tiller17effab2015-08-04 08:19:36 -0700180 /** invalid message was passed to this call */
181 GRPC_CALL_ERROR_INVALID_MESSAGE,
Alistair Veitchff32faf2015-07-30 09:54:15 -0700182 /** completion queue for notification has not been registered with the
Craig Tiller2d984bf2015-07-20 15:01:38 -0700183 server */
Craig Tillerb56975c2015-06-15 10:11:16 -0700184 GRPC_CALL_ERROR_NOT_SERVER_COMPLETION_QUEUE
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800185} grpc_call_error;
186
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800187/* Write Flags: */
Craig Tiller2d984bf2015-07-20 15:01:38 -0700188/** Hint that the write may be buffered and need not go out on the wire
189 immediately. GRPC is free to buffer the message until the next non-buffered
190 write, or until writes_done, but it need not buffer completely or at all. */
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800191#define GRPC_WRITE_BUFFER_HINT (0x00000001u)
Craig Tiller2d984bf2015-07-20 15:01:38 -0700192/** Force compression to be disabled for a particular write
193 (start_write/add_metadata). Illegal on invoke/accept. */
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800194#define GRPC_WRITE_NO_COMPRESS (0x00000002u)
Craig Tiller2d984bf2015-07-20 15:01:38 -0700195/** Mask of all valid flags. */
David Garcia Quintas1d5aca52015-06-14 14:42:04 -0700196#define GRPC_WRITE_USED_MASK (GRPC_WRITE_BUFFER_HINT | GRPC_WRITE_NO_COMPRESS)
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800197
Craig Tiller2d984bf2015-07-20 15:01:38 -0700198/** A single metadata element */
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800199typedef struct grpc_metadata {
Craig Tiller4f972732015-02-05 12:40:20 -0800200 const char *key;
201 const char *value;
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800202 size_t value_length;
Craig Tiller6902ad22015-04-16 08:01:49 -0700203
Craig Tiller2d984bf2015-07-20 15:01:38 -0700204 /** The following fields are reserved for grpc internal use.
Alistair Veitchff32faf2015-07-30 09:54:15 -0700205 There is no need to initialize them, and they will be set to garbage
206 during
Craig Tiller2d984bf2015-07-20 15:01:38 -0700207 calls to grpc. */
Craig Tiller6902ad22015-04-16 08:01:49 -0700208 struct {
Craig Tiller9c9d4e02015-04-20 09:03:29 -0700209 void *obfuscated[3];
Craig Tiller6902ad22015-04-16 08:01:49 -0700210 } internal_data;
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800211} grpc_metadata;
212
Craig Tiller73b66ef2015-05-18 20:46:47 -0700213/** The type of completion (for grpc_event) */
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800214typedef enum grpc_completion_type {
Craig Tillere793ba12015-05-18 09:37:22 -0700215 /** Shutting down */
Craig Tiller8674cb12015-06-05 07:09:25 -0700216 GRPC_QUEUE_SHUTDOWN,
Craig Tillere793ba12015-05-18 09:37:22 -0700217 /** No event before timeout */
Craig Tiller8674cb12015-06-05 07:09:25 -0700218 GRPC_QUEUE_TIMEOUT,
Craig Tillere793ba12015-05-18 09:37:22 -0700219 /** Operation completion */
Craig Tiller8674cb12015-06-05 07:09:25 -0700220 GRPC_OP_COMPLETE
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800221} grpc_completion_type;
222
Craig Tillere793ba12015-05-18 09:37:22 -0700223/** The result of an operation.
224
225 Returned by a completion queue when the operation started with tag. */
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800226typedef struct grpc_event {
Craig Tillere793ba12015-05-18 09:37:22 -0700227 /** The type of the completion. */
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800228 grpc_completion_type type;
Craig Tiller8674cb12015-06-05 07:09:25 -0700229 /** non-zero if the operation was successful, 0 upon failure.
Craig Tillere793ba12015-05-18 09:37:22 -0700230 Only GRPC_OP_COMPLETE can succeed or fail. */
Craig Tiller64be9f72015-05-04 14:53:51 -0700231 int success;
Craig Tillere793ba12015-05-18 09:37:22 -0700232 /** The tag passed to grpc_call_start_batch etc to start this operation.
233 Only GRPC_OP_COMPLETE has a tag. */
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800234 void *tag;
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800235} grpc_event;
236
Craig Tillerfef76692015-02-02 16:44:26 -0800237typedef struct {
238 size_t count;
239 size_t capacity;
240 grpc_metadata *metadata;
241} grpc_metadata_array;
242
Craig Tillerea61b072015-02-03 19:19:27 -0800243void grpc_metadata_array_init(grpc_metadata_array *array);
244void grpc_metadata_array_destroy(grpc_metadata_array *array);
245
Craig Tillerfef76692015-02-02 16:44:26 -0800246typedef struct {
Craig Tillerea61b072015-02-03 19:19:27 -0800247 char *method;
Craig Tiller034929c2015-02-02 16:56:15 -0800248 size_t method_capacity;
Craig Tillerea61b072015-02-03 19:19:27 -0800249 char *host;
Craig Tiller034929c2015-02-02 16:56:15 -0800250 size_t host_capacity;
Craig Tillerfef76692015-02-02 16:44:26 -0800251 gpr_timespec deadline;
252} grpc_call_details;
253
Craig Tillerea61b072015-02-03 19:19:27 -0800254void grpc_call_details_init(grpc_call_details *details);
255void grpc_call_details_destroy(grpc_call_details *details);
256
Craig Tillerfef76692015-02-02 16:44:26 -0800257typedef enum {
Craig Tiller2d984bf2015-07-20 15:01:38 -0700258 /** Send initial metadata: one and only one instance MUST be sent for each
259 call, unless the call was cancelled - in which case this can be skipped */
Craig Tillerfef76692015-02-02 16:44:26 -0800260 GRPC_OP_SEND_INITIAL_METADATA = 0,
Craig Tiller2d984bf2015-07-20 15:01:38 -0700261 /** Send a message: 0 or more of these operations can occur for each call */
Craig Tillerfef76692015-02-02 16:44:26 -0800262 GRPC_OP_SEND_MESSAGE,
Craig Tiller2d984bf2015-07-20 15:01:38 -0700263 /** Send a close from the client: one and only one instance MUST be sent from
Alistair Veitchff32faf2015-07-30 09:54:15 -0700264 the client, unless the call was cancelled - in which case this can be
Craig Tiller2d984bf2015-07-20 15:01:38 -0700265 skipped */
Craig Tillerfef76692015-02-02 16:44:26 -0800266 GRPC_OP_SEND_CLOSE_FROM_CLIENT,
Craig Tiller2d984bf2015-07-20 15:01:38 -0700267 /** Send status from the server: one and only one instance MUST be sent from
Alistair Veitchff32faf2015-07-30 09:54:15 -0700268 the server unless the call was cancelled - in which case this can be
Craig Tiller2d984bf2015-07-20 15:01:38 -0700269 skipped */
Craig Tillerfef76692015-02-02 16:44:26 -0800270 GRPC_OP_SEND_STATUS_FROM_SERVER,
Alistair Veitchff32faf2015-07-30 09:54:15 -0700271 /** Receive initial metadata: one and only one MUST be made on the client,
Craig Tiller2d984bf2015-07-20 15:01:38 -0700272 must not be made on the server */
Craig Tillerfef76692015-02-02 16:44:26 -0800273 GRPC_OP_RECV_INITIAL_METADATA,
Alistair Veitchff32faf2015-07-30 09:54:15 -0700274 /** Receive a message: 0 or more of these operations can occur for each call
275 */
Craig Tillerfb189f82015-02-03 12:07:07 -0800276 GRPC_OP_RECV_MESSAGE,
Craig Tiller2d984bf2015-07-20 15:01:38 -0700277 /** Receive status on the client: one and only one must be made on the client.
Craig Tiller69eed292015-05-19 10:43:05 -0700278 This operation always succeeds, meaning ops paired with this operation
279 will also appear to succeed, even though they may not have. In that case
Craig Tiller2d984bf2015-07-20 15:01:38 -0700280 the status will indicate some failure. */
Craig Tillerfef76692015-02-02 16:44:26 -0800281 GRPC_OP_RECV_STATUS_ON_CLIENT,
Alistair Veitchff32faf2015-07-30 09:54:15 -0700282 /** Receive close on the server: one and only one must be made on the
Craig Tiller2d984bf2015-07-20 15:01:38 -0700283 server */
Craig Tillerfef76692015-02-02 16:44:26 -0800284 GRPC_OP_RECV_CLOSE_ON_SERVER
285} grpc_op_type;
286
Craig Tiller2d984bf2015-07-20 15:01:38 -0700287/** Operation data: one field for each op type (except SEND_CLOSE_FROM_CLIENT
288 which has no arguments) */
Craig Tillerfef76692015-02-02 16:44:26 -0800289typedef struct grpc_op {
Craig Tiller2d984bf2015-07-20 15:01:38 -0700290 /** Operation type, as defined by grpc_op_type */
Craig Tillerfef76692015-02-02 16:44:26 -0800291 grpc_op_type op;
Craig Tiller2d984bf2015-07-20 15:01:38 -0700292 /** Write flags bitset for grpc_begin_messages */
Alistair Veitchff32faf2015-07-30 09:54:15 -0700293 gpr_uint32 flags;
Craig Tillerfef76692015-02-02 16:44:26 -0800294 union {
295 struct {
296 size_t count;
Craig Tiller6902ad22015-04-16 08:01:49 -0700297 grpc_metadata *metadata;
Craig Tillerfef76692015-02-02 16:44:26 -0800298 } send_initial_metadata;
299 grpc_byte_buffer *send_message;
300 struct {
301 size_t trailing_metadata_count;
302 grpc_metadata *trailing_metadata;
303 grpc_status_code status;
304 const char *status_details;
305 } send_status_from_server;
Craig Tiller2d984bf2015-07-20 15:01:38 -0700306 /** ownership of the array is with the caller, but ownership of the elements
307 stays with the call object (ie key, value members are owned by the call
308 object, recv_initial_metadata->array is owned by the caller).
309 After the operation completes, call grpc_metadata_array_destroy on this
310 value, or reuse it in a future op. */
Craig Tillerfef76692015-02-02 16:44:26 -0800311 grpc_metadata_array *recv_initial_metadata;
Alistair Veitchff32faf2015-07-30 09:54:15 -0700312 /** ownership of the byte buffer is moved to the caller; the caller must
Craig Tiller17effab2015-08-04 08:19:36 -0700313 call grpc_byte_buffer_destroy on this value, or reuse it in a future op.
314 */
Craig Tillerfef76692015-02-02 16:44:26 -0800315 grpc_byte_buffer **recv_message;
316 struct {
Craig Tiller2d984bf2015-07-20 15:01:38 -0700317 /** ownership of the array is with the caller, but ownership of the
Alistair Veitchff32faf2015-07-30 09:54:15 -0700318 elements stays with the call object (ie key, value members are owned
Craig Tiller2d984bf2015-07-20 15:01:38 -0700319 by the call object, trailing_metadata->array is owned by the caller).
Alistair Veitchff32faf2015-07-30 09:54:15 -0700320 After the operation completes, call grpc_metadata_array_destroy on
321 this
Craig Tiller2d984bf2015-07-20 15:01:38 -0700322 value, or reuse it in a future op. */
Craig Tillerfef76692015-02-02 16:44:26 -0800323 grpc_metadata_array *trailing_metadata;
324 grpc_status_code *status;
Craig Tiller2d984bf2015-07-20 15:01:38 -0700325 /** status_details is a buffer owned by the application before the op
326 completes and after the op has completed. During the operation
Alistair Veitchff32faf2015-07-30 09:54:15 -0700327 status_details may be reallocated to a size larger than
328 *status_details_capacity, in which case *status_details_capacity will
Craig Tiller2d984bf2015-07-20 15:01:38 -0700329 be updated with the new array capacity.
Craig Tillerc56b2cb2015-02-05 16:35:38 -0800330
Craig Tiller2d984bf2015-07-20 15:01:38 -0700331 Pre-allocating space:
332 size_t my_capacity = 8;
333 char *my_details = gpr_malloc(my_capacity);
334 x.status_details = &my_details;
335 x.status_details_capacity = &my_capacity;
Craig Tillerc56b2cb2015-02-05 16:35:38 -0800336
Craig Tiller2d984bf2015-07-20 15:01:38 -0700337 Not pre-allocating space:
338 size_t my_capacity = 0;
339 char *my_details = NULL;
340 x.status_details = &my_details;
341 x.status_details_capacity = &my_capacity;
Craig Tillerc56b2cb2015-02-05 16:35:38 -0800342
Craig Tiller2d984bf2015-07-20 15:01:38 -0700343 After the call:
344 gpr_free(my_details); */
Craig Tillerfef76692015-02-02 16:44:26 -0800345 char **status_details;
346 size_t *status_details_capacity;
347 } recv_status_on_client;
348 struct {
Craig Tiller2d984bf2015-07-20 15:01:38 -0700349 /** out argument, set to 1 if the call failed in any way (seen as a
350 cancellation on the server), or 0 if the call succeeded */
Craig Tillerfef76692015-02-02 16:44:26 -0800351 int *cancelled;
352 } recv_close_on_server;
353 } data;
354} grpc_op;
355
Craig Tiller58471772015-07-31 17:12:34 -0700356/* Propagation bits: this can be bitwise or-ed to form propagation_mask for
357 * grpc_call */
358/** Propagate deadline */
Craig Tillerc7df0df2015-08-03 08:06:50 -0700359#define GRPC_PROPAGATE_DEADLINE ((gpr_uint32)1)
Craig Tiller58471772015-07-31 17:12:34 -0700360/** Propagate census context */
Craig Tiller402acf62015-08-05 10:43:10 -0700361#define GRPC_PROPAGATE_STATS_CONTEXT ((gpr_uint32)2)
362#define GRPC_PROPAGATE_TRACING_CONTEXT ((gpr_uint32)4)
363#define GRPC_PROPAGATE_CANCELLATION ((gpr_uint32)8)
Craig Tiller3e7c6a72015-07-31 16:17:04 -0700364
Craig Tillerc7df0df2015-08-03 08:06:50 -0700365/* Default propagation mask: clients of the core API are encouraged to encode
366 deltas from this in their implementations... ie write:
367 GRPC_PROPAGATE_DEFAULTS & ~GRPC_PROPAGATE_DEADLINE to disable deadline
368 propagation. Doing so gives flexibility in the future to define new
369 propagation types that are default inherited or not. */
Craig Tiller402acf62015-08-05 10:43:10 -0700370#define GRPC_PROPAGATE_DEFAULTS \
371 ((gpr_uint32)((0xffff | GRPC_PROPAGATE_DEADLINE | \
372 GRPC_PROPAGATE_STATS_CONTEXT | \
373 GRPC_PROPAGATE_TRACING_CONTEXT)))
Craig Tiller3e7c6a72015-07-31 16:17:04 -0700374
Craig Tillere793ba12015-05-18 09:37:22 -0700375/** Initialize the grpc library.
Craig Tiller8674cb12015-06-05 07:09:25 -0700376
Craig Tillere793ba12015-05-18 09:37:22 -0700377 It is not safe to call any other grpc functions before calling this.
378 (To avoid overhead, little checking is done, and some things may work. We
379 do not warrant that they will continue to do so in future revisions of this
380 library). */
Craig Tiller32946d32015-01-15 11:37:30 -0800381void grpc_init(void);
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800382
Craig Tillere793ba12015-05-18 09:37:22 -0700383/** Shut down the grpc library.
Craig Tiller8674cb12015-06-05 07:09:25 -0700384
Craig Tillere793ba12015-05-18 09:37:22 -0700385 No memory is used by grpc after this call returns, nor are any instructions
386 executing within the grpc library.
387 Prior to calling, all application owned grpc objects must have been
388 destroyed. */
Craig Tiller32946d32015-01-15 11:37:30 -0800389void grpc_shutdown(void);
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800390
Craig Tiller2e622bc2015-07-10 07:46:03 -0700391/** Return a string representing the current version of grpc */
392const char *grpc_version_string(void);
393
Craig Tillere793ba12015-05-18 09:37:22 -0700394/** Create a completion queue */
Craig Tiller32946d32015-01-15 11:37:30 -0800395grpc_completion_queue *grpc_completion_queue_create(void);
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800396
Craig Tillere793ba12015-05-18 09:37:22 -0700397/** Blocks until an event is available, the completion queue is being shut down,
Craig Tiller8674cb12015-06-05 07:09:25 -0700398 or deadline is reached.
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800399
vjpai1854d772015-06-08 01:12:29 -0700400 Returns a grpc_event with type GRPC_QUEUE_TIMEOUT on timeout,
401 otherwise a grpc_event describing the event that occurred.
Craig Tillere793ba12015-05-18 09:37:22 -0700402
403 Callers must not call grpc_completion_queue_next and
404 grpc_completion_queue_pluck simultaneously on the same completion queue. */
Craig Tiller64be9f72015-05-04 14:53:51 -0700405grpc_event grpc_completion_queue_next(grpc_completion_queue *cq,
406 gpr_timespec deadline);
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800407
Craig Tillere793ba12015-05-18 09:37:22 -0700408/** Blocks until an event with tag 'tag' is available, the completion queue is
Craig Tiller8674cb12015-06-05 07:09:25 -0700409 being shutdown or deadline is reached.
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800410
vjpai1854d772015-06-08 01:12:29 -0700411 Returns a grpc_event with type GRPC_QUEUE_TIMEOUT on timeout,
412 otherwise a grpc_event describing the event that occurred.
Craig Tillere793ba12015-05-18 09:37:22 -0700413
414 Callers must not call grpc_completion_queue_next and
415 grpc_completion_queue_pluck simultaneously on the same completion queue. */
Craig Tiller64be9f72015-05-04 14:53:51 -0700416grpc_event grpc_completion_queue_pluck(grpc_completion_queue *cq, void *tag,
417 gpr_timespec deadline);
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800418
Craig Tiller2d984bf2015-07-20 15:01:38 -0700419/** Begin destruction of a completion queue. Once all possible events are
420 drained then grpc_completion_queue_next will start to produce
421 GRPC_QUEUE_SHUTDOWN events only. At that point it's safe to call
422 grpc_completion_queue_destroy.
Craig Tillerb20111c2015-04-10 23:27:11 +0000423
Craig Tiller2d984bf2015-07-20 15:01:38 -0700424 After calling this function applications should ensure that no
425 NEW work is added to be published on this completion queue. */
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800426void grpc_completion_queue_shutdown(grpc_completion_queue *cq);
427
Craig Tiller2d984bf2015-07-20 15:01:38 -0700428/** Destroy a completion queue. The caller must ensure that the queue is
429 drained and no threads are executing grpc_completion_queue_next */
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800430void grpc_completion_queue_destroy(grpc_completion_queue *cq);
431
Craig Tiller48cb07c2015-07-15 16:16:15 -0700432/** Check the connectivity state of a channel. */
433grpc_connectivity_state grpc_channel_check_connectivity_state(
434 grpc_channel *channel, int try_to_connect);
435
436/** Watch for a change in connectivity state.
437 Once the channel connectivity state is different from last_observed_state,
438 tag will be enqueued on cq with success=1.
439 If deadline expires BEFORE the state is changed, tag will be enqueued on cq
Craig Tiller2cd9dd92015-07-31 16:34:37 -0700440 with success=0. */
Craig Tiller48cb07c2015-07-15 16:16:15 -0700441void grpc_channel_watch_connectivity_state(
442 grpc_channel *channel, grpc_connectivity_state last_observed_state,
Craig Tiller2cd9dd92015-07-31 16:34:37 -0700443 gpr_timespec deadline, grpc_completion_queue *cq, void *tag);
Craig Tiller48cb07c2015-07-15 16:16:15 -0700444
Craig Tiller2d984bf2015-07-20 15:01:38 -0700445/** Create a call given a grpc_channel, in order to call 'method'. All
446 completions are sent to 'completion_queue'. 'method' and 'host' need only
Craig Tiller58471772015-07-31 17:12:34 -0700447 live through the invocation of this function.
448 If parent_call is non-NULL, it must be a server-side call. It will be used
449 to propagate properties from the server call to this new client call.
450 */
Craig Tillerfb189f82015-02-03 12:07:07 -0800451grpc_call *grpc_channel_create_call(grpc_channel *channel,
Craig Tiller3e7c6a72015-07-31 16:17:04 -0700452 grpc_call *parent_call,
Craig Tillere1b0e6e2015-07-31 17:07:31 -0700453 gpr_uint32 propagation_mask,
Craig Tillerfb189f82015-02-03 12:07:07 -0800454 grpc_completion_queue *completion_queue,
455 const char *method, const char *host,
456 gpr_timespec deadline);
Craig Tiller034929c2015-02-02 16:56:15 -0800457
Craig Tiller2d984bf2015-07-20 15:01:38 -0700458/** Pre-register a method/host pair on a channel. */
Craig Tillerb20111c2015-04-10 23:27:11 +0000459void *grpc_channel_register_call(grpc_channel *channel, const char *method,
Craig Tiller08453372015-04-10 16:05:38 -0700460 const char *host);
461
Craig Tiller2d984bf2015-07-20 15:01:38 -0700462/** Create a call given a handle returned from grpc_channel_register_call */
Craig Tillerb20111c2015-04-10 23:27:11 +0000463grpc_call *grpc_channel_create_registered_call(
Craig Tillere1b0e6e2015-07-31 17:07:31 -0700464 grpc_channel *channel, grpc_call *parent_call, gpr_uint32 propagation_mask,
Craig Tiller3e7c6a72015-07-31 16:17:04 -0700465 grpc_completion_queue *completion_queue, void *registered_call_handle,
466 gpr_timespec deadline);
Craig Tiller08453372015-04-10 16:05:38 -0700467
Craig Tiller2d984bf2015-07-20 15:01:38 -0700468/** Start a batch of operations defined in the array ops; when complete, post a
469 completion of type 'tag' to the completion queue bound to the call.
470 The order of ops specified in the batch has no significance.
471 Only one operation of each type can be active at once in any given
472 batch. You must call grpc_completion_queue_next or
473 grpc_completion_queue_pluck on the completion queue associated with 'call'
474 for work to be performed.
475 THREAD SAFETY: access to grpc_call_start_batch in multi-threaded environment
476 needs to be synchronized. As an optimization, you may synchronize batches
477 containing just send operations independently from batches containing just
478 receive operations. */
Craig Tillerfef76692015-02-02 16:44:26 -0800479grpc_call_error grpc_call_start_batch(grpc_call *call, const grpc_op *ops,
480 size_t nops, void *tag);
481
Craig Tiller45249422015-07-20 16:16:35 -0700482/** Returns a newly allocated string representing the endpoint to which this
483 call is communicating with. The string is in the uri format accepted by
484 grpc_channel_create.
Alistair Veitchff32faf2015-07-30 09:54:15 -0700485 The returned string should be disposed of with gpr_free().
Craig Tiller45249422015-07-20 16:16:35 -0700486
487 WARNING: this value is never authenticated or subject to any security
488 related code. It must not be used for any authentication related
489 functionality. Instead, use grpc_auth_context. */
Craig Tiller1b22b9d2015-07-20 13:42:22 -0700490char *grpc_call_get_peer(grpc_call *call);
491
Alistair Veitchff32faf2015-07-30 09:54:15 -0700492struct census_context;
493
494/* Set census context for a call; Must be called before first call to
495 grpc_call_start_batch(). */
496void grpc_census_call_set_context(grpc_call *call,
497 struct census_context *context);
498
499/* Retrieve the calls current census context. */
500struct census_context *grpc_census_call_get_context(grpc_call *call);
501
Craig Tiller45249422015-07-20 16:16:35 -0700502/** Return a newly allocated string representing the target a channel was
503 created for. */
504char *grpc_channel_get_target(grpc_channel *channel);
505
Craig Tiller2d984bf2015-07-20 15:01:38 -0700506/** Create a client channel to 'target'. Additional channel level configuration
507 MAY be provided by grpc_channel_args, though the expectation is that most
508 clients will want to simply pass NULL. See grpc_channel_args definition for
509 more on this. The data in 'args' need only live through the invocation of
510 this function. */
Craig Tiller4a4f1492015-07-21 16:32:29 -0700511grpc_channel *grpc_insecure_channel_create(const char *target,
512 const grpc_channel_args *args);
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800513
Craig Tiller2d984bf2015-07-20 15:01:38 -0700514/** Create a lame client: this client fails every operation attempted on it. */
Craig Tiller1b22b9d2015-07-20 13:42:22 -0700515grpc_channel *grpc_lame_client_channel_create(const char *target);
Craig Tiller42bc87c2015-02-23 08:50:19 -0800516
Craig Tiller2d984bf2015-07-20 15:01:38 -0700517/** Close and destroy a grpc channel */
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800518void grpc_channel_destroy(grpc_channel *channel);
519
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800520/* Error handling for grpc_call
521 Most grpc_call functions return a grpc_error. If the error is not GRPC_OK
522 then the operation failed due to some unsatisfied precondition.
523 If a grpc_call fails, it's guaranteed that no change to the call state
524 has been made. */
525
Craig Tiller2d984bf2015-07-20 15:01:38 -0700526/** Called by clients to cancel an RPC on the server.
527 Can be called multiple times, from any thread.
528 THREAD-SAFETY grpc_call_cancel and grpc_call_cancel_with_status
529 are thread-safe, and can be called at any point before grpc_call_destroy
530 is called.*/
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800531grpc_call_error grpc_call_cancel(grpc_call *call);
532
Craig Tiller2d984bf2015-07-20 15:01:38 -0700533/** Called by clients to cancel an RPC on the server.
534 Can be called multiple times, from any thread.
535 If a status has not been received for the call, set it to the status code
536 and description passed in.
537 Importantly, this function does not send status nor description to the
538 remote endpoint. */
Craig Tiller6046dc32015-01-14 12:55:45 -0800539grpc_call_error grpc_call_cancel_with_status(grpc_call *call,
540 grpc_status_code status,
541 const char *description);
Craig Tillerd248c242015-01-14 11:49:12 -0800542
Craig Tiller2d984bf2015-07-20 15:01:38 -0700543/** Destroy a call.
544 THREAD SAFETY: grpc_call_destroy is thread-compatible */
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800545void grpc_call_destroy(grpc_call *call);
546
Craig Tiller2d984bf2015-07-20 15:01:38 -0700547/** Request notification of a new call. 'cq_for_notification' must
Alistair Veitchff32faf2015-07-30 09:54:15 -0700548 have been registered to the server via
Craig Tiller2d984bf2015-07-20 15:01:38 -0700549 grpc_server_register_completion_queue. */
Craig Tillerfb189f82015-02-03 12:07:07 -0800550grpc_call_error grpc_server_request_call(
Craig Tillerea61b072015-02-03 19:19:27 -0800551 grpc_server *server, grpc_call **call, grpc_call_details *details,
Craig Tillerfb189f82015-02-03 12:07:07 -0800552 grpc_metadata_array *request_metadata,
Craig Tillerf9e6adf2015-05-06 11:45:59 -0700553 grpc_completion_queue *cq_bound_to_call,
554 grpc_completion_queue *cq_for_notification, void *tag_new);
Craig Tiller034929c2015-02-02 16:56:15 -0800555
Craig Tiller2d984bf2015-07-20 15:01:38 -0700556/** Registers a method in the server.
557 Methods to this (host, method) pair will not be reported by
558 grpc_server_request_call, but instead be reported by
559 grpc_server_request_registered_call when passed the appropriate
560 registered_method (as returned by this function).
561 Must be called before grpc_server_start.
562 Returns NULL on failure. */
Craig Tiller24be0f72015-02-10 14:04:22 -0800563void *grpc_server_register_method(grpc_server *server, const char *method,
Craig Tillerf9e6adf2015-05-06 11:45:59 -0700564 const char *host);
Craig Tiller24be0f72015-02-10 14:04:22 -0800565
Alistair Veitchff32faf2015-07-30 09:54:15 -0700566/** Request notification of a new pre-registered call. 'cq_for_notification'
567 must have been registered to the server via
Craig Tiller2d984bf2015-07-20 15:01:38 -0700568 grpc_server_register_completion_queue. */
Craig Tiller24be0f72015-02-10 14:04:22 -0800569grpc_call_error grpc_server_request_registered_call(
570 grpc_server *server, void *registered_method, grpc_call **call,
571 gpr_timespec *deadline, grpc_metadata_array *request_metadata,
572 grpc_byte_buffer **optional_payload,
Craig Tillerf9e6adf2015-05-06 11:45:59 -0700573 grpc_completion_queue *cq_bound_to_call,
574 grpc_completion_queue *cq_for_notification, void *tag_new);
Craig Tiller24be0f72015-02-10 14:04:22 -0800575
Craig Tiller2d984bf2015-07-20 15:01:38 -0700576/** Create a server. Additional configuration for each incoming channel can
577 be specified with args. If no additional configuration is needed, args can
578 be NULL. See grpc_channel_args for more. The data in 'args' need only live
579 through the invocation of this function. */
Craig Tillerf9e6adf2015-05-06 11:45:59 -0700580grpc_server *grpc_server_create(const grpc_channel_args *args);
581
Craig Tiller2d984bf2015-07-20 15:01:38 -0700582/** Register a completion queue with the server. Must be done for any
583 notification completion queue that is passed to grpc_server_request_*_call
584 and to grpc_server_shutdown_and_notify. Must be performed prior to
585 grpc_server_start. */
Craig Tillerf9e6adf2015-05-06 11:45:59 -0700586void grpc_server_register_completion_queue(grpc_server *server,
587 grpc_completion_queue *cq);
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800588
Craig Tiller2d984bf2015-07-20 15:01:38 -0700589/** Add a HTTP2 over plaintext over tcp listener.
590 Returns bound port number on success, 0 on failure.
591 REQUIRES: server not started */
Craig Tillerc5ae3eb2015-08-03 10:42:22 -0700592int grpc_server_add_insecure_http2_port(grpc_server *server, const char *addr);
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800593
Craig Tiller2d984bf2015-07-20 15:01:38 -0700594/** Start a server - tells all listeners to start listening */
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800595void grpc_server_start(grpc_server *server);
596
Craig Tiller2d984bf2015-07-20 15:01:38 -0700597/** Begin shutting down a server.
598 After completion, no new calls or connections will be admitted.
599 Existing calls will be allowed to complete.
600 Send a GRPC_OP_COMPLETE event when there are no more calls being serviced.
601 Shutdown is idempotent, and all tags will be notified at once if multiple
602 grpc_server_shutdown_and_notify calls are made. 'cq' must have been
603 registered to this server via grpc_server_register_completion_queue. */
Craig Tillerbce999f2015-05-27 09:55:51 -0700604void grpc_server_shutdown_and_notify(grpc_server *server,
605 grpc_completion_queue *cq, void *tag);
Craig Tiller4ffdcd52015-01-16 11:34:55 -0800606
Craig Tiller2d984bf2015-07-20 15:01:38 -0700607/** Cancel all in-progress calls.
608 Only usable after shutdown. */
Craig Tilleree945e82015-05-26 16:15:34 -0700609void grpc_server_cancel_all_calls(grpc_server *server);
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800610
Craig Tiller2d984bf2015-07-20 15:01:38 -0700611/** Destroy a server.
612 Shutdown must have completed beforehand (i.e. all tags generated by
613 grpc_server_shutdown_and_notify must have been received, and at least
614 one call to grpc_server_shutdown_and_notify must have been made). */
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800615void grpc_server_destroy(grpc_server *server);
616
Craig Tilleraf7abf92015-06-03 17:18:58 -0700617/** Enable or disable a tracer.
618
619 Tracers (usually controlled by the environment variable GRPC_TRACE)
620 allow printf-style debugging on GRPC internals, and are useful for
Craig Tiller9a576332015-06-17 10:21:49 -0700621 tracking down problems in the field.
Craig Tilleraf7abf92015-06-03 17:18:58 -0700622
Craig Tiller9a576332015-06-17 10:21:49 -0700623 Use of this function is not strictly thread-safe, but the
Craig Tilleraf7abf92015-06-03 17:18:58 -0700624 thread-safety issues raised by it should not be of concern. */
625int grpc_tracer_set_enabled(const char *name, int enabled);
626
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800627#ifdef __cplusplus
628}
629#endif
630
Craig Tillerb20111c2015-04-10 23:27:11 +0000631#endif /* GRPC_GRPC_H */