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