0a35002a9d4250007162d1a1d6022d2f44c2ae65
[platform/upstream/grpc.git] / src / python / grpcio / grpc / _cython / _cygrpc / grpc.pxi
1 # Copyright 2015 gRPC authors.
2 #
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
6 #
7 #     http://www.apache.org/licenses/LICENSE-2.0
8 #
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
14
15 cimport libc.time
16
17 ctypedef          ssize_t   intptr_t
18 ctypedef          size_t    uintptr_t
19 ctypedef   signed char      int8_t
20 ctypedef   signed short     int16_t
21 ctypedef   signed int       int32_t
22 ctypedef   signed long long int64_t
23 ctypedef unsigned char      uint8_t
24 ctypedef unsigned short     uint16_t
25 ctypedef unsigned int       uint32_t
26 ctypedef unsigned long long uint64_t
27
28
29 cdef extern from "grpc/support/alloc.h":
30
31   void *gpr_malloc(size_t size) nogil
32   void *gpr_zalloc(size_t size) nogil
33   void gpr_free(void *ptr) nogil
34   void *gpr_realloc(void *p, size_t size) nogil
35
36
37 cdef extern from "grpc/byte_buffer_reader.h":
38
39   struct grpc_byte_buffer_reader:
40     # We don't care about the internals
41     pass
42
43
44 cdef extern from "grpc/grpc.h":
45
46   ctypedef struct grpc_slice:
47     # don't worry about writing out the members of grpc_slice; we never access
48     # them directly.
49     pass
50
51   grpc_slice grpc_slice_ref(grpc_slice s) nogil
52   void grpc_slice_unref(grpc_slice s) nogil
53   grpc_slice grpc_empty_slice() nogil
54   grpc_slice grpc_slice_new(void *p, size_t len, void (*destroy)(void *)) nogil
55   grpc_slice grpc_slice_new_with_len(
56       void *p, size_t len, void (*destroy)(void *, size_t)) nogil
57   grpc_slice grpc_slice_malloc(size_t length) nogil
58   grpc_slice grpc_slice_from_copied_string(const char *source) nogil
59   grpc_slice grpc_slice_from_copied_buffer(const char *source, size_t len) nogil
60   grpc_slice grpc_slice_copy(grpc_slice s) nogil
61
62   # Declare functions for function-like macros (because Cython)...
63   void *grpc_slice_start_ptr "GRPC_SLICE_START_PTR" (grpc_slice s) nogil
64   size_t grpc_slice_length "GRPC_SLICE_LENGTH" (grpc_slice s) nogil
65
66   const int GPR_MS_PER_SEC
67   const int GPR_US_PER_SEC
68   const int GPR_NS_PER_SEC
69
70   ctypedef enum gpr_clock_type:
71     GPR_CLOCK_MONOTONIC
72     GPR_CLOCK_REALTIME
73     GPR_CLOCK_PRECISE
74     GPR_TIMESPAN
75
76   ctypedef struct gpr_timespec:
77     int64_t seconds "tv_sec"
78     int32_t nanoseconds "tv_nsec"
79     gpr_clock_type clock_type
80
81   gpr_timespec gpr_time_0(gpr_clock_type type) nogil
82   gpr_timespec gpr_inf_future(gpr_clock_type type) nogil
83   gpr_timespec gpr_inf_past(gpr_clock_type type) nogil
84
85   gpr_timespec gpr_now(gpr_clock_type clock) nogil
86
87   gpr_timespec gpr_convert_clock_type(gpr_timespec t,
88                                       gpr_clock_type target_clock) nogil
89
90   gpr_timespec gpr_time_from_millis(int64_t ms, gpr_clock_type type) nogil
91   gpr_timespec gpr_time_from_nanos(int64_t ns, gpr_clock_type type) nogil
92   double gpr_timespec_to_micros(gpr_timespec t) nogil
93
94   gpr_timespec gpr_time_add(gpr_timespec a, gpr_timespec b) nogil
95
96   int gpr_time_cmp(gpr_timespec a, gpr_timespec b) nogil
97
98   ctypedef struct grpc_byte_buffer:
99     # We don't care about the internals.
100     pass
101
102   grpc_byte_buffer *grpc_raw_byte_buffer_create(grpc_slice *slices,
103                                                 size_t nslices) nogil
104   size_t grpc_byte_buffer_length(grpc_byte_buffer *bb) nogil
105   void grpc_byte_buffer_destroy(grpc_byte_buffer *byte_buffer) nogil
106
107   int grpc_byte_buffer_reader_init(grpc_byte_buffer_reader *reader,
108                                    grpc_byte_buffer *buffer) nogil
109   int grpc_byte_buffer_reader_next(grpc_byte_buffer_reader *reader,
110                                    grpc_slice *slice) nogil
111   void grpc_byte_buffer_reader_destroy(grpc_byte_buffer_reader *reader) nogil
112
113   ctypedef enum grpc_status_code:
114     GRPC_STATUS_OK
115     GRPC_STATUS_CANCELLED
116     GRPC_STATUS_UNKNOWN
117     GRPC_STATUS_INVALID_ARGUMENT
118     GRPC_STATUS_DEADLINE_EXCEEDED
119     GRPC_STATUS_NOT_FOUND
120     GRPC_STATUS_ALREADY_EXISTS
121     GRPC_STATUS_PERMISSION_DENIED
122     GRPC_STATUS_UNAUTHENTICATED
123     GRPC_STATUS_RESOURCE_EXHAUSTED
124     GRPC_STATUS_FAILED_PRECONDITION
125     GRPC_STATUS_ABORTED
126     GRPC_STATUS_OUT_OF_RANGE
127     GRPC_STATUS_UNIMPLEMENTED
128     GRPC_STATUS_INTERNAL
129     GRPC_STATUS_UNAVAILABLE
130     GRPC_STATUS_DATA_LOSS
131     GRPC_STATUS__DO_NOT_USE
132
133   const char *GRPC_ARG_ENABLE_CENSUS
134   const char *GRPC_ARG_MAX_CONCURRENT_STREAMS
135   const char *GRPC_ARG_MAX_RECEIVE_MESSAGE_LENGTH
136   const char *GRPC_ARG_MAX_SEND_MESSAGE_LENGTH
137   const char *GRPC_ARG_HTTP2_INITIAL_SEQUENCE_NUMBER
138   const char *GRPC_ARG_DEFAULT_AUTHORITY
139   const char *GRPC_ARG_PRIMARY_USER_AGENT_STRING
140   const char *GRPC_ARG_SECONDARY_USER_AGENT_STRING
141   const char *GRPC_SSL_TARGET_NAME_OVERRIDE_ARG
142   const char *GRPC_SSL_SESSION_CACHE_ARG
143   const char *GRPC_COMPRESSION_CHANNEL_DEFAULT_ALGORITHM
144   const char *GRPC_COMPRESSION_CHANNEL_DEFAULT_LEVEL
145   const char *GRPC_COMPRESSION_CHANNEL_ENABLED_ALGORITHMS_BITSET
146
147   const int GRPC_WRITE_BUFFER_HINT
148   const int GRPC_WRITE_NO_COMPRESS
149   const int GRPC_WRITE_USED_MASK
150
151   const int GRPC_INITIAL_METADATA_WAIT_FOR_READY
152   const int GRPC_INITIAL_METADATA_WAIT_FOR_READY_EXPLICITLY_SET
153   const int GRPC_INITIAL_METADATA_USED_MASK
154
155   const int GRPC_MAX_COMPLETION_QUEUE_PLUCKERS
156
157   ctypedef struct grpc_completion_queue:
158     # We don't care about the internals (and in fact don't know them)
159     pass
160
161   ctypedef struct grpc_channel:
162     # We don't care about the internals (and in fact don't know them)
163     pass
164
165   ctypedef struct grpc_server:
166     # We don't care about the internals (and in fact don't know them)
167     pass
168
169   ctypedef struct grpc_call:
170     # We don't care about the internals (and in fact don't know them)
171     pass
172
173   ctypedef enum grpc_arg_type:
174     GRPC_ARG_STRING
175     GRPC_ARG_INTEGER
176     GRPC_ARG_POINTER
177
178   ctypedef struct grpc_arg_pointer_vtable:
179     void *(*copy)(void *)
180     void (*destroy)(void *)
181     int (*cmp)(void *, void *)
182
183   ctypedef struct grpc_arg_value_pointer:
184     void *address "p"
185     grpc_arg_pointer_vtable *vtable
186
187   union grpc_arg_value:
188     char *string
189     int integer
190     grpc_arg_value_pointer pointer
191
192   ctypedef struct grpc_arg:
193     grpc_arg_type type
194     char *key
195     grpc_arg_value value
196
197   ctypedef struct grpc_channel_args:
198     size_t arguments_length "num_args"
199     grpc_arg *arguments "args"
200
201   ctypedef enum grpc_stream_compression_level:
202     GRPC_STREAM_COMPRESS_LEVEL_NONE
203     GRPC_STREAM_COMPRESS_LEVEL_LOW
204     GRPC_STREAM_COMPRESS_LEVEL_MED
205     GRPC_STREAM_COMPRESS_LEVEL_HIGH
206
207   ctypedef enum grpc_call_error:
208     GRPC_CALL_OK
209     GRPC_CALL_ERROR
210     GRPC_CALL_ERROR_NOT_ON_SERVER
211     GRPC_CALL_ERROR_NOT_ON_CLIENT
212     GRPC_CALL_ERROR_ALREADY_ACCEPTED
213     GRPC_CALL_ERROR_ALREADY_INVOKED
214     GRPC_CALL_ERROR_NOT_INVOKED
215     GRPC_CALL_ERROR_ALREADY_FINISHED
216     GRPC_CALL_ERROR_TOO_MANY_OPERATIONS
217     GRPC_CALL_ERROR_INVALID_FLAGS
218     GRPC_CALL_ERROR_INVALID_METADATA
219
220   ctypedef enum grpc_cq_completion_type:
221     GRPC_CQ_NEXT
222     GRPC_CQ_PLUCK
223
224   ctypedef enum grpc_cq_polling_type:
225     GRPC_CQ_DEFAULT_POLLING
226     GRPC_CQ_NON_LISTENING
227     GRPC_CQ_NON_POLLING
228
229   ctypedef struct grpc_completion_queue_attributes:
230     int version
231     grpc_cq_completion_type cq_completion_type
232     grpc_cq_polling_type cq_polling_type
233
234   ctypedef enum grpc_connectivity_state:
235     GRPC_CHANNEL_IDLE
236     GRPC_CHANNEL_CONNECTING
237     GRPC_CHANNEL_READY
238     GRPC_CHANNEL_TRANSIENT_FAILURE
239     GRPC_CHANNEL_SHUTDOWN
240
241   ctypedef struct grpc_metadata:
242     grpc_slice key
243     grpc_slice value
244     # ignore the 'internal_data.obfuscated' fields.
245
246   ctypedef enum grpc_completion_type:
247     GRPC_QUEUE_SHUTDOWN
248     GRPC_QUEUE_TIMEOUT
249     GRPC_OP_COMPLETE
250
251   ctypedef struct grpc_event:
252     grpc_completion_type type
253     int success
254     void *tag
255
256   ctypedef struct grpc_metadata_array:
257     size_t count
258     size_t capacity
259     grpc_metadata *metadata
260
261   void grpc_metadata_array_init(grpc_metadata_array *array) nogil
262   void grpc_metadata_array_destroy(grpc_metadata_array *array) nogil
263
264   ctypedef struct grpc_call_details:
265     grpc_slice method
266     grpc_slice host
267     gpr_timespec deadline
268
269   void grpc_call_details_init(grpc_call_details *details) nogil
270   void grpc_call_details_destroy(grpc_call_details *details) nogil
271
272   ctypedef enum grpc_op_type:
273     GRPC_OP_SEND_INITIAL_METADATA
274     GRPC_OP_SEND_MESSAGE
275     GRPC_OP_SEND_CLOSE_FROM_CLIENT
276     GRPC_OP_SEND_STATUS_FROM_SERVER
277     GRPC_OP_RECV_INITIAL_METADATA
278     GRPC_OP_RECV_MESSAGE
279     GRPC_OP_RECV_STATUS_ON_CLIENT
280     GRPC_OP_RECV_CLOSE_ON_SERVER
281
282   ctypedef struct grpc_op_send_initial_metadata_maybe_compression_level:
283     uint8_t is_set
284     grpc_compression_level level
285
286   ctypedef struct grpc_op_data_send_initial_metadata:
287     size_t count
288     grpc_metadata *metadata
289     grpc_op_send_initial_metadata_maybe_compression_level maybe_compression_level
290
291   ctypedef struct grpc_op_data_send_status_from_server:
292     size_t trailing_metadata_count
293     grpc_metadata *trailing_metadata
294     grpc_status_code status
295     grpc_slice *status_details
296
297   ctypedef struct grpc_op_data_recv_status_on_client:
298     grpc_metadata_array *trailing_metadata
299     grpc_status_code *status
300     grpc_slice *status_details
301     char** error_string
302
303   ctypedef struct grpc_op_data_recv_close_on_server:
304     int *cancelled
305
306   ctypedef struct grpc_op_data_send_message:
307     grpc_byte_buffer *send_message
308
309   ctypedef struct grpc_op_data_receive_message:
310     grpc_byte_buffer **receive_message "recv_message"
311
312   ctypedef struct grpc_op_data_receive_initial_metadata:
313     grpc_metadata_array *receive_initial_metadata "recv_initial_metadata"
314
315   union grpc_op_data:
316     grpc_op_data_send_initial_metadata send_initial_metadata
317     grpc_op_data_send_message send_message
318     grpc_op_data_send_status_from_server send_status_from_server
319     grpc_op_data_receive_initial_metadata receive_initial_metadata "recv_initial_metadata"
320     grpc_op_data_receive_message receive_message "recv_message"
321     grpc_op_data_recv_status_on_client receive_status_on_client "recv_status_on_client"
322     grpc_op_data_recv_close_on_server receive_close_on_server "recv_close_on_server"
323
324   ctypedef struct grpc_op:
325     grpc_op_type type "op"
326     uint32_t flags
327     grpc_op_data data
328
329   void grpc_init() nogil
330   void grpc_shutdown_blocking() nogil
331   int grpc_is_initialized() nogil
332
333   ctypedef struct grpc_completion_queue_factory:
334     pass
335
336   grpc_completion_queue_factory *grpc_completion_queue_factory_lookup(
337       const grpc_completion_queue_attributes* attributes) nogil
338   grpc_completion_queue *grpc_completion_queue_create(
339     const grpc_completion_queue_factory* factory,
340     const grpc_completion_queue_attributes* attr, void* reserved) nogil
341   grpc_completion_queue *grpc_completion_queue_create_for_next(void *reserved) nogil
342
343   grpc_event grpc_completion_queue_next(grpc_completion_queue *cq,
344                                         gpr_timespec deadline,
345                                         void *reserved) nogil
346   grpc_event grpc_completion_queue_pluck(grpc_completion_queue *cq, void *tag,
347                                          gpr_timespec deadline,
348                                          void *reserved) nogil
349   void grpc_completion_queue_shutdown(grpc_completion_queue *cq) nogil
350   void grpc_completion_queue_destroy(grpc_completion_queue *cq) nogil
351
352   grpc_call_error grpc_call_start_batch(
353       grpc_call *call, const grpc_op *ops, size_t nops, void *tag,
354       void *reserved) nogil
355   grpc_call_error grpc_call_cancel(grpc_call *call, void *reserved) nogil
356   grpc_call_error grpc_call_cancel_with_status(grpc_call *call,
357                                                grpc_status_code status,
358                                                const char *description,
359                                                void *reserved) nogil
360   char *grpc_call_get_peer(grpc_call *call) nogil
361   void grpc_call_unref(grpc_call *call) nogil
362
363   grpc_channel *grpc_insecure_channel_create(const char *target,
364                                              const grpc_channel_args *args,
365                                              void *reserved) nogil
366   grpc_call *grpc_channel_create_call(
367     grpc_channel *channel, grpc_call *parent_call, uint32_t propagation_mask,
368     grpc_completion_queue *completion_queue, grpc_slice method,
369     const grpc_slice *host, gpr_timespec deadline, void *reserved) nogil
370   grpc_connectivity_state grpc_channel_check_connectivity_state(
371       grpc_channel *channel, int try_to_connect) nogil
372   void grpc_channel_watch_connectivity_state(
373       grpc_channel *channel, grpc_connectivity_state last_observed_state,
374       gpr_timespec deadline, grpc_completion_queue *cq, void *tag) nogil
375   char *grpc_channel_get_target(grpc_channel *channel) nogil
376   void grpc_channel_destroy(grpc_channel *channel) nogil
377
378   grpc_server *grpc_server_create(
379       const grpc_channel_args *args, void *reserved) nogil
380   grpc_call_error grpc_server_request_call(
381       grpc_server *server, grpc_call **call, grpc_call_details *details,
382       grpc_metadata_array *request_metadata, grpc_completion_queue
383       *cq_bound_to_call, grpc_completion_queue *cq_for_notification, void
384       *tag_new) nogil
385   void grpc_server_register_completion_queue(grpc_server *server,
386                                              grpc_completion_queue *cq,
387                                              void *reserved) nogil
388   int grpc_server_add_insecure_http2_port(
389       grpc_server *server, const char *addr) nogil
390   void grpc_server_start(grpc_server *server) nogil
391   void grpc_server_shutdown_and_notify(
392       grpc_server *server, grpc_completion_queue *cq, void *tag) nogil
393   void grpc_server_cancel_all_calls(grpc_server *server) nogil
394   void grpc_server_destroy(grpc_server *server) nogil
395
396   char* grpc_channelz_get_top_channels(intptr_t start_channel_id)
397   char* grpc_channelz_get_servers(intptr_t start_server_id)
398   char* grpc_channelz_get_server(intptr_t server_id)
399   char* grpc_channelz_get_server_sockets(intptr_t server_id,
400                                          intptr_t start_socket_id,
401                                          intptr_t max_results)
402   char* grpc_channelz_get_channel(intptr_t channel_id)
403   char* grpc_channelz_get_subchannel(intptr_t subchannel_id)
404   char* grpc_channelz_get_socket(intptr_t socket_id)
405
406
407 cdef extern from "grpc/grpc_security.h":
408
409   # Declare this as an enum, this is the only way to make it a const in
410   # cython
411   enum: GRPC_METADATA_CREDENTIALS_PLUGIN_SYNC_MAX
412
413   ctypedef enum grpc_ssl_roots_override_result:
414     GRPC_SSL_ROOTS_OVERRIDE_OK
415     GRPC_SSL_ROOTS_OVERRIDE_FAILED_PERMANENTLY
416     GRPC_SSL_ROOTS_OVERRIDE_FAILED
417
418   ctypedef enum grpc_ssl_client_certificate_request_type:
419     GRPC_SSL_DONT_REQUEST_CLIENT_CERTIFICATE,
420     GRPC_SSL_REQUEST_CLIENT_CERTIFICATE_BUT_DONT_VERIFY
421     GRPC_SSL_REQUEST_CLIENT_CERTIFICATE_AND_VERIFY
422     GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_BUT_DONT_VERIFY
423     GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY
424
425   ctypedef enum grpc_ssl_certificate_config_reload_status:
426     GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_UNCHANGED
427     GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_NEW
428     GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_FAIL
429
430   ctypedef struct grpc_ssl_server_certificate_config:
431     # We don't care about the internals
432     pass
433
434   ctypedef struct grpc_ssl_server_credentials_options:
435     # We don't care about the internals
436     pass
437
438   grpc_ssl_server_certificate_config * grpc_ssl_server_certificate_config_create(
439     const char *pem_root_certs,
440     const grpc_ssl_pem_key_cert_pair *pem_key_cert_pairs,
441     size_t num_key_cert_pairs)
442
443   void grpc_ssl_server_certificate_config_destroy(grpc_ssl_server_certificate_config *config)
444
445   ctypedef grpc_ssl_certificate_config_reload_status (*grpc_ssl_server_certificate_config_callback)(
446     void *user_data,
447     grpc_ssl_server_certificate_config **config)
448
449   grpc_ssl_server_credentials_options *grpc_ssl_server_credentials_create_options_using_config(
450     grpc_ssl_client_certificate_request_type client_certificate_request,
451     grpc_ssl_server_certificate_config *certificate_config)
452
453   grpc_ssl_server_credentials_options* grpc_ssl_server_credentials_create_options_using_config_fetcher(
454     grpc_ssl_client_certificate_request_type client_certificate_request,
455     grpc_ssl_server_certificate_config_callback cb,
456     void *user_data)
457
458   grpc_server_credentials *grpc_ssl_server_credentials_create_with_options(
459       grpc_ssl_server_credentials_options *options)
460
461   ctypedef struct grpc_ssl_pem_key_cert_pair:
462     const char *private_key
463     const char *certificate_chain "cert_chain"
464
465   ctypedef struct grpc_channel_credentials:
466     # We don't care about the internals (and in fact don't know them)
467     pass
468
469   ctypedef struct grpc_call_credentials:
470     # We don't care about the internals (and in fact don't know them)
471     pass
472
473   ctypedef struct grpc_ssl_session_cache:
474     # We don't care about the internals (and in fact don't know them)
475     pass
476
477   ctypedef struct verify_peer_options:
478     # We don't care about the internals (and in fact don't know them)
479     pass
480
481   ctypedef void (*grpc_ssl_roots_override_callback)(char **pem_root_certs)
482
483   grpc_ssl_session_cache *grpc_ssl_session_cache_create_lru(size_t capacity)
484   void grpc_ssl_session_cache_destroy(grpc_ssl_session_cache* cache)
485
486   void grpc_set_ssl_roots_override_callback(
487       grpc_ssl_roots_override_callback cb) nogil
488
489   grpc_channel_credentials *grpc_google_default_credentials_create() nogil
490   grpc_channel_credentials *grpc_ssl_credentials_create(
491       const char *pem_root_certs, grpc_ssl_pem_key_cert_pair *pem_key_cert_pair,
492       verify_peer_options *verify_options, void *reserved) nogil
493   grpc_channel_credentials *grpc_composite_channel_credentials_create(
494       grpc_channel_credentials *creds1, grpc_call_credentials *creds2,
495       void *reserved) nogil
496   void grpc_channel_credentials_release(grpc_channel_credentials *creds) nogil
497
498   grpc_call_credentials *grpc_composite_call_credentials_create(
499       grpc_call_credentials *creds1, grpc_call_credentials *creds2,
500       void *reserved) nogil
501   grpc_call_credentials *grpc_google_compute_engine_credentials_create(
502       void *reserved) nogil
503   grpc_call_credentials *grpc_service_account_jwt_access_credentials_create(
504       const char *json_key,
505       gpr_timespec token_lifetime, void *reserved) nogil
506   grpc_call_credentials *grpc_google_refresh_token_credentials_create(
507       const char *json_refresh_token, void *reserved) nogil
508   grpc_call_credentials *grpc_google_iam_credentials_create(
509       const char *authorization_token, const char *authority_selector,
510       void *reserved) nogil
511   void grpc_call_credentials_release(grpc_call_credentials *creds) nogil
512
513   grpc_channel *grpc_secure_channel_create(
514       grpc_channel_credentials *creds, const char *target,
515       const grpc_channel_args *args, void *reserved) nogil
516
517   ctypedef struct grpc_server_credentials:
518     # We don't care about the internals (and in fact don't know them)
519     pass
520
521   void grpc_server_credentials_release(grpc_server_credentials *creds) nogil
522
523   int grpc_server_add_secure_http2_port(grpc_server *server, const char *addr,
524                                         grpc_server_credentials *creds) nogil
525
526   grpc_call_error grpc_call_set_credentials(grpc_call *call,
527                                             grpc_call_credentials *creds) nogil
528
529   ctypedef struct grpc_auth_context:
530     # We don't care about the internals (and in fact don't know them)
531     pass
532
533   ctypedef struct grpc_auth_metadata_context:
534     const char *service_url
535     const char *method_name
536     const grpc_auth_context *channel_auth_context
537
538   ctypedef void (*grpc_credentials_plugin_metadata_cb)(
539       void *user_data, const grpc_metadata *creds_md, size_t num_creds_md,
540       grpc_status_code status, const char *error_details)
541
542   ctypedef struct grpc_metadata_credentials_plugin:
543     int (*get_metadata)(
544         void *state, grpc_auth_metadata_context context,
545         grpc_credentials_plugin_metadata_cb cb, void *user_data,
546         grpc_metadata creds_md[GRPC_METADATA_CREDENTIALS_PLUGIN_SYNC_MAX],
547         size_t *num_creds_md, grpc_status_code *status,
548         const char **error_details)
549     void (*destroy)(void *state)
550     void *state
551     const char *type
552
553   grpc_call_credentials *grpc_metadata_credentials_create_from_plugin(
554       grpc_metadata_credentials_plugin plugin, void *reserved) nogil
555
556   ctypedef struct grpc_auth_property_iterator:
557     pass
558
559   ctypedef struct grpc_auth_property:
560     char *name
561     char *value
562     size_t value_length
563
564   grpc_auth_property *grpc_auth_property_iterator_next(
565       grpc_auth_property_iterator *it)
566
567   grpc_auth_property_iterator grpc_auth_context_property_iterator(
568       const grpc_auth_context *ctx)
569
570   grpc_auth_property_iterator grpc_auth_context_peer_identity(
571       const grpc_auth_context *ctx)
572
573   char *grpc_auth_context_peer_identity_property_name(
574       const grpc_auth_context *ctx)
575
576   grpc_auth_property_iterator grpc_auth_context_find_properties_by_name(
577       const grpc_auth_context *ctx, const char *name)
578
579   grpc_auth_context_peer_is_authenticated(
580       const grpc_auth_context *ctx)
581
582   grpc_auth_context *grpc_call_auth_context(grpc_call *call)
583
584   void grpc_auth_context_release(grpc_auth_context *context)
585
586 cdef extern from "grpc/compression.h":
587
588   ctypedef enum grpc_compression_algorithm:
589     GRPC_COMPRESS_NONE
590     GRPC_COMPRESS_DEFLATE
591     GRPC_COMPRESS_GZIP
592     GRPC_COMPRESS_STREAM_GZIP
593     GRPC_COMPRESS_ALGORITHMS_COUNT
594
595   ctypedef enum grpc_compression_level:
596     GRPC_COMPRESS_LEVEL_NONE
597     GRPC_COMPRESS_LEVEL_LOW
598     GRPC_COMPRESS_LEVEL_MED
599     GRPC_COMPRESS_LEVEL_HIGH
600     GRPC_COMPRESS_LEVEL_COUNT
601
602   ctypedef struct grpc_compression_options:
603     uint32_t enabled_algorithms_bitset
604
605   int grpc_compression_algorithm_parse(
606       grpc_slice value, grpc_compression_algorithm *algorithm) nogil
607   int grpc_compression_algorithm_name(grpc_compression_algorithm algorithm,
608                                       const char **name) nogil
609   grpc_compression_algorithm grpc_compression_algorithm_for_level(
610       grpc_compression_level level, uint32_t accepted_encodings) nogil
611   void grpc_compression_options_init(grpc_compression_options *opts) nogil
612   void grpc_compression_options_enable_algorithm(
613       grpc_compression_options *opts,
614       grpc_compression_algorithm algorithm) nogil
615   void grpc_compression_options_disable_algorithm(
616       grpc_compression_options *opts,
617       grpc_compression_algorithm algorithm) nogil
618   int grpc_compression_options_is_algorithm_enabled(
619       const grpc_compression_options *opts,
620       grpc_compression_algorithm algorithm) nogil