• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright 2017 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# distutils: language=c++
15
16from libc.stdint cimport uint32_t
17
18cdef extern from "grpc/impl/codegen/slice.h":
19  struct grpc_slice_buffer:
20    int count
21
22cdef extern from "src/core/lib/iomgr/error.h":
23  struct grpc_error:
24    pass
25
26cdef extern from "src/core/lib/iomgr/gevent_util.h":
27  grpc_error* grpc_socket_error(char* error)
28  char* grpc_slice_buffer_start(grpc_slice_buffer* buffer, int i)
29  int grpc_slice_buffer_length(grpc_slice_buffer* buffer, int i)
30
31cdef extern from "src/core/lib/iomgr/sockaddr.h":
32  ctypedef struct grpc_sockaddr:
33    pass
34
35cdef extern from "src/core/lib/iomgr/resolve_address.h":
36  ctypedef struct grpc_resolved_addresses:
37    size_t naddrs
38    grpc_resolved_address* addrs
39
40  ctypedef struct grpc_resolved_address:
41    char[128] addr
42    size_t len
43
44cdef extern from "src/core/lib/iomgr/resolve_address_custom.h":
45  struct grpc_custom_resolver:
46    pass
47
48  struct grpc_custom_resolver_vtable:
49    grpc_error* (*resolve)(char* host, char* port, grpc_resolved_addresses** res);
50    void (*resolve_async)(grpc_custom_resolver* resolver, char* host, char* port);
51
52  void grpc_custom_resolve_callback(grpc_custom_resolver* resolver,
53                                    grpc_resolved_addresses* result,
54                                    grpc_error* error);
55
56cdef extern from "src/core/lib/iomgr/tcp_custom.h":
57  struct grpc_custom_socket:
58    void* impl
59    # We don't care about the rest of the fields
60  ctypedef void (*grpc_custom_connect_callback)(grpc_custom_socket* socket,
61                                             grpc_error* error)
62  ctypedef void (*grpc_custom_write_callback)(grpc_custom_socket* socket,
63                                           grpc_error* error)
64  ctypedef void (*grpc_custom_read_callback)(grpc_custom_socket* socket,
65                                          size_t nread, grpc_error* error)
66  ctypedef void (*grpc_custom_accept_callback)(grpc_custom_socket* socket,
67                                            grpc_custom_socket* client,
68                                            grpc_error* error)
69  ctypedef void (*grpc_custom_close_callback)(grpc_custom_socket* socket)
70
71  struct grpc_socket_vtable:
72      grpc_error* (*init)(grpc_custom_socket* socket, int domain);
73      void (*connect)(grpc_custom_socket* socket, const grpc_sockaddr* addr,
74                      size_t len, grpc_custom_connect_callback cb);
75      void (*destroy)(grpc_custom_socket* socket);
76      void (*shutdown)(grpc_custom_socket* socket);
77      void (*close)(grpc_custom_socket* socket, grpc_custom_close_callback cb);
78      void (*write)(grpc_custom_socket* socket, grpc_slice_buffer* slices,
79                    grpc_custom_write_callback cb);
80      void (*read)(grpc_custom_socket* socket, char* buffer, size_t length,
81                   grpc_custom_read_callback cb);
82      grpc_error* (*getpeername)(grpc_custom_socket* socket,
83                                 const grpc_sockaddr* addr, int* len);
84      grpc_error* (*getsockname)(grpc_custom_socket* socket,
85                             const grpc_sockaddr* addr, int* len);
86      grpc_error* (*bind)(grpc_custom_socket* socket, const grpc_sockaddr* addr,
87                          size_t len, int flags);
88      grpc_error* (*listen)(grpc_custom_socket* socket);
89      void (*accept)(grpc_custom_socket* socket, grpc_custom_socket* client,
90                     grpc_custom_accept_callback cb);
91
92cdef extern from "src/core/lib/iomgr/timer_custom.h":
93  struct grpc_custom_timer:
94    void* timer
95    int timeout_ms
96     # We don't care about the rest of the fields
97
98  struct grpc_custom_timer_vtable:
99    void (*start)(grpc_custom_timer* t);
100    void (*stop)(grpc_custom_timer* t);
101
102  void grpc_custom_timer_callback(grpc_custom_timer* t, grpc_error* error);
103
104cdef extern from "src/core/lib/iomgr/pollset_custom.h":
105  struct grpc_custom_poller_vtable:
106    void (*init)()
107    void (*poll)(size_t timeout_ms)
108    void (*kick)()
109    void (*shutdown)()
110
111cdef extern from "src/core/lib/iomgr/iomgr_custom.h":
112  void grpc_custom_iomgr_init(grpc_socket_vtable* socket,
113                            grpc_custom_resolver_vtable* resolver,
114                            grpc_custom_timer_vtable* timer,
115                            grpc_custom_poller_vtable* poller);
116
117cdef extern from "src/core/lib/iomgr/sockaddr_utils.h":
118  int grpc_sockaddr_get_port(const grpc_resolved_address *addr);
119  int grpc_sockaddr_to_string(char **out, const grpc_resolved_address *addr,
120                              int normalize);
121  void grpc_string_to_sockaddr(grpc_resolved_address *out, char* addr, int port);
122  int grpc_sockaddr_set_port(const grpc_resolved_address *resolved_addr,
123                             int port)
124  const char* grpc_sockaddr_get_uri_scheme(const grpc_resolved_address* resolved_addr)
125
126
127cdef class TimerWrapper:
128
129  cdef grpc_custom_timer *c_timer
130  cdef object timer
131  cdef object event
132
133cdef class SocketWrapper:
134  cdef object sockopts
135  cdef object socket
136  cdef object closed
137  cdef grpc_custom_socket *c_socket
138  cdef char* c_buffer
139  cdef size_t len
140  cdef grpc_custom_socket *accepting_socket
141
142  cdef grpc_custom_connect_callback connect_cb
143  cdef grpc_custom_write_callback write_cb
144  cdef grpc_custom_read_callback read_cb
145  cdef grpc_custom_accept_callback accept_cb
146  cdef grpc_custom_close_callback close_cb
147
148
149cdef class ResolveWrapper:
150  cdef grpc_custom_resolver *c_resolver
151  cdef char* c_host
152  cdef char* c_port
153