1# Copyright 2019 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 libcpp cimport bool as bool_t 17from libcpp.string cimport string as cppstring 18 19cdef extern from "grpc/impl/codegen/slice.h": 20 struct grpc_slice_buffer: 21 int count 22 23cdef extern from "src/core/lib/iomgr/error.h": 24 struct grpc_error: 25 pass 26 27# TODO(https://github.com/grpc/grpc/issues/20135) Change the filename 28# for something more meaningful. 29cdef extern from "src/core/lib/iomgr/python_util.h": 30 grpc_error* grpc_socket_error(char* error) 31 char* grpc_slice_buffer_start(grpc_slice_buffer* buffer, int i) 32 int grpc_slice_buffer_length(grpc_slice_buffer* buffer, int i) 33 34cdef extern from "src/core/lib/iomgr/sockaddr.h": 35 ctypedef struct grpc_sockaddr: 36 pass 37 38cdef extern from "src/core/lib/iomgr/resolve_address.h": 39 ctypedef struct grpc_resolved_addresses: 40 size_t naddrs 41 grpc_resolved_address* addrs 42 43 ctypedef struct grpc_resolved_address: 44 char[128] addr 45 size_t len 46 47cdef extern from "src/core/lib/iomgr/resolve_address_custom.h": 48 struct grpc_custom_resolver: 49 pass 50 51 struct grpc_custom_resolver_vtable: 52 grpc_error* (*resolve)(const char* host, const char* port, grpc_resolved_addresses** res); 53 void (*resolve_async)(grpc_custom_resolver* resolver, const char* host, const char* port); 54 55 void grpc_custom_resolve_callback(grpc_custom_resolver* resolver, 56 grpc_resolved_addresses* result, 57 grpc_error* error); 58 59cdef extern from "src/core/lib/iomgr/tcp_custom.h": 60 cdef int GRPC_CUSTOM_SOCKET_OPT_SO_REUSEPORT 61 62 struct grpc_custom_socket: 63 void* impl 64 # We don't care about the rest of the fields 65 ctypedef void (*grpc_custom_connect_callback)(grpc_custom_socket* socket, 66 grpc_error* error) 67 ctypedef void (*grpc_custom_write_callback)(grpc_custom_socket* socket, 68 grpc_error* error) 69 ctypedef void (*grpc_custom_read_callback)(grpc_custom_socket* socket, 70 size_t nread, grpc_error* error) 71 ctypedef void (*grpc_custom_accept_callback)(grpc_custom_socket* socket, 72 grpc_custom_socket* client, 73 grpc_error* error) 74 ctypedef void (*grpc_custom_close_callback)(grpc_custom_socket* socket) 75 76 struct grpc_socket_vtable: 77 grpc_error* (*init)(grpc_custom_socket* socket, int domain); 78 void (*connect)(grpc_custom_socket* socket, const grpc_sockaddr* addr, 79 size_t len, grpc_custom_connect_callback cb); 80 void (*destroy)(grpc_custom_socket* socket); 81 void (*shutdown)(grpc_custom_socket* socket); 82 void (*close)(grpc_custom_socket* socket, grpc_custom_close_callback cb); 83 void (*write)(grpc_custom_socket* socket, grpc_slice_buffer* slices, 84 grpc_custom_write_callback cb); 85 void (*read)(grpc_custom_socket* socket, char* buffer, size_t length, 86 grpc_custom_read_callback cb); 87 grpc_error* (*getpeername)(grpc_custom_socket* socket, 88 const grpc_sockaddr* addr, int* len); 89 grpc_error* (*getsockname)(grpc_custom_socket* socket, 90 const grpc_sockaddr* addr, int* len); 91 grpc_error* (*bind)(grpc_custom_socket* socket, const grpc_sockaddr* addr, 92 size_t len, int flags); 93 grpc_error* (*listen)(grpc_custom_socket* socket); 94 void (*accept)(grpc_custom_socket* socket, grpc_custom_socket* client, 95 grpc_custom_accept_callback cb); 96 97cdef extern from "src/core/lib/iomgr/timer_custom.h": 98 struct grpc_custom_timer: 99 void* timer 100 int timeout_ms 101 # We don't care about the rest of the fields 102 103 struct grpc_custom_timer_vtable: 104 void (*start)(grpc_custom_timer* t); 105 void (*stop)(grpc_custom_timer* t); 106 107 void grpc_custom_timer_callback(grpc_custom_timer* t, grpc_error* error); 108 109cdef extern from "src/core/lib/iomgr/pollset_custom.h": 110 struct grpc_custom_poller_vtable: 111 void (*init)() 112 void (*poll)(size_t timeout_ms) 113 void (*kick)() 114 void (*shutdown)() 115 116cdef extern from "src/core/lib/iomgr/iomgr_custom.h": 117 void grpc_custom_iomgr_init(grpc_socket_vtable* socket, 118 grpc_custom_resolver_vtable* resolver, 119 grpc_custom_timer_vtable* timer, 120 grpc_custom_poller_vtable* poller); 121 122cdef extern from "src/core/lib/iomgr/sockaddr_utils.h": 123 int grpc_sockaddr_get_port(const grpc_resolved_address *addr); 124 cppstring grpc_sockaddr_to_string(const grpc_resolved_address *addr, 125 bool_t normalize); 126 void grpc_string_to_sockaddr(grpc_resolved_address *out, char* addr, int port); 127 int grpc_sockaddr_set_port(const grpc_resolved_address *resolved_addr, 128 int port) 129 const char* grpc_sockaddr_get_uri_scheme(const grpc_resolved_address* resolved_addr) 130