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