blob: 9bb826f3237e432b2f2488d02da836e1a4e85337 [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>
40#include <grpc/support/slice.h>
41#include <grpc/support/time.h>
42
43#ifdef __cplusplus
44extern "C" {
45#endif
46
Nathaniel Manista6d41a052015-02-16 02:12:48 +000047/* Completion Queues enable notification of the completion of asynchronous
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -080048 actions. */
49typedef struct grpc_completion_queue grpc_completion_queue;
50
51/* The Channel interface allows creation of Call objects. */
52typedef struct grpc_channel grpc_channel;
53
54/* A server listens to some port and responds to request calls */
55typedef struct grpc_server grpc_server;
56
57/* A Call represents an RPC. When created, it is in a configuration state
58 allowing properties to be set until it is invoked. After invoke, the Call
59 can have messages written to it and read from it. */
60typedef struct grpc_call grpc_call;
61
62/* Type specifier for grpc_arg */
63typedef enum {
64 GRPC_ARG_STRING,
65 GRPC_ARG_INTEGER,
66 GRPC_ARG_POINTER
67} grpc_arg_type;
68
69/* A single argument... each argument has a key and a value
70
71 A note on naming keys:
72 Keys are namespaced into groups, usually grouped by library, and are
73 keys for module XYZ are named XYZ.key1, XYZ.key2, etc. Module names must
74 be restricted to the regex [A-Za-z][_A-Za-z0-9]{,15}.
75 Key names must be restricted to the regex [A-Za-z][_A-Za-z0-9]{,47}.
76
77 GRPC core library keys are prefixed by grpc.
78
79 Library authors are strongly encouraged to #define symbolic constants for
80 their keys so that it's possible to change them in the future. */
81typedef struct {
82 grpc_arg_type type;
83 char *key;
84 union {
85 char *string;
86 int integer;
87 struct {
88 void *p;
89 void *(*copy)(void *p);
90 void (*destroy)(void *p);
91 } pointer;
92 } value;
93} grpc_arg;
94
Craig Tiller29f2b212015-02-17 17:01:24 -080095/* An array of arguments that can be passed around.
96 Used to set optional channel-level configuration.
97 These configuration options are modelled as key-value pairs as defined
98 by grpc_arg; keys are strings to allow easy backwards-compatible extension
99 by arbitrary parties.
100 All evaluation is performed at channel creation time. */
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800101typedef struct {
102 size_t num_args;
103 grpc_arg *args;
104} grpc_channel_args;
105
106/* Channel argument keys: */
107/* Enable census for tracing and stats collection */
108#define GRPC_ARG_ENABLE_CENSUS "grpc.census"
109/* Maximum number of concurrent incoming streams to allow on a http2
110 connection */
111#define GRPC_ARG_MAX_CONCURRENT_STREAMS "grpc.max_concurrent_streams"
112/* Maximum message length that the channel can receive */
113#define GRPC_ARG_MAX_MESSAGE_LENGTH "grpc.max_message_length"
Craig Tiller88025582015-05-04 09:41:10 -0700114/* Initial sequence number for http2 transports */
115#define GRPC_ARG_HTTP2_INITIAL_SEQUENCE_NUMBER \
116 "grpc.http2.initial_sequence_number"
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800117
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800118/* Result of a grpc call. If the caller satisfies the prerequisites of a
119 particular operation, the grpc_call_error returned will be GRPC_CALL_OK.
120 Receiving any other value listed here is an indication of a bug in the
121 caller. */
122typedef enum grpc_call_error {
123 /* everything went ok */
124 GRPC_CALL_OK = 0,
125 /* something failed, we don't know what */
126 GRPC_CALL_ERROR,
127 /* this method is not available on the server */
128 GRPC_CALL_ERROR_NOT_ON_SERVER,
129 /* this method is not available on the client */
130 GRPC_CALL_ERROR_NOT_ON_CLIENT,
nnoble0c475f02014-12-05 15:37:39 -0800131 /* this method must be called before server_accept */
132 GRPC_CALL_ERROR_ALREADY_ACCEPTED,
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800133 /* this method must be called before invoke */
134 GRPC_CALL_ERROR_ALREADY_INVOKED,
135 /* this method must be called after invoke */
136 GRPC_CALL_ERROR_NOT_INVOKED,
137 /* this call is already finished
138 (writes_done or write_status has already been called) */
139 GRPC_CALL_ERROR_ALREADY_FINISHED,
140 /* there is already an outstanding read/write operation on the call */
141 GRPC_CALL_ERROR_TOO_MANY_OPERATIONS,
142 /* the flags value was illegal for this call */
143 GRPC_CALL_ERROR_INVALID_FLAGS
144} grpc_call_error;
145
146/* Result of a grpc operation */
147typedef enum grpc_op_error {
148 /* everything went ok */
149 GRPC_OP_OK = 0,
150 /* something failed, we don't know what */
151 GRPC_OP_ERROR
152} grpc_op_error;
153
154/* Write Flags: */
155/* Hint that the write may be buffered and need not go out on the wire
156 immediately. GRPC is free to buffer the message until the next non-buffered
157 write, or until writes_done, but it need not buffer completely or at all. */
158#define GRPC_WRITE_BUFFER_HINT (0x00000001u)
159/* Force compression to be disabled for a particular write
160 (start_write/add_metadata). Illegal on invoke/accept. */
161#define GRPC_WRITE_NO_COMPRESS (0x00000002u)
162
163/* A buffer of bytes */
164struct grpc_byte_buffer;
165typedef struct grpc_byte_buffer grpc_byte_buffer;
166
Nathaniel Manista6d41a052015-02-16 02:12:48 +0000167/* Sample helpers to obtain byte buffers (these will certainly move
168 someplace else) */
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800169grpc_byte_buffer *grpc_byte_buffer_create(gpr_slice *slices, size_t nslices);
Craig Tiller80fa15c2015-01-13 16:10:49 -0800170grpc_byte_buffer *grpc_byte_buffer_copy(grpc_byte_buffer *bb);
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800171size_t grpc_byte_buffer_length(grpc_byte_buffer *bb);
172void grpc_byte_buffer_destroy(grpc_byte_buffer *byte_buffer);
173
174/* Reader for byte buffers. Iterates over slices in the byte buffer */
175struct grpc_byte_buffer_reader;
176typedef struct grpc_byte_buffer_reader grpc_byte_buffer_reader;
177
178grpc_byte_buffer_reader *grpc_byte_buffer_reader_create(
179 grpc_byte_buffer *buffer);
180/* At the end of the stream, returns 0. Otherwise, returns 1 and sets slice to
181 be the returned slice. Caller is responsible for calling gpr_slice_unref on
182 the result. */
183int grpc_byte_buffer_reader_next(grpc_byte_buffer_reader *reader,
184 gpr_slice *slice);
185void grpc_byte_buffer_reader_destroy(grpc_byte_buffer_reader *reader);
186
187/* A single metadata element */
188typedef struct grpc_metadata {
Craig Tiller4f972732015-02-05 12:40:20 -0800189 const char *key;
190 const char *value;
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800191 size_t value_length;
Craig Tiller6902ad22015-04-16 08:01:49 -0700192
193 /* The following fields are reserved for grpc internal use.
194 There is no need to initialize them, and they will be set to garbage during
195 calls to grpc. */
196 struct {
Craig Tiller9c9d4e02015-04-20 09:03:29 -0700197 void *obfuscated[3];
Craig Tiller6902ad22015-04-16 08:01:49 -0700198 } internal_data;
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800199} grpc_metadata;
200
201typedef enum grpc_completion_type {
Craig Tillerfef76692015-02-02 16:44:26 -0800202 GRPC_QUEUE_SHUTDOWN, /* Shutting down */
Craig Tillerfb189f82015-02-03 12:07:07 -0800203 GRPC_OP_COMPLETE, /* operation completion */
Craig Tiller4ffdcd52015-01-16 11:34:55 -0800204 GRPC_SERVER_SHUTDOWN, /* The server has finished shutting down */
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800205 GRPC_COMPLETION_DO_NOT_USE /* must be last, forces users to include
206 a default: case */
207} grpc_completion_type;
208
209typedef struct grpc_event {
210 grpc_completion_type type;
211 void *tag;
212 grpc_call *call;
213 /* Data associated with the completion type. Field names match the type of
214 completion as listed in grpc_completion_type. */
215 union {
Craig Tillerfb189f82015-02-03 12:07:07 -0800216 grpc_op_error op_complete;
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800217 } data;
218} grpc_event;
219
Craig Tillerfef76692015-02-02 16:44:26 -0800220typedef struct {
221 size_t count;
222 size_t capacity;
223 grpc_metadata *metadata;
224} grpc_metadata_array;
225
Craig Tillerea61b072015-02-03 19:19:27 -0800226void grpc_metadata_array_init(grpc_metadata_array *array);
227void grpc_metadata_array_destroy(grpc_metadata_array *array);
228
Craig Tillerfef76692015-02-02 16:44:26 -0800229typedef struct {
Craig Tillerea61b072015-02-03 19:19:27 -0800230 char *method;
Craig Tiller034929c2015-02-02 16:56:15 -0800231 size_t method_capacity;
Craig Tillerea61b072015-02-03 19:19:27 -0800232 char *host;
Craig Tiller034929c2015-02-02 16:56:15 -0800233 size_t host_capacity;
Craig Tillerfef76692015-02-02 16:44:26 -0800234 gpr_timespec deadline;
235} grpc_call_details;
236
Craig Tillerea61b072015-02-03 19:19:27 -0800237void grpc_call_details_init(grpc_call_details *details);
238void grpc_call_details_destroy(grpc_call_details *details);
239
Craig Tillerfef76692015-02-02 16:44:26 -0800240typedef enum {
Craig Tiller24be0f72015-02-10 14:04:22 -0800241 /* Send initial metadata: one and only one instance MUST be sent for each
242 call,
Craig Tillerb7800c12015-02-04 18:25:38 -0800243 unless the call was cancelled - in which case this can be skipped */
Craig Tillerfef76692015-02-02 16:44:26 -0800244 GRPC_OP_SEND_INITIAL_METADATA = 0,
Craig Tillerb7800c12015-02-04 18:25:38 -0800245 /* Send a message: 0 or more of these operations can occur for each call */
Craig Tillerfef76692015-02-02 16:44:26 -0800246 GRPC_OP_SEND_MESSAGE,
Craig Tiller24be0f72015-02-10 14:04:22 -0800247 /* Send a close from the server: one and only one instance MUST be sent from
248 the client,
Craig Tillerb7800c12015-02-04 18:25:38 -0800249 unless the call was cancelled - in which case this can be skipped */
Craig Tillerfef76692015-02-02 16:44:26 -0800250 GRPC_OP_SEND_CLOSE_FROM_CLIENT,
Craig Tiller24be0f72015-02-10 14:04:22 -0800251 /* Send status from the server: one and only one instance MUST be sent from
252 the server
Craig Tillerb7800c12015-02-04 18:25:38 -0800253 unless the call was cancelled - in which case this can be skipped */
Craig Tillerfef76692015-02-02 16:44:26 -0800254 GRPC_OP_SEND_STATUS_FROM_SERVER,
Craig Tillerb7800c12015-02-04 18:25:38 -0800255 /* Receive initial metadata: one and only one MUST be made on the client, must
256 not be made on the server */
Craig Tillerfef76692015-02-02 16:44:26 -0800257 GRPC_OP_RECV_INITIAL_METADATA,
Craig Tillerb7800c12015-02-04 18:25:38 -0800258 /* Receive a message: 0 or more of these operations can occur for each call */
Craig Tillerfb189f82015-02-03 12:07:07 -0800259 GRPC_OP_RECV_MESSAGE,
Craig Tiller24be0f72015-02-10 14:04:22 -0800260 /* Receive status on the client: one and only one must be made on the client
261 */
Craig Tillerfef76692015-02-02 16:44:26 -0800262 GRPC_OP_RECV_STATUS_ON_CLIENT,
Craig Tiller24be0f72015-02-10 14:04:22 -0800263 /* Receive status on the server: one and only one must be made on the server
264 */
Craig Tillerfef76692015-02-02 16:44:26 -0800265 GRPC_OP_RECV_CLOSE_ON_SERVER
266} grpc_op_type;
267
Craig Tiller24be0f72015-02-10 14:04:22 -0800268/* Operation data: one field for each op type (except SEND_CLOSE_FROM_CLIENT
269 which has
Craig Tillerb7800c12015-02-04 18:25:38 -0800270 no arguments) */
Craig Tillerfef76692015-02-02 16:44:26 -0800271typedef struct grpc_op {
272 grpc_op_type op;
273 union {
274 struct {
275 size_t count;
Craig Tiller6902ad22015-04-16 08:01:49 -0700276 grpc_metadata *metadata;
Craig Tillerfef76692015-02-02 16:44:26 -0800277 } send_initial_metadata;
278 grpc_byte_buffer *send_message;
279 struct {
280 size_t trailing_metadata_count;
281 grpc_metadata *trailing_metadata;
282 grpc_status_code status;
283 const char *status_details;
284 } send_status_from_server;
Craig Tiller4f972732015-02-05 12:40:20 -0800285 /* ownership of the array is with the caller, but ownership of the elements
Craig Tillerc56b2cb2015-02-05 16:35:38 -0800286 stays with the call object (ie key, value members are owned by the call
287 object, recv_initial_metadata->array is owned by the caller).
288 After the operation completes, call grpc_metadata_array_destroy on this
289 value, or reuse it in a future op. */
Craig Tillerfef76692015-02-02 16:44:26 -0800290 grpc_metadata_array *recv_initial_metadata;
291 grpc_byte_buffer **recv_message;
292 struct {
Craig Tiller24be0f72015-02-10 14:04:22 -0800293 /* ownership of the array is with the caller, but ownership of the
294 elements
Craig Tillerc56b2cb2015-02-05 16:35:38 -0800295 stays with the call object (ie key, value members are owned by the call
296 object, trailing_metadata->array is owned by the caller).
297 After the operation completes, call grpc_metadata_array_destroy on this
298 value, or reuse it in a future op. */
Craig Tillerfef76692015-02-02 16:44:26 -0800299 grpc_metadata_array *trailing_metadata;
300 grpc_status_code *status;
Craig Tiller24be0f72015-02-10 14:04:22 -0800301 /* status_details is a buffer owned by the application before the op
302 completes
303 and after the op has completed. During the operation status_details may
304 be
305 reallocated to a size larger than *status_details_capacity, in which
306 case
Craig Tillerc56b2cb2015-02-05 16:35:38 -0800307 *status_details_capacity will be updated with the new array capacity.
308
309 Pre-allocating space:
310 size_t my_capacity = 8;
311 char *my_details = gpr_malloc(my_capacity);
312 x.status_details = &my_details;
Craig Tiller24be0f72015-02-10 14:04:22 -0800313 x.status_details_capacity = &my_capacity;
Craig Tillerc56b2cb2015-02-05 16:35:38 -0800314
315 Not pre-allocating space:
316 size_t my_capacity = 0;
317 char *my_details = NULL;
318 x.status_details = &my_details;
Craig Tiller24be0f72015-02-10 14:04:22 -0800319 x.status_details_capacity = &my_capacity;
Craig Tillerc56b2cb2015-02-05 16:35:38 -0800320
321 After the call:
322 gpr_free(my_details); */
Craig Tillerfef76692015-02-02 16:44:26 -0800323 char **status_details;
324 size_t *status_details_capacity;
325 } recv_status_on_client;
326 struct {
Craig Tiller24be0f72015-02-10 14:04:22 -0800327 /* out argument, set to 1 if the call failed in any way (seen as a
328 cancellation
Craig Tiller0a5bcbc2015-02-09 21:39:04 -0800329 on the server), or 0 if the call succeeded */
Craig Tillerfef76692015-02-02 16:44:26 -0800330 int *cancelled;
331 } recv_close_on_server;
332 } data;
333} grpc_op;
334
Craig Tillera0e34a02015-02-17 17:06:23 -0800335/* Initialize the grpc library.
336 It is not safe to call any other grpc functions before calling this.
337 (To avoid overhead, little checking is done, and some things may work. We
338 do not warrant that they will continue to do so in future revisions of this
339 library). */
Craig Tiller32946d32015-01-15 11:37:30 -0800340void grpc_init(void);
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800341
Craig Tillerb20111c2015-04-10 23:27:11 +0000342/* Shut down the grpc library.
Craig Tillera0e34a02015-02-17 17:06:23 -0800343 No memory is used by grpc after this call returns, nor are any instructions
344 executing within the grpc library.
345 Prior to calling, all application owned grpc objects must have been
346 destroyed. */
Craig Tiller32946d32015-01-15 11:37:30 -0800347void grpc_shutdown(void);
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800348
Craig Tiller32946d32015-01-15 11:37:30 -0800349grpc_completion_queue *grpc_completion_queue_create(void);
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800350
Nathaniel Manista6d41a052015-02-16 02:12:48 +0000351/* Blocks until an event is available, the completion queue is being shut down,
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800352 or deadline is reached. Returns NULL on timeout, otherwise the event that
353 occurred. Callers should call grpc_event_finish once they have processed
354 the event.
355
356 Callers must not call grpc_completion_queue_next and
357 grpc_completion_queue_pluck simultaneously on the same completion queue. */
358grpc_event *grpc_completion_queue_next(grpc_completion_queue *cq,
359 gpr_timespec deadline);
360
361/* Blocks until an event with tag 'tag' is available, the completion queue is
362 being shutdown or deadline is reached. Returns NULL on timeout, or a pointer
363 to the event that occurred. Callers should call grpc_event_finish once they
364 have processed the event.
365
366 Callers must not call grpc_completion_queue_next and
367 grpc_completion_queue_pluck simultaneously on the same completion queue. */
368grpc_event *grpc_completion_queue_pluck(grpc_completion_queue *cq, void *tag,
369 gpr_timespec deadline);
370
Nathaniel Manista6d41a052015-02-16 02:12:48 +0000371/* Clean up any data owned by the event */
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800372void grpc_event_finish(grpc_event *event);
373
374/* Begin destruction of a completion queue. Once all possible events are
Craig Tiller8ac56c92015-02-17 22:51:36 -0800375 drained then grpc_completion_queue_next will start to produce
Craig Tillerb20111c2015-04-10 23:27:11 +0000376 GRPC_QUEUE_SHUTDOWN events only. At that point it's safe to call
377 grpc_completion_queue_destroy.
378
Craig Tiller8ac56c92015-02-17 22:51:36 -0800379 After calling this function applications should ensure that no
380 NEW work is added to be published on this completion queue. */
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800381void grpc_completion_queue_shutdown(grpc_completion_queue *cq);
382
383/* Destroy a completion queue. The caller must ensure that the queue is
384 drained and no threads are executing grpc_completion_queue_next */
385void grpc_completion_queue_destroy(grpc_completion_queue *cq);
386
387/* Create a call given a grpc_channel, in order to call 'method'. The request
388 is not sent until grpc_call_invoke is called. All completions are sent to
389 'completion_queue'. */
Craig Tillerfb189f82015-02-03 12:07:07 -0800390grpc_call *grpc_channel_create_call(grpc_channel *channel,
391 grpc_completion_queue *completion_queue,
392 const char *method, const char *host,
393 gpr_timespec deadline);
Craig Tiller034929c2015-02-02 16:56:15 -0800394
Craig Tiller08453372015-04-10 16:05:38 -0700395/* Pre-register a method/host pair on a channel. */
Craig Tillerb20111c2015-04-10 23:27:11 +0000396void *grpc_channel_register_call(grpc_channel *channel, const char *method,
Craig Tiller08453372015-04-10 16:05:38 -0700397 const char *host);
398
399/* Create a call given a handle returned from grpc_channel_register_call */
Craig Tillerb20111c2015-04-10 23:27:11 +0000400grpc_call *grpc_channel_create_registered_call(
401 grpc_channel *channel, grpc_completion_queue *completion_queue,
402 void *registered_call_handle, gpr_timespec deadline);
Craig Tiller08453372015-04-10 16:05:38 -0700403
Craig Tiller034929c2015-02-02 16:56:15 -0800404/* Start a batch of operations defined in the array ops; when complete, post a
Craig Tiller24be0f72015-02-10 14:04:22 -0800405 completion of type 'tag' to the completion queue bound to the call.
Craig Tillerb7800c12015-02-04 18:25:38 -0800406 The order of ops specified in the batch has no significance.
407 Only one operation of each type can be active at once in any given
408 batch. */
Craig Tillerfef76692015-02-02 16:44:26 -0800409grpc_call_error grpc_call_start_batch(grpc_call *call, const grpc_op *ops,
410 size_t nops, void *tag);
411
Craig Tiller29f2b212015-02-17 17:01:24 -0800412/* Create a client channel to 'target'. Additional channel level configuration
413 MAY be provided by grpc_channel_args, though the expectation is that most
414 clients will want to simply pass NULL. See grpc_channel_args definition
415 for more on this. */
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800416grpc_channel *grpc_channel_create(const char *target,
417 const grpc_channel_args *args);
418
Craig Tiller42bc87c2015-02-23 08:50:19 -0800419/* Create a lame client: this client fails every operation attempted on it. */
420grpc_channel *grpc_lame_client_channel_create(void);
421
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800422/* Close and destroy a grpc channel */
423void grpc_channel_destroy(grpc_channel *channel);
424
425/* THREAD-SAFETY for grpc_call
426 The following functions are thread-compatible for any given call:
427 grpc_call_add_metadata
428 grpc_call_invoke
429 grpc_call_start_write
430 grpc_call_writes_done
431 grpc_call_start_read
432 grpc_call_destroy
433 The function grpc_call_cancel is thread-safe, and can be called at any
434 point before grpc_call_destroy is called. */
435
436/* Error handling for grpc_call
437 Most grpc_call functions return a grpc_error. If the error is not GRPC_OK
438 then the operation failed due to some unsatisfied precondition.
439 If a grpc_call fails, it's guaranteed that no change to the call state
440 has been made. */
441
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800442/* Called by clients to cancel an RPC on the server.
443 Can be called multiple times, from any thread. */
444grpc_call_error grpc_call_cancel(grpc_call *call);
445
Craig Tillerd248c242015-01-14 11:49:12 -0800446/* Called by clients to cancel an RPC on the server.
Craig Tiller6046dc32015-01-14 12:55:45 -0800447 Can be called multiple times, from any thread.
Craig Tillerd248c242015-01-14 11:49:12 -0800448 If a status has not been received for the call, set it to the status code
Craig Tiller6046dc32015-01-14 12:55:45 -0800449 and description passed in.
Craig Tillerd248c242015-01-14 11:49:12 -0800450 Importantly, this function does not send status nor description to the
451 remote endpoint. */
Craig Tiller6046dc32015-01-14 12:55:45 -0800452grpc_call_error grpc_call_cancel_with_status(grpc_call *call,
453 grpc_status_code status,
454 const char *description);
Craig Tillerd248c242015-01-14 11:49:12 -0800455
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800456/* Destroy a call. */
457void grpc_call_destroy(grpc_call *call);
458
Craig Tillerfada7d42015-02-11 23:03:55 -0800459/* Request notification of a new call */
Craig Tillerfb189f82015-02-03 12:07:07 -0800460grpc_call_error grpc_server_request_call(
Craig Tillerea61b072015-02-03 19:19:27 -0800461 grpc_server *server, grpc_call **call, grpc_call_details *details,
Craig Tillerfb189f82015-02-03 12:07:07 -0800462 grpc_metadata_array *request_metadata,
Craig Tillerb20111c2015-04-10 23:27:11 +0000463 grpc_completion_queue *cq_bound_to_call, void *tag_new);
Craig Tiller034929c2015-02-02 16:56:15 -0800464
Craig Tillerfada7d42015-02-11 23:03:55 -0800465/* Registers a method in the server.
466 Methods to this (host, method) pair will not be reported by
Craig Tiller06059952015-02-18 08:34:56 -0800467 grpc_server_request_call, but instead be reported by
Craig Tillerfada7d42015-02-11 23:03:55 -0800468 grpc_server_request_registered_call when passed the appropriate
469 registered_method (as returned by this function).
470 Must be called before grpc_server_start.
471 Returns NULL on failure. */
Craig Tiller24be0f72015-02-10 14:04:22 -0800472void *grpc_server_register_method(grpc_server *server, const char *method,
Craig Tiller06059952015-02-18 08:34:56 -0800473 const char *host,
Craig Tiller20bc56d2015-02-12 09:02:56 -0800474 grpc_completion_queue *new_call_cq);
Craig Tiller24be0f72015-02-10 14:04:22 -0800475
Craig Tillerfada7d42015-02-11 23:03:55 -0800476/* Request notification of a new pre-registered call */
Craig Tiller24be0f72015-02-10 14:04:22 -0800477grpc_call_error grpc_server_request_registered_call(
478 grpc_server *server, void *registered_method, grpc_call **call,
479 gpr_timespec *deadline, grpc_metadata_array *request_metadata,
480 grpc_byte_buffer **optional_payload,
Craig Tiller8e8fd892015-02-10 17:02:08 -0800481 grpc_completion_queue *cq_bound_to_call, void *tag_new);
Craig Tiller24be0f72015-02-10 14:04:22 -0800482
Craig Tiller29f2b212015-02-17 17:01:24 -0800483/* Create a server. Additional configuration for each incoming channel can
Craig Tillere7163ab2015-02-17 20:46:08 -0800484 be specified with args. If no additional configuration is needed, args can
485 be NULL. See grpc_channel_args for more. */
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800486grpc_server *grpc_server_create(grpc_completion_queue *cq,
487 const grpc_channel_args *args);
488
Craig Tillerd251ab92015-02-17 17:22:14 -0800489/* Add a HTTP2 over plaintext over tcp listener.
ctiller570d1f42015-01-12 16:29:52 -0800490 Returns bound port number on success, 0 on failure.
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800491 REQUIRES: server not started */
492int grpc_server_add_http2_port(grpc_server *server, const char *addr);
493
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800494/* Start a server - tells all listeners to start listening */
495void grpc_server_start(grpc_server *server);
496
ctiller9a58df02014-12-11 16:26:49 -0800497/* Begin shutting down a server.
498 After completion, no new calls or connections will be admitted.
Craig Tilleraea2fc02015-02-17 16:54:53 -0800499 Existing calls will be allowed to complete.
500 Shutdown is idempotent. */
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800501void grpc_server_shutdown(grpc_server *server);
502
Craig Tiller4ffdcd52015-01-16 11:34:55 -0800503/* As per grpc_server_shutdown, but send a GRPC_SERVER_SHUTDOWN event when
Craig Tilleraea2fc02015-02-17 16:54:53 -0800504 there are no more calls being serviced.
505 Shutdown is idempotent, and all tags will be notified at once if multiple
506 grpc_server_shutdown_and_notify calls are made. */
Craig Tiller4ffdcd52015-01-16 11:34:55 -0800507void grpc_server_shutdown_and_notify(grpc_server *server, void *tag);
508
ctiller9a58df02014-12-11 16:26:49 -0800509/* Destroy a server.
Craig Tilleraea2fc02015-02-17 16:54:53 -0800510 Forcefully cancels all existing calls.
511 Implies grpc_server_shutdown() if one was not previously performed. */
Nicolas Nobleb7ebd3b2014-11-26 16:33:03 -0800512void grpc_server_destroy(grpc_server *server);
513
514#ifdef __cplusplus
515}
516#endif
517
Craig Tillerb20111c2015-04-10 23:27:11 +0000518#endif /* GRPC_GRPC_H */