secure_endpoint_test.cc
Go to the documentation of this file.
1 /*
2  *
3  * Copyright 2015 gRPC authors.
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  */
18 
20 
21 #include <fcntl.h>
22 #include <sys/types.h>
23 
24 #include <grpc/grpc.h>
25 #include <grpc/support/alloc.h>
26 #include <grpc/support/log.h>
27 
35 
36 static gpr_mu* g_mu;
38 
39 #define TSI_FAKE_FRAME_HEADER_SIZE 4
40 
41 typedef struct intercept_endpoint {
46 
48  grpc_closure* cb, bool urgent, int min_progress_size) {
49  intercept_endpoint* m = reinterpret_cast<intercept_endpoint*>(ep);
50  grpc_endpoint_read(m->wrapped_ep, slices, cb, urgent, min_progress_size);
51 }
52 
54  grpc_closure* cb, void* arg, int max_frame_size) {
55  intercept_endpoint* m = reinterpret_cast<intercept_endpoint*>(ep);
56  int remaining = slices->length;
57  while (remaining > 0) {
58  // Estimate the frame size of the next frame.
59  int next_frame_size =
61  GPR_ASSERT(next_frame_size > TSI_FAKE_FRAME_HEADER_SIZE);
62  // Ensure the protected data size does not exceed the max_frame_size.
63  GPR_ASSERT(next_frame_size - TSI_FAKE_FRAME_HEADER_SIZE <= max_frame_size);
64  // Move this frame into a staging buffer and repeat.
65  grpc_slice_buffer_move_first(slices, next_frame_size, &m->staging_buffer);
66  remaining -= next_frame_size;
67  }
68  grpc_slice_buffer_swap(&m->staging_buffer, slices);
69  grpc_endpoint_write(m->wrapped_ep, slices, cb, arg, max_frame_size);
70 }
71 
72 static void me_add_to_pollset(grpc_endpoint* /*ep*/,
73  grpc_pollset* /*pollset*/) {}
74 
76  grpc_pollset_set* /*pollset*/) {}
77 
79  grpc_pollset_set* /*pollset*/) {}
80 
82  intercept_endpoint* m = reinterpret_cast<intercept_endpoint*>(ep);
83  grpc_endpoint_shutdown(m->wrapped_ep, why);
84 }
85 
86 static void me_destroy(grpc_endpoint* ep) {
87  intercept_endpoint* m = reinterpret_cast<intercept_endpoint*>(ep);
88  grpc_endpoint_destroy(m->wrapped_ep);
89  grpc_slice_buffer_destroy(&m->staging_buffer);
90  gpr_free(m);
91 }
92 
94  return "fake:intercept-endpoint";
95 }
96 
98  return "fake:intercept-endpoint";
99 }
100 
101 static int me_get_fd(grpc_endpoint* /*ep*/) { return -1; }
102 
103 static bool me_can_track_err(grpc_endpoint* /*ep*/) { return false; }
104 
106  me_write,
110  me_shutdown,
111  me_destroy,
112  me_get_peer,
114  me_get_fd,
116 
119  static_cast<intercept_endpoint*>(gpr_malloc(sizeof(*m)));
120  m->base.vtable = &vtable;
121  m->wrapped_ep = wrapped_ep;
122  grpc_slice_buffer_init(&m->staging_buffer);
123  return &m->base;
124 }
125 
127  size_t slice_size, grpc_slice* leftover_slices, size_t leftover_nslices,
128  bool use_zero_copy_protector) {
130  tsi_frame_protector* fake_read_protector =
132  tsi_frame_protector* fake_write_protector =
134  tsi_zero_copy_grpc_protector* fake_read_zero_copy_protector =
135  use_zero_copy_protector
137  : nullptr;
138  tsi_zero_copy_grpc_protector* fake_write_zero_copy_protector =
139  use_zero_copy_protector
141  : nullptr;
144 
145  grpc_arg a[2];
146  a[0].key = const_cast<char*>(GRPC_ARG_TCP_READ_CHUNK_SIZE);
147  a[0].type = GRPC_ARG_INTEGER;
148  a[0].value.integer = static_cast<int>(slice_size);
149  a[1].key = const_cast<char*>(GRPC_ARG_RESOURCE_QUOTA);
150  a[1].type = GRPC_ARG_POINTER;
151  a[1].value.pointer.p = grpc_resource_quota_create("test");
152  a[1].value.pointer.vtable = grpc_resource_quota_arg_vtable();
157 
158  // TODO(vigneshbabu): Extend the intercept endpoint logic to cover non-zero
159  // copy based frame protectors as well.
160  if (use_zero_copy_protector && leftover_nslices == 0) {
161  tcp.client = wrap_with_intercept_endpoint(tcp.client);
162  tcp.server = wrap_with_intercept_endpoint(tcp.server);
163  }
164 
165  if (leftover_nslices == 0) {
166  f.client_ep = grpc_secure_endpoint_create(fake_read_protector,
167  fake_read_zero_copy_protector,
168  tcp.client, nullptr, &args, 0);
169  } else {
170  unsigned i;
172  size_t still_pending_size;
173  size_t total_buffer_size = 8192;
174  size_t buffer_size = total_buffer_size;
175  uint8_t* encrypted_buffer = static_cast<uint8_t*>(gpr_malloc(buffer_size));
176  uint8_t* cur = encrypted_buffer;
177  grpc_slice encrypted_leftover;
178  for (i = 0; i < leftover_nslices; i++) {
179  grpc_slice plain = leftover_slices[i];
180  uint8_t* message_bytes = GRPC_SLICE_START_PTR(plain);
181  size_t message_size = GRPC_SLICE_LENGTH(plain);
182  while (message_size > 0) {
183  size_t protected_buffer_size_to_send = buffer_size;
184  size_t processed_message_size = message_size;
186  fake_write_protector, message_bytes, &processed_message_size, cur,
187  &protected_buffer_size_to_send);
189  message_bytes += processed_message_size;
190  message_size -= processed_message_size;
191  cur += protected_buffer_size_to_send;
192  GPR_ASSERT(buffer_size >= protected_buffer_size_to_send);
193  buffer_size -= protected_buffer_size_to_send;
194  }
195  grpc_slice_unref(plain);
196  }
197  do {
198  size_t protected_buffer_size_to_send = buffer_size;
199  result = tsi_frame_protector_protect_flush(fake_write_protector, cur,
200  &protected_buffer_size_to_send,
201  &still_pending_size);
203  cur += protected_buffer_size_to_send;
204  GPR_ASSERT(buffer_size >= protected_buffer_size_to_send);
205  buffer_size -= protected_buffer_size_to_send;
206  } while (still_pending_size > 0);
207  encrypted_leftover = grpc_slice_from_copied_buffer(
208  reinterpret_cast<const char*>(encrypted_buffer),
209  total_buffer_size - buffer_size);
210  f.client_ep = grpc_secure_endpoint_create(
211  fake_read_protector, fake_read_zero_copy_protector, tcp.client,
212  &encrypted_leftover, &args, 1);
213  grpc_slice_unref(encrypted_leftover);
214  gpr_free(encrypted_buffer);
215  }
216 
217  f.server_ep = grpc_secure_endpoint_create(fake_write_protector,
218  fake_write_zero_copy_protector,
219  tcp.server, nullptr, &args, 0);
221  static_cast<grpc_resource_quota*>(a[1].value.pointer.p));
222  return f;
223 }
224 
227  return secure_endpoint_create_fixture_tcp_socketpair(slice_size, nullptr, 0,
228  false);
229 }
230 
233  size_t slice_size) {
234  return secure_endpoint_create_fixture_tcp_socketpair(slice_size, nullptr, 0,
235  true);
236 }
237 
240  grpc_slice s =
241  grpc_slice_from_copied_string("hello world 12345678900987654321");
242  return secure_endpoint_create_fixture_tcp_socketpair(slice_size, &s, 1,
243  false);
244 }
245 
248  size_t slice_size) {
249  grpc_slice s =
250  grpc_slice_from_copied_string("hello world 12345678900987654321");
251  return secure_endpoint_create_fixture_tcp_socketpair(slice_size, &s, 1, true);
252 }
253 
254 static void clean_up(void) {}
255 
257  {"secure_ep/tcp_socketpair",
259  {"secure_ep/tcp_socketpair_zero_copy",
261  clean_up},
262  {"secure_ep/tcp_socketpair_leftover",
264  {"secure_ep/tcp_socketpair_leftover_zero_copy",
266  clean_up},
267 };
268 
269 static void inc_call_ctr(void* arg, grpc_error_handle /*error*/) {
270  ++*static_cast<int*>(arg);
271 }
272 
273 static void test_leftover(grpc_endpoint_test_config config, size_t slice_size) {
274  grpc_endpoint_test_fixture f = config.create_fixture(slice_size);
276  grpc_slice s =
277  grpc_slice_from_copied_string("hello world 12345678900987654321");
279  int n = 0;
280  grpc_closure done_closure;
281  gpr_log(GPR_INFO, "Start test left over");
282 
284  GRPC_CLOSURE_INIT(&done_closure, inc_call_ctr, &n, grpc_schedule_on_exec_ctx);
285  grpc_endpoint_read(f.client_ep, &incoming, &done_closure, /*urgent=*/false,
286  /*min_progress_size=*/1);
287 
289  GPR_ASSERT(n == 1);
290  GPR_ASSERT(incoming.count == 1);
291  GPR_ASSERT(grpc_slice_eq(s, incoming.slices[0]));
292 
294  f.client_ep, GRPC_ERROR_CREATE_FROM_STATIC_STRING("test_leftover end"));
296  f.server_ep, GRPC_ERROR_CREATE_FROM_STATIC_STRING("test_leftover end"));
297  grpc_endpoint_destroy(f.client_ep);
298  grpc_endpoint_destroy(f.server_ep);
299 
302 
303  clean_up();
304 }
305 
306 static void destroy_pollset(void* p, grpc_error_handle /*error*/) {
307  grpc_pollset_destroy(static_cast<grpc_pollset*>(p));
308 }
309 
310 int main(int argc, char** argv) {
311  grpc_closure destroyed;
312  grpc::testing::TestEnvironment env(&argc, argv);
313  grpc_init();
314 
315  {
321  test_leftover(configs[2], 1);
322  test_leftover(configs[3], 1);
324  grpc_schedule_on_exec_ctx);
325  grpc_pollset_shutdown(g_pollset, &destroyed);
326  }
327 
328  grpc_shutdown();
329 
331 
332  return 0;
333 }
GRPC_CLOSURE_INIT
#define GRPC_CLOSURE_INIT(closure, cb, cb_arg, scheduler)
Definition: closure.h:115
grpc_arg
Definition: grpc_types.h:103
grpc_slice_unref
GPRAPI void grpc_slice_unref(grpc_slice s)
Definition: slice_api.cc:32
_gevent_test_main.result
result
Definition: _gevent_test_main.py:96
GPR_INFO
#define GPR_INFO
Definition: include/grpc/impl/codegen/log.h:56
grpc_pollset_size
size_t grpc_pollset_size(void)
Definition: pollset.cc:56
iomgr.h
grpc_endpoint_vtable
Definition: endpoint.h:39
grpc_slice_buffer_destroy
GPRAPI void grpc_slice_buffer_destroy(grpc_slice_buffer *sb)
Definition: slice_buffer_api.cc:27
incoming
static uv_pipe_t incoming[4]
Definition: test-pipe-sendmsg.c:38
intercept_endpoint
Definition: secure_endpoint_test.cc:41
log.h
me_get_fd
static int me_get_fd(grpc_endpoint *)
Definition: secure_endpoint_test.cc:101
intercept_endpoint::base
grpc_endpoint base
Definition: secure_endpoint_test.cc:42
grpc_endpoint_test_config
Definition: endpoint_tests.h:34
generate.env
env
Definition: generate.py:37
GRPC_ARG_INTEGER
@ GRPC_ARG_INTEGER
Definition: grpc_types.h:81
intercept_endpoint::wrapped_ep
grpc_endpoint * wrapped_ep
Definition: secure_endpoint_test.cc:43
grpc_resource_quota
struct grpc_resource_quota grpc_resource_quota
Definition: grpc_types.h:729
grpc_slice_from_copied_string
GPRAPI grpc_slice grpc_slice_from_copied_string(const char *source)
Definition: slice/slice.cc:177
grpc_endpoint_tests
void grpc_endpoint_tests(grpc_endpoint_test_config config, grpc_pollset *pollset, gpr_mu *mu)
Definition: endpoint_tests.cc:345
vtable
static const grpc_endpoint_vtable vtable
Definition: secure_endpoint_test.cc:105
intercept_endpoint::staging_buffer
grpc_slice_buffer staging_buffer
Definition: secure_endpoint_test.cc:44
GRPC_ARG_RESOURCE_QUOTA
#define GRPC_ARG_RESOURCE_QUOTA
Definition: grpc_types.h:299
inc_call_ctr
static void inc_call_ctr(void *arg, grpc_error_handle)
Definition: secure_endpoint_test.cc:269
grpc_pollset_set
struct grpc_pollset_set grpc_pollset_set
Definition: iomgr_fwd.h:23
absl::string_view
Definition: abseil-cpp/absl/strings/string_view.h:167
gpr_free
GPRAPI void gpr_free(void *ptr)
Definition: alloc.cc:51
grpc_endpoint_read
void grpc_endpoint_read(grpc_endpoint *ep, grpc_slice_buffer *slices, grpc_closure *cb, bool urgent, int min_progress_size)
Definition: endpoint.cc:25
useful.h
me_read
static void me_read(grpc_endpoint *ep, grpc_slice_buffer *slices, grpc_closure *cb, bool urgent, int min_progress_size)
Definition: secure_endpoint_test.cc:47
tcp
static uv_tcp_t tcp
Definition: test-connection-fail.c:29
gpr_malloc
GPRAPI void * gpr_malloc(size_t size)
Definition: alloc.cc:29
grpc_resource_quota_create
GRPCAPI grpc_resource_quota * grpc_resource_quota_create(const char *trace_name)
Definition: api.cc:66
main
int main(int argc, char **argv)
Definition: secure_endpoint_test.cc:310
secure_endpoint.h
secure_endpoint_create_fixture_tcp_socketpair_noleftover_zero_copy
static grpc_endpoint_test_fixture secure_endpoint_create_fixture_tcp_socketpair_noleftover_zero_copy(size_t slice_size)
Definition: secure_endpoint_test.cc:232
a
int a
Definition: abseil-cpp/absl/container/internal/hash_policy_traits_test.cc:88
xds_manager.p
p
Definition: xds_manager.py:60
uint8_t
unsigned char uint8_t
Definition: stdint-msvc2008.h:78
clean_up
static void clean_up(void)
Definition: secure_endpoint_test.cc:254
grpc_channel_args
Definition: grpc_types.h:132
me_add_to_pollset_set
static void me_add_to_pollset_set(grpc_endpoint *, grpc_pollset_set *)
Definition: secure_endpoint_test.cc:75
tsi_frame_protector_protect_flush
tsi_result tsi_frame_protector_protect_flush(tsi_frame_protector *self, unsigned char *protected_output_frames, size_t *protected_output_frames_size, size_t *still_pending_size)
Definition: transport_security.cc:104
grpc_pollset_init
void grpc_pollset_init(grpc_pollset *pollset, gpr_mu **mu)
Definition: pollset.cc:33
gpr_zalloc
GPRAPI void * gpr_zalloc(size_t size)
Definition: alloc.cc:40
endpoint_pair.h
TSI_OK
@ TSI_OK
Definition: transport_security_interface.h:32
autogen_x86imm.f
f
Definition: autogen_x86imm.py:9
asyncio_get_stats.args
args
Definition: asyncio_get_stats.py:40
GPR_ASSERT
#define GPR_ASSERT(x)
Definition: include/grpc/impl/codegen/log.h:94
destroy_pollset
static void destroy_pollset(void *p, grpc_error_handle)
Definition: secure_endpoint_test.cc:306
grpc_core::ExecCtx::Flush
bool Flush()
Definition: exec_ctx.cc:69
grpc_resource_quota_arg_vtable
const GRPCAPI grpc_arg_pointer_vtable * grpc_resource_quota_arg_vtable(void)
Definition: api.cc:62
intercept_endpoint
struct intercept_endpoint intercept_endpoint
grpc_secure_endpoint_create
grpc_endpoint * grpc_secure_endpoint_create(struct tsi_frame_protector *protector, struct tsi_zero_copy_grpc_protector *zero_copy_protector, grpc_endpoint *to_wrap, grpc_slice *leftover_slices, const grpc_channel_args *channel_args, size_t leftover_nslices)
Definition: secure_endpoint.cc:563
gpr_log
GPRAPI void gpr_log(const char *file, int line, gpr_log_severity severity, const char *format,...) GPR_PRINT_FORMAT_CHECK(4
grpc.h
me_delete_from_pollset_set
static void me_delete_from_pollset_set(grpc_endpoint *, grpc_pollset_set *)
Definition: secure_endpoint_test.cc:78
tsi_result
tsi_result
Definition: transport_security_interface.h:31
GRPC_SLICE_START_PTR
#define GRPC_SLICE_START_PTR(slice)
Definition: include/grpc/impl/codegen/slice.h:101
arg
Definition: cmdline.cc:40
grpc_slice
Definition: include/grpc/impl/codegen/slice.h:65
grpc_slice_buffer_swap
GPRAPI void grpc_slice_buffer_swap(grpc_slice_buffer *a, grpc_slice_buffer *b)
Definition: slice/slice_buffer.cc:249
grpc_endpoint_shutdown
void grpc_endpoint_shutdown(grpc_endpoint *ep, grpc_error_handle why)
Definition: endpoint.cc:49
slice_internal.h
grpc_endpoint_destroy
void grpc_endpoint_destroy(grpc_endpoint *ep)
Definition: endpoint.cc:53
grpc_core::ExecCtx
Definition: exec_ctx.h:97
me_get_peer
static absl::string_view me_get_peer(grpc_endpoint *)
Definition: secure_endpoint_test.cc:93
n
int n
Definition: abseil-cpp/absl/container/btree_test.cc:1080
grpc_slice_buffer_init
GPRAPI void grpc_slice_buffer_init(grpc_slice_buffer *sb)
Definition: slice/slice_buffer.cc:116
configs
static grpc_endpoint_test_config configs[]
Definition: secure_endpoint_test.cc:256
secure_endpoint_create_fixture_tcp_socketpair
static grpc_endpoint_test_fixture secure_endpoint_create_fixture_tcp_socketpair(size_t slice_size, grpc_slice *leftover_slices, size_t leftover_nslices, bool use_zero_copy_protector)
Definition: secure_endpoint_test.cc:126
secure_endpoint_create_fixture_tcp_socketpair_leftover_zero_copy
static grpc_endpoint_test_fixture secure_endpoint_create_fixture_tcp_socketpair_leftover_zero_copy(size_t slice_size)
Definition: secure_endpoint_test.cc:247
secure_endpoint_create_fixture_tcp_socketpair_noleftover
static grpc_endpoint_test_fixture secure_endpoint_create_fixture_tcp_socketpair_noleftover(size_t slice_size)
Definition: secure_endpoint_test.cc:226
GRPC_ERROR_CREATE_FROM_STATIC_STRING
#define GRPC_ERROR_CREATE_FROM_STATIC_STRING(desc)
Definition: error.h:291
GRPC_SLICE_LENGTH
#define GRPC_SLICE_LENGTH(slice)
Definition: include/grpc/impl/codegen/slice.h:104
test_config.h
value
const char * value
Definition: hpack_parser_table.cc:165
memory_diff.cur
def cur
Definition: memory_diff.py:83
me_destroy
static void me_destroy(grpc_endpoint *ep)
Definition: secure_endpoint_test.cc:86
GPR_ARRAY_SIZE
#define GPR_ARRAY_SIZE(array)
Definition: useful.h:129
grpc_slice_from_copied_buffer
GPRAPI grpc_slice grpc_slice_from_copied_buffer(const char *source, size_t len)
Definition: slice/slice.cc:170
me_get_local_address
static absl::string_view me_get_local_address(grpc_endpoint *)
Definition: secure_endpoint_test.cc:97
gpr_mu
pthread_mutex_t gpr_mu
Definition: impl/codegen/sync_posix.h:47
tsi_create_fake_zero_copy_grpc_protector
tsi_zero_copy_grpc_protector * tsi_create_fake_zero_copy_grpc_protector(size_t *max_protected_frame_size)
Definition: fake_transport_security.cc:808
exec_ctx
grpc_core::ExecCtx exec_ctx
Definition: end2end_binder_transport_test.cc:75
test_leftover
static void test_leftover(grpc_endpoint_test_config config, size_t slice_size)
Definition: secure_endpoint_test.cc:273
grpc_pollset_shutdown
void grpc_pollset_shutdown(grpc_pollset *pollset, grpc_closure *closure)
Definition: pollset.cc:37
tsi_frame_protector_protect
tsi_result tsi_frame_protector_protect(tsi_frame_protector *self, const unsigned char *unprotected_bytes, size_t *unprotected_bytes_size, unsigned char *protected_output_frames, size_t *protected_output_frames_size)
Definition: transport_security.cc:87
grpc_resource_quota_unref
GRPCAPI void grpc_resource_quota_unref(grpc_resource_quota *resource_quota)
Definition: api.cc:79
grpc_endpoint_test_fixture
Definition: endpoint_tests.h:29
alloc.h
me_shutdown
static void me_shutdown(grpc_endpoint *ep, grpc_error_handle why)
Definition: secure_endpoint_test.cc:81
grpc_iomgr_create_endpoint_pair
grpc_endpoint_pair grpc_iomgr_create_endpoint_pair(const char *name, grpc_channel_args *args)
grpc::testing::TestEnvironment
Definition: test/core/util/test_config.h:54
slices
SliceBuffer * slices
Definition: retry_filter.cc:631
arg
struct arg arg
endpoint_tests.h
tsi_create_fake_frame_protector
tsi_frame_protector * tsi_create_fake_frame_protector(size_t *max_protected_frame_size)
Definition: fake_transport_security.cc:797
grpc_slice_buffer_move_first
GPRAPI void grpc_slice_buffer_move_first(grpc_slice_buffer *src, size_t n, grpc_slice_buffer *dst)
Definition: slice/slice_buffer.cc:348
wrap_with_intercept_endpoint
grpc_endpoint * wrap_with_intercept_endpoint(grpc_endpoint *wrapped_ep)
Definition: secure_endpoint_test.cc:117
config_s
Definition: bloaty/third_party/zlib/deflate.c:120
me_add_to_pollset
static void me_add_to_pollset(grpc_endpoint *, grpc_pollset *)
Definition: secure_endpoint_test.cc:72
tsi_fake_zero_copy_grpc_protector_next_frame_size
uint32_t tsi_fake_zero_copy_grpc_protector_next_frame_size(const grpc_slice_buffer *protected_slices)
Definition: fake_transport_security.cc:146
secure_endpoint_create_fixture_tcp_socketpair_leftover
static grpc_endpoint_test_fixture secure_endpoint_create_fixture_tcp_socketpair_leftover(size_t slice_size)
Definition: secure_endpoint_test.cc:239
grpc_slice_buffer_destroy_internal
void grpc_slice_buffer_destroy_internal(grpc_slice_buffer *sb)
Definition: slice/slice_buffer.cc:123
grpc_endpoint_write
void grpc_endpoint_write(grpc_endpoint *ep, grpc_slice_buffer *slices, grpc_closure *cb, void *arg, int max_frame_size)
Definition: endpoint.cc:30
TSI_FAKE_FRAME_HEADER_SIZE
#define TSI_FAKE_FRAME_HEADER_SIZE
Definition: secure_endpoint_test.cc:39
grpc_slice_buffer
Definition: include/grpc/impl/codegen/slice.h:83
tsi_frame_protector
Definition: transport_security.h:51
GRPC_ARG_POINTER
@ GRPC_ARG_POINTER
Definition: grpc_types.h:82
tsi_zero_copy_grpc_protector
Definition: transport_security_grpc.h:79
grpc_init
GRPCAPI void grpc_init(void)
Definition: init.cc:146
g_mu
static gpr_mu * g_mu
Definition: secure_endpoint_test.cc:36
grpc_error
Definition: error_internal.h:42
GRPC_ARG_TCP_READ_CHUNK_SIZE
#define GRPC_ARG_TCP_READ_CHUNK_SIZE
Definition: grpc_types.h:330
grpc_endpoint_pair
Definition: endpoint_pair.h:26
grpc_endpoint_add_to_pollset
void grpc_endpoint_add_to_pollset(grpc_endpoint *ep, grpc_pollset *pollset)
Definition: endpoint.cc:35
regress.m
m
Definition: regress/regress.py:25
fake_transport_security.h
grpc_pollset
Definition: bm_cq_multiple_threads.cc:37
grpc_pollset_destroy
void grpc_pollset_destroy(grpc_pollset *pollset)
Definition: pollset.cc:41
grpc_closure
Definition: closure.h:56
versiongenerate.buffer_size
int buffer_size
Definition: bloaty/third_party/protobuf/third_party/googletest/googletest/xcode/Scripts/versiongenerate.py:65
grpc_slice_eq
GPRAPI int grpc_slice_eq(grpc_slice a, grpc_slice b)
Definition: slice/slice.cc:387
grpc_endpoint
Definition: endpoint.h:105
grpc_shutdown
GRPCAPI void grpc_shutdown(void)
Definition: init.cc:209
me_can_track_err
static bool me_can_track_err(grpc_endpoint *)
Definition: secure_endpoint_test.cc:103
cb
OPENSSL_EXPORT pem_password_cb * cb
Definition: pem.h:351
grpc_core::ExecCtx::Get
static ExecCtx * Get()
Definition: exec_ctx.h:205
i
uint64_t i
Definition: abseil-cpp/absl/container/btree_benchmark.cc:230
grpc_slice_unref_internal
void grpc_slice_unref_internal(const grpc_slice &slice)
Definition: slice_refcount.h:39
g_pollset
static grpc_pollset * g_pollset
Definition: secure_endpoint_test.cc:37
me_write
static void me_write(grpc_endpoint *ep, grpc_slice_buffer *slices, grpc_closure *cb, void *arg, int max_frame_size)
Definition: secure_endpoint_test.cc:53


grpc
Author(s):
autogenerated on Thu Mar 13 2025 03:01:15