Imported Upstream version 1.22.0
[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     "GRPC_COMPRESSION_CHANNEL_DEFAULT_ALGORITHM"
145   const char *GRPC_COMPRESSION_CHANNEL_DEFAULT_LEVEL
146   const char *GRPC_COMPRESSION_CHANNEL_ENABLED_ALGORITHMS_BITSET
147
148   const int GRPC_WRITE_BUFFER_HINT
149   const int GRPC_WRITE_NO_COMPRESS
150   const int GRPC_WRITE_USED_MASK
151
152   const int GRPC_INITIAL_METADATA_WAIT_FOR_READY
153   const int GRPC_INITIAL_METADATA_WAIT_FOR_READY_EXPLICITLY_SET
154   const int GRPC_INITIAL_METADATA_USED_MASK
155
156   const int GRPC_MAX_COMPLETION_QUEUE_PLUCKERS
157
158   ctypedef struct grpc_completion_queue:
159     # We don't care about the internals (and in fact don't know them)
160     pass
161
162   ctypedef struct grpc_channel:
163     # We don't care about the internals (and in fact don't know them)
164     pass
165
166   ctypedef struct grpc_server:
167     # We don't care about the internals (and in fact don't know them)
168     pass
169
170   ctypedef struct grpc_call:
171     # We don't care about the internals (and in fact don't know them)
172     pass
173
174   ctypedef enum grpc_arg_type:
175     GRPC_ARG_STRING
176     GRPC_ARG_INTEGER
177     GRPC_ARG_POINTER
178
179   ctypedef struct grpc_arg_pointer_vtable:
180     void *(*copy)(void *)
181     void (*destroy)(void *)
182     int (*cmp)(void *, void *)
183
184   ctypedef struct grpc_arg_value_pointer:
185     void *address "p"
186     grpc_arg_pointer_vtable *vtable
187
188   union grpc_arg_value:
189     char *string
190     int integer
191     grpc_arg_value_pointer pointer
192
193   ctypedef struct grpc_arg:
194     grpc_arg_type type
195     char *key
196     grpc_arg_value value
197
198   ctypedef struct grpc_channel_args:
199     size_t arguments_length "num_args"
200     grpc_arg *arguments "args"
201
202   ctypedef enum grpc_stream_compression_level:
203     GRPC_STREAM_COMPRESS_LEVEL_NONE
204     GRPC_STREAM_COMPRESS_LEVEL_LOW
205     GRPC_STREAM_COMPRESS_LEVEL_MED
206     GRPC_STREAM_COMPRESS_LEVEL_HIGH
207
208   ctypedef enum grpc_call_error:
209     GRPC_CALL_OK
210     GRPC_CALL_ERROR
211     GRPC_CALL_ERROR_NOT_ON_SERVER
212     GRPC_CALL_ERROR_NOT_ON_CLIENT
213     GRPC_CALL_ERROR_ALREADY_ACCEPTED
214     GRPC_CALL_ERROR_ALREADY_INVOKED
215     GRPC_CALL_ERROR_NOT_INVOKED
216     GRPC_CALL_ERROR_ALREADY_FINISHED
217     GRPC_CALL_ERROR_TOO_MANY_OPERATIONS
218     GRPC_CALL_ERROR_INVALID_FLAGS
219     GRPC_CALL_ERROR_INVALID_METADATA
220
221   ctypedef enum grpc_cq_completion_type:
222     GRPC_CQ_NEXT
223     GRPC_CQ_PLUCK
224
225   ctypedef enum grpc_cq_polling_type:
226     GRPC_CQ_DEFAULT_POLLING
227     GRPC_CQ_NON_LISTENING
228     GRPC_CQ_NON_POLLING
229
230   ctypedef struct grpc_completion_queue_attributes:
231     int version
232     grpc_cq_completion_type cq_completion_type
233     grpc_cq_polling_type cq_polling_type
234
235   ctypedef enum grpc_connectivity_state:
236     GRPC_CHANNEL_IDLE
237     GRPC_CHANNEL_CONNECTING
238     GRPC_CHANNEL_READY
239     GRPC_CHANNEL_TRANSIENT_FAILURE
240     GRPC_CHANNEL_SHUTDOWN
241
242   ctypedef struct grpc_metadata:
243     grpc_slice key
244     grpc_slice value
245     # ignore the 'internal_data.obfuscated' fields.
246
247   ctypedef enum grpc_completion_type:
248     GRPC_QUEUE_SHUTDOWN
249     GRPC_QUEUE_TIMEOUT
250     GRPC_OP_COMPLETE
251
252   ctypedef struct grpc_event:
253     grpc_completion_type type
254     int success
255     void *tag
256
257   ctypedef struct grpc_metadata_array:
258     size_t count
259     size_t capacity
260     grpc_metadata *metadata
261
262   void grpc_metadata_array_init(grpc_metadata_array *array) nogil
263   void grpc_metadata_array_destroy(grpc_metadata_array *array) nogil
264
265   ctypedef struct grpc_call_details:
266     grpc_slice method
267     grpc_slice host
268     gpr_timespec deadline
269
270   void grpc_call_details_init(grpc_call_details *details) nogil
271   void grpc_call_details_destroy(grpc_call_details *details) nogil
272
273   ctypedef enum grpc_op_type:
274     GRPC_OP_SEND_INITIAL_METADATA
275     GRPC_OP_SEND_MESSAGE
276     GRPC_OP_SEND_CLOSE_FROM_CLIENT
277     GRPC_OP_SEND_STATUS_FROM_SERVER
278     GRPC_OP_RECV_INITIAL_METADATA
279     GRPC_OP_RECV_MESSAGE
280     GRPC_OP_RECV_STATUS_ON_CLIENT
281     GRPC_OP_RECV_CLOSE_ON_SERVER
282
283   ctypedef struct grpc_op_send_initial_metadata_maybe_compression_level:
284     uint8_t is_set
285     grpc_compression_level level
286
287   ctypedef struct grpc_op_data_send_initial_metadata:
288     size_t count
289     grpc_metadata *metadata
290     grpc_op_send_initial_metadata_maybe_compression_level maybe_compression_level
291
292   ctypedef struct grpc_op_data_send_status_from_server:
293     size_t trailing_metadata_count
294     grpc_metadata *trailing_metadata
295     grpc_status_code status
296     grpc_slice *status_details
297
298   ctypedef struct grpc_op_data_recv_status_on_client:
299     grpc_metadata_array *trailing_metadata
300     grpc_status_code *status
301     grpc_slice *status_details
302     char** error_string
303
304   ctypedef struct grpc_op_data_recv_close_on_server:
305     int *cancelled
306
307   ctypedef struct grpc_op_data_send_message:
308     grpc_byte_buffer *send_message
309
310   ctypedef struct grpc_op_data_receive_message:
311     grpc_byte_buffer **receive_message "recv_message"
312
313   ctypedef struct grpc_op_data_receive_initial_metadata:
314     grpc_metadata_array *receive_initial_metadata "recv_initial_metadata"
315
316   union grpc_op_data:
317     grpc_op_data_send_initial_metadata send_initial_metadata
318     grpc_op_data_send_message send_message
319     grpc_op_data_send_status_from_server send_status_from_server
320     grpc_op_data_receive_initial_metadata receive_initial_metadata "recv_initial_metadata"
321     grpc_op_data_receive_message receive_message "recv_message"
322     grpc_op_data_recv_status_on_client receive_status_on_client "recv_status_on_client"
323     grpc_op_data_recv_close_on_server receive_close_on_server "recv_close_on_server"
324
325   ctypedef struct grpc_op:
326     grpc_op_type type "op"
327     uint32_t flags
328     grpc_op_data data
329
330   void grpc_init() nogil
331   void grpc_shutdown_blocking() nogil
332   int grpc_is_initialized() nogil
333
334   ctypedef struct grpc_completion_queue_factory:
335     pass
336
337   grpc_completion_queue_factory *grpc_completion_queue_factory_lookup(
338       const grpc_completion_queue_attributes* attributes) nogil
339   grpc_completion_queue *grpc_completion_queue_create(
340     const grpc_completion_queue_factory* factory,
341     const grpc_completion_queue_attributes* attr, void* reserved) nogil
342   grpc_completion_queue *grpc_completion_queue_create_for_next(void *reserved) nogil
343
344   grpc_event grpc_completion_queue_next(grpc_completion_queue *cq,
345                                         gpr_timespec deadline,
346                                         void *reserved) nogil
347   grpc_event grpc_completion_queue_pluck(grpc_completion_queue *cq, void *tag,
348                                          gpr_timespec deadline,
349                                          void *reserved) nogil
350   void grpc_completion_queue_shutdown(grpc_completion_queue *cq) nogil
351   void grpc_completion_queue_destroy(grpc_completion_queue *cq) nogil
352
353   grpc_call_error grpc_call_start_batch(
354       grpc_call *call, const grpc_op *ops, size_t nops, void *tag,
355       void *reserved) nogil
356   grpc_call_error grpc_call_cancel(grpc_call *call, void *reserved) nogil
357   grpc_call_error grpc_call_cancel_with_status(grpc_call *call,
358                                                grpc_status_code status,
359                                                const char *description,
360                                                void *reserved) nogil
361   char *grpc_call_get_peer(grpc_call *call) nogil
362   void grpc_call_unref(grpc_call *call) nogil
363
364   grpc_channel *grpc_insecure_channel_create(const char *target,
365                                              const grpc_channel_args *args,
366                                              void *reserved) nogil
367   grpc_call *grpc_channel_create_call(
368     grpc_channel *channel, grpc_call *parent_call, uint32_t propagation_mask,
369     grpc_completion_queue *completion_queue, grpc_slice method,
370     const grpc_slice *host, gpr_timespec deadline, void *reserved) nogil
371   grpc_connectivity_state grpc_channel_check_connectivity_state(
372       grpc_channel *channel, int try_to_connect) nogil
373   void grpc_channel_watch_connectivity_state(
374       grpc_channel *channel, grpc_connectivity_state last_observed_state,
375       gpr_timespec deadline, grpc_completion_queue *cq, void *tag) nogil
376   char *grpc_channel_get_target(grpc_channel *channel) nogil
377   void grpc_channel_destroy(grpc_channel *channel) nogil
378
379   grpc_server *grpc_server_create(
380       const grpc_channel_args *args, void *reserved) nogil
381   grpc_call_error grpc_server_request_call(
382       grpc_server *server, grpc_call **call, grpc_call_details *details,
383       grpc_metadata_array *request_metadata, grpc_completion_queue
384       *cq_bound_to_call, grpc_completion_queue *cq_for_notification, void
385       *tag_new) nogil
386   void grpc_server_register_completion_queue(grpc_server *server,
387                                              grpc_completion_queue *cq,
388                                              void *reserved) nogil
389   int grpc_server_add_insecure_http2_port(
390       grpc_server *server, const char *addr) nogil
391   void grpc_server_start(grpc_server *server) nogil
392   void grpc_server_shutdown_and_notify(
393       grpc_server *server, grpc_completion_queue *cq, void *tag) nogil
394   void grpc_server_cancel_all_calls(grpc_server *server) nogil
395   void grpc_server_destroy(grpc_server *server) nogil
396
397   char* grpc_channelz_get_top_channels(intptr_t start_channel_id)
398   char* grpc_channelz_get_servers(intptr_t start_server_id)
399   char* grpc_channelz_get_server(intptr_t server_id)
400   char* grpc_channelz_get_server_sockets(intptr_t server_id,
401                                          intptr_t start_socket_id,
402                                          intptr_t max_results)
403   char* grpc_channelz_get_channel(intptr_t channel_id)
404   char* grpc_channelz_get_subchannel(intptr_t subchannel_id)
405   char* grpc_channelz_get_socket(intptr_t socket_id)
406
407
408 cdef extern from "grpc/grpc_security.h":
409
410   # Declare this as an enum, this is the only way to make it a const in
411   # cython
412   enum: GRPC_METADATA_CREDENTIALS_PLUGIN_SYNC_MAX
413
414   ctypedef enum grpc_ssl_roots_override_result:
415     GRPC_SSL_ROOTS_OVERRIDE_OK
416     GRPC_SSL_ROOTS_OVERRIDE_FAILED_PERMANENTLY
417     GRPC_SSL_ROOTS_OVERRIDE_FAILED
418
419   ctypedef enum grpc_ssl_client_certificate_request_type:
420     GRPC_SSL_DONT_REQUEST_CLIENT_CERTIFICATE,
421     GRPC_SSL_REQUEST_CLIENT_CERTIFICATE_BUT_DONT_VERIFY
422     GRPC_SSL_REQUEST_CLIENT_CERTIFICATE_AND_VERIFY
423     GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_BUT_DONT_VERIFY
424     GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY
425
426   ctypedef enum grpc_ssl_certificate_config_reload_status:
427     GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_UNCHANGED
428     GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_NEW
429     GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_FAIL
430
431   ctypedef struct grpc_ssl_server_certificate_config:
432     # We don't care about the internals
433     pass
434
435   ctypedef struct grpc_ssl_server_credentials_options:
436     # We don't care about the internals
437     pass
438
439   grpc_ssl_server_certificate_config * grpc_ssl_server_certificate_config_create(
440     const char *pem_root_certs,
441     const grpc_ssl_pem_key_cert_pair *pem_key_cert_pairs,
442     size_t num_key_cert_pairs)
443
444   void grpc_ssl_server_certificate_config_destroy(grpc_ssl_server_certificate_config *config)
445
446   ctypedef grpc_ssl_certificate_config_reload_status (*grpc_ssl_server_certificate_config_callback)(
447     void *user_data,
448     grpc_ssl_server_certificate_config **config)
449
450   grpc_ssl_server_credentials_options *grpc_ssl_server_credentials_create_options_using_config(
451     grpc_ssl_client_certificate_request_type client_certificate_request,
452     grpc_ssl_server_certificate_config *certificate_config)
453
454   grpc_ssl_server_credentials_options* grpc_ssl_server_credentials_create_options_using_config_fetcher(
455     grpc_ssl_client_certificate_request_type client_certificate_request,
456     grpc_ssl_server_certificate_config_callback cb,
457     void *user_data)
458
459   grpc_server_credentials *grpc_ssl_server_credentials_create_with_options(
460       grpc_ssl_server_credentials_options *options)
461
462   ctypedef struct grpc_ssl_pem_key_cert_pair:
463     const char *private_key
464     const char *certificate_chain "cert_chain"
465
466   ctypedef struct grpc_channel_credentials:
467     # We don't care about the internals (and in fact don't know them)
468     pass
469
470   ctypedef struct grpc_call_credentials:
471     # We don't care about the internals (and in fact don't know them)
472     pass
473
474   ctypedef struct grpc_ssl_session_cache:
475     # We don't care about the internals (and in fact don't know them)
476     pass
477
478   ctypedef struct verify_peer_options:
479     # We don't care about the internals (and in fact don't know them)
480     pass
481
482   ctypedef void (*grpc_ssl_roots_override_callback)(char **pem_root_certs)
483
484   grpc_ssl_session_cache *grpc_ssl_session_cache_create_lru(size_t capacity)
485   void grpc_ssl_session_cache_destroy(grpc_ssl_session_cache* cache)
486
487   void grpc_set_ssl_roots_override_callback(
488       grpc_ssl_roots_override_callback cb) nogil
489
490   grpc_channel_credentials *grpc_google_default_credentials_create() nogil
491   grpc_channel_credentials *grpc_ssl_credentials_create(
492       const char *pem_root_certs, grpc_ssl_pem_key_cert_pair *pem_key_cert_pair,
493       verify_peer_options *verify_options, void *reserved) nogil
494   grpc_channel_credentials *grpc_composite_channel_credentials_create(
495       grpc_channel_credentials *creds1, grpc_call_credentials *creds2,
496       void *reserved) nogil
497   void grpc_channel_credentials_release(grpc_channel_credentials *creds) nogil
498
499   grpc_call_credentials *grpc_composite_call_credentials_create(
500       grpc_call_credentials *creds1, grpc_call_credentials *creds2,
501       void *reserved) nogil
502   grpc_call_credentials *grpc_google_compute_engine_credentials_create(
503       void *reserved) nogil
504   grpc_call_credentials *grpc_service_account_jwt_access_credentials_create(
505       const char *json_key,
506       gpr_timespec token_lifetime, void *reserved) nogil
507   grpc_call_credentials *grpc_google_refresh_token_credentials_create(
508       const char *json_refresh_token, void *reserved) nogil
509   grpc_call_credentials *grpc_google_iam_credentials_create(
510       const char *authorization_token, const char *authority_selector,
511       void *reserved) nogil
512   void grpc_call_credentials_release(grpc_call_credentials *creds) nogil
513
514   grpc_channel *grpc_secure_channel_create(
515       grpc_channel_credentials *creds, const char *target,
516       const grpc_channel_args *args, void *reserved) nogil
517
518   ctypedef struct grpc_server_credentials:
519     # We don't care about the internals (and in fact don't know them)
520     pass
521
522   void grpc_server_credentials_release(grpc_server_credentials *creds) nogil
523
524   int grpc_server_add_secure_http2_port(grpc_server *server, const char *addr,
525                                         grpc_server_credentials *creds) nogil
526
527   grpc_call_error grpc_call_set_credentials(grpc_call *call,
528                                             grpc_call_credentials *creds) nogil
529
530   ctypedef struct grpc_auth_context:
531     # We don't care about the internals (and in fact don't know them)
532     pass
533
534   ctypedef struct grpc_auth_metadata_context:
535     const char *service_url
536     const char *method_name
537     const grpc_auth_context *channel_auth_context
538
539   ctypedef void (*grpc_credentials_plugin_metadata_cb)(
540       void *user_data, const grpc_metadata *creds_md, size_t num_creds_md,
541       grpc_status_code status, const char *error_details)
542
543   ctypedef struct grpc_metadata_credentials_plugin:
544     int (*get_metadata)(
545         void *state, grpc_auth_metadata_context context,
546         grpc_credentials_plugin_metadata_cb cb, void *user_data,
547         grpc_metadata creds_md[GRPC_METADATA_CREDENTIALS_PLUGIN_SYNC_MAX],
548         size_t *num_creds_md, grpc_status_code *status,
549         const char **error_details) except *
550     void (*destroy)(void *state) except *
551     void *state
552     const char *type
553
554   grpc_call_credentials *grpc_metadata_credentials_create_from_plugin(
555       grpc_metadata_credentials_plugin plugin, void *reserved) nogil
556
557   ctypedef struct grpc_auth_property_iterator:
558     pass
559
560   ctypedef struct grpc_auth_property:
561     char *name
562     char *value
563     size_t value_length
564
565   grpc_auth_property *grpc_auth_property_iterator_next(
566       grpc_auth_property_iterator *it)
567
568   grpc_auth_property_iterator grpc_auth_context_property_iterator(
569       const grpc_auth_context *ctx)
570
571   grpc_auth_property_iterator grpc_auth_context_peer_identity(
572       const grpc_auth_context *ctx)
573
574   char *grpc_auth_context_peer_identity_property_name(
575       const grpc_auth_context *ctx)
576
577   grpc_auth_property_iterator grpc_auth_context_find_properties_by_name(
578       const grpc_auth_context *ctx, const char *name)
579
580   grpc_auth_context_peer_is_authenticated(
581       const grpc_auth_context *ctx)
582
583   grpc_auth_context *grpc_call_auth_context(grpc_call *call)
584
585   void grpc_auth_context_release(grpc_auth_context *context)
586
587 cdef extern from "grpc/compression.h":
588
589   ctypedef enum grpc_compression_algorithm:
590     GRPC_COMPRESS_NONE
591     GRPC_COMPRESS_DEFLATE
592     GRPC_COMPRESS_GZIP
593     GRPC_COMPRESS_STREAM_GZIP
594     GRPC_COMPRESS_ALGORITHMS_COUNT
595
596   ctypedef enum grpc_compression_level:
597     GRPC_COMPRESS_LEVEL_NONE
598     GRPC_COMPRESS_LEVEL_LOW
599     GRPC_COMPRESS_LEVEL_MED
600     GRPC_COMPRESS_LEVEL_HIGH
601     GRPC_COMPRESS_LEVEL_COUNT
602
603   ctypedef struct grpc_compression_options:
604     uint32_t enabled_algorithms_bitset
605
606   int grpc_compression_algorithm_parse(
607       grpc_slice value, grpc_compression_algorithm *algorithm) nogil
608   int grpc_compression_algorithm_name(grpc_compression_algorithm algorithm,
609                                       const char **name) nogil
610   grpc_compression_algorithm grpc_compression_algorithm_for_level(
611       grpc_compression_level level, uint32_t accepted_encodings) nogil
612   void grpc_compression_options_init(grpc_compression_options *opts) nogil
613   void grpc_compression_options_enable_algorithm(
614       grpc_compression_options *opts,
615       grpc_compression_algorithm algorithm) nogil
616   void grpc_compression_options_disable_algorithm(
617       grpc_compression_options *opts,
618       grpc_compression_algorithm algorithm) nogil
619   int grpc_compression_options_is_algorithm_enabled(
620       const grpc_compression_options *opts,
621       grpc_compression_algorithm algorithm) nogil
622
623 cdef extern from "grpc/impl/codegen/compression_types.h":
624
625   const char *_GRPC_COMPRESSION_REQUEST_ALGORITHM_MD_KEY \
626     "GRPC_COMPRESSION_REQUEST_ALGORITHM_MD_KEY"