aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/python/grpcio/grpc/_cython/_cygrpc/grpc_gevent.pxd.pxi
blob: f5688d08cdce06f7982a186ec1373af0d195e827 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
# Copyright 2017 gRPC authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# distutils: language=c++

from libc.stdint cimport uint32_t

cdef extern from "grpc/impl/codegen/slice.h":
  struct grpc_slice_buffer:
    int count

cdef extern from "src/core/lib/iomgr/error.h":
  struct grpc_error:
    pass

cdef extern from "src/core/lib/iomgr/gevent_util.h":
  grpc_error* grpc_socket_error(char* error) 
  char* grpc_slice_buffer_start(grpc_slice_buffer* buffer, int i)
  int grpc_slice_buffer_length(grpc_slice_buffer* buffer, int i)

cdef extern from "src/core/lib/iomgr/sockaddr.h":
  ctypedef struct grpc_sockaddr:
    pass

cdef extern from "src/core/lib/iomgr/resolve_address.h":
  ctypedef struct grpc_resolved_addresses:
    size_t naddrs
    grpc_resolved_address* addrs

  ctypedef struct grpc_resolved_address:
    char[128] addr
    size_t len

cdef extern from "src/core/lib/iomgr/resolve_address_custom.h":
  struct grpc_custom_resolver:
    pass

  struct grpc_custom_resolver_vtable:
    grpc_error* (*resolve)(char* host, char* port, grpc_resolved_addresses** res);
    void (*resolve_async)(grpc_custom_resolver* resolver, char* host, char* port);

  void grpc_custom_resolve_callback(grpc_custom_resolver* resolver,
                                    grpc_resolved_addresses* result,
                                    grpc_error* error);

cdef extern from "src/core/lib/iomgr/tcp_custom.h":
  struct grpc_custom_socket:
    void* impl
    # We don't care about the rest of the fields
  ctypedef void (*grpc_custom_connect_callback)(grpc_custom_socket* socket,
                                             grpc_error* error)
  ctypedef void (*grpc_custom_write_callback)(grpc_custom_socket* socket,
                                           grpc_error* error)
  ctypedef void (*grpc_custom_read_callback)(grpc_custom_socket* socket,
                                          size_t nread, grpc_error* error)
  ctypedef void (*grpc_custom_accept_callback)(grpc_custom_socket* socket,
                                            grpc_custom_socket* client,
                                            grpc_error* error)
  ctypedef void (*grpc_custom_close_callback)(grpc_custom_socket* socket)

  struct grpc_socket_vtable:
      grpc_error* (*init)(grpc_custom_socket* socket, int domain);
      void (*connect)(grpc_custom_socket* socket, const grpc_sockaddr* addr,
                      size_t len, grpc_custom_connect_callback cb);
      void (*destroy)(grpc_custom_socket* socket);
      void (*shutdown)(grpc_custom_socket* socket);
      void (*close)(grpc_custom_socket* socket, grpc_custom_close_callback cb);
      void (*write)(grpc_custom_socket* socket, grpc_slice_buffer* slices,
                    grpc_custom_write_callback cb);
      void (*read)(grpc_custom_socket* socket, char* buffer, size_t length,
                   grpc_custom_read_callback cb);
      grpc_error* (*getpeername)(grpc_custom_socket* socket,
                                 const grpc_sockaddr* addr, int* len);
      grpc_error* (*getsockname)(grpc_custom_socket* socket,
                             const grpc_sockaddr* addr, int* len);
      grpc_error* (*bind)(grpc_custom_socket* socket, const grpc_sockaddr* addr,
                          size_t len, int flags);
      grpc_error* (*listen)(grpc_custom_socket* socket);
      void (*accept)(grpc_custom_socket* socket, grpc_custom_socket* client,
                     grpc_custom_accept_callback cb);

cdef extern from "src/core/lib/iomgr/timer_custom.h":
  struct grpc_custom_timer:
    void* timer
    int timeout_ms
     # We don't care about the rest of the fields

  struct grpc_custom_timer_vtable:
    void (*start)(grpc_custom_timer* t);
    void (*stop)(grpc_custom_timer* t);

  void grpc_custom_timer_callback(grpc_custom_timer* t, grpc_error* error);

cdef extern from "src/core/lib/iomgr/pollset_custom.h":
  struct grpc_custom_poller_vtable:
    void (*init)()
    void (*poll)(size_t timeout_ms)
    void (*kick)()
    void (*shutdown)()

cdef extern from "src/core/lib/iomgr/iomgr_custom.h":
  void grpc_custom_iomgr_init(grpc_socket_vtable* socket,
                            grpc_custom_resolver_vtable* resolver,
                            grpc_custom_timer_vtable* timer,
                            grpc_custom_poller_vtable* poller);

cdef extern from "src/core/lib/iomgr/sockaddr_utils.h":
  int grpc_sockaddr_get_port(const grpc_resolved_address *addr);
  int grpc_sockaddr_to_string(char **out, const grpc_resolved_address *addr,
                              int normalize);
  void grpc_string_to_sockaddr(grpc_resolved_address *out, char* addr, int port);
  int grpc_sockaddr_set_port(const grpc_resolved_address *resolved_addr,
                             int port)
  const char* grpc_sockaddr_get_uri_scheme(const grpc_resolved_address* resolved_addr)


cdef class TimerWrapper:

  cdef grpc_custom_timer *c_timer
  cdef object timer
  cdef object event

cdef class SocketWrapper:
  cdef object sockopts
  cdef object socket
  cdef object closed
  cdef grpc_custom_socket *c_socket
  cdef char* c_buffer
  cdef size_t len
  cdef grpc_custom_socket *accepting_socket

  cdef grpc_custom_connect_callback connect_cb
  cdef grpc_custom_write_callback write_cb
  cdef grpc_custom_read_callback read_cb
  cdef grpc_custom_accept_callback accept_cb
  cdef grpc_custom_close_callback close_cb


cdef class ResolveWrapper:
  cdef grpc_custom_resolver *c_resolver
  cdef char* c_host
  cdef char* c_port