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
|