bad_client.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 <limits.h>
22 #include <stdio.h>
23 
24 #include <grpc/support/alloc.h>
26 #include <grpc/support/sync.h>
27 
33 #include "src/core/lib/gprpp/thd.h"
40 
41 #define MIN_HTTP2_FRAME_SIZE 9
42 
43 /* Args to provide to thread running server side validator */
44 typedef struct {
50 } thd_args;
51 
52 /* Run the server side validator and set done_thd once done */
53 static void thd_func(void* arg) {
54  thd_args* a = static_cast<thd_args*>(arg);
55  if (a->validator != nullptr) {
56  a->validator(a->server, a->cq, a->registered_method);
57  }
58  gpr_event_set(&a->done_thd, reinterpret_cast<void*>(1));
59 }
60 
61 /* Sets the done_write event */
62 static void set_done_write(void* arg, grpc_error_handle /*error*/) {
63  gpr_event* done_write = static_cast<gpr_event*>(arg);
64  gpr_event_set(done_write, reinterpret_cast<void*>(1));
65 }
66 
68  thd_args* a = static_cast<thd_args*>(ts);
70  grpc_core::Server* core_server = grpc_core::Server::FromC(a->server);
72  "SetupTransport",
73  core_server->SetupTransport(transport, /*accepting_pollset=*/nullptr,
74  core_server->channel_args(),
75  /*socket_node=*/nullptr)));
76 }
77 
78 /* Sets the read_done event */
79 static void set_read_done(void* arg, grpc_error_handle /*error*/) {
80  gpr_event* read_done = static_cast<gpr_event*>(arg);
81  gpr_event_set(read_done, reinterpret_cast<void*>(1));
82 }
83 
84 /* shutdown client */
86  if (*client_fd != nullptr) {
88  *client_fd, GRPC_ERROR_CREATE_FROM_STATIC_STRING("Forced Disconnect"));
91  *client_fd = nullptr;
92  }
93 }
94 
95 /* Runs client side validator */
97  grpc_endpoint_pair* sfd,
98  grpc_completion_queue* client_cq) {
99  char* hex;
101  if (arg->client_payload_length < 4 * 1024) {
102  hex = gpr_dump(arg->client_payload, arg->client_payload_length,
104  /* Add a debug log */
105  gpr_log(GPR_INFO, "TEST: %s", hex);
106  gpr_free(hex);
107  } else {
108  gpr_log(GPR_INFO, "TEST: (%" PRIdPTR " byte long string)",
109  arg->client_payload_length);
110  }
111 
113  arg->client_payload_length);
114  grpc_slice_buffer outgoing;
115  grpc_closure done_write_closure;
117 
118  grpc_slice_buffer_init(&outgoing);
119  grpc_slice_buffer_add(&outgoing, slice);
120  GRPC_CLOSURE_INIT(&done_write_closure, set_done_write, &done_write,
121  grpc_schedule_on_exec_ctx);
122 
123  /* Write data */
124  grpc_endpoint_write(sfd->client, &outgoing, &done_write_closure, nullptr,
125  /*max_frame_size=*/INT_MAX);
127 
128  /* Await completion, unless the request is large and write may not finish
129  * before the peer shuts down. */
131  GPR_ASSERT(
133  }
134 
136  shutdown_client(&sfd->client);
137  }
138 
139  if (sfd->client != nullptr) {
140  /* Validate client stream, if requested. */
141  if (arg->client_validator != nullptr) {
145  /* We may need to do multiple reads to read the complete server
146  * response. */
147  while (true) {
148  gpr_event read_done_event;
149  gpr_event_init(&read_done_event);
150  grpc_closure read_done_closure;
151  GRPC_CLOSURE_INIT(&read_done_closure, set_read_done, &read_done_event,
152  grpc_schedule_on_exec_ctx);
153  grpc_endpoint_read(sfd->client, &incoming, &read_done_closure,
154  /*urgent=*/true, /*min_progress_size=*/1);
156  do {
157  GPR_ASSERT(gpr_time_cmp(deadline, gpr_now(deadline.clock_type)) > 0);
158  /* Perform a cq next just to provide a thread that can read incoming
159  bytes on the client fd */
162  nullptr)
164  } while (!gpr_event_get(&read_done_event));
165  if (arg->client_validator(&incoming, arg->client_validator_arg)) break;
167  "client validator failed; trying additional read "
168  "in case we didn't get all the data");
169  }
171  }
173  }
174 
175  /* If the request was too large, then we need to forcefully shut down the
176  * client, so that the write can be considered completed */
178  shutdown_client(&sfd->client);
179  }
180 
181  /* Make sure that the client is done writing */
182  while (!gpr_event_get(&done_write)) {
183  GPR_ASSERT(
185  client_cq, grpc_timeout_milliseconds_to_deadline(100), nullptr)
187  }
188 
191 }
192 
194  grpc_bad_client_server_side_validator server_validator,
195  grpc_bad_client_arg args[], int num_args, uint32_t flags) {
196  grpc_endpoint_pair sfd;
197  thd_args a;
200  grpc_completion_queue* shutdown_cq;
201  grpc_completion_queue* client_cq;
202 
203  /* Init grpc */
204  grpc_init();
205 
206  sfd = grpc_iomgr_create_endpoint_pair("fixture", nullptr);
207  /* Create server, completion events */
208  a.server = grpc_server_create(nullptr, nullptr);
210  client_cq = grpc_completion_queue_create_for_next(nullptr);
211  grpc_server_register_completion_queue(a.server, a.cq, nullptr);
212  a.registered_method =
216  grpc_server_start(a.server);
219  .PreconditionChannelArgs(nullptr)
220  .ToC();
221  transport = grpc_create_chttp2_transport(channel_args, sfd.server, false);
222  grpc_channel_args_destroy(channel_args);
224  grpc_chttp2_transport_start_reading(transport, nullptr, nullptr, nullptr);
225 
226  /* Bind fds to pollsets */
229 
230  /* Check a ground truth */
232 
233  gpr_event_init(&a.done_thd);
234  a.validator = server_validator;
235  /* Start validator */
236 
237  grpc_core::Thread server_validator_thd("grpc_bad_client", thd_func, &a);
238  server_validator_thd.Start();
239  for (int i = 0; i < num_args; i++) {
240  grpc_run_client_side_validator(&args[i], i == (num_args - 1) ? flags : 0,
241  &sfd, client_cq);
242  }
243  /* Wait for server thread to finish */
245 
246  /* Shutdown. */
247  shutdown_client(&sfd.client);
248  server_validator_thd.Join();
249  shutdown_cq = grpc_completion_queue_create_for_pluck(nullptr);
250  grpc_server_shutdown_and_notify(a.server, shutdown_cq, nullptr);
251  GPR_ASSERT(grpc_completion_queue_pluck(shutdown_cq, nullptr,
253  nullptr)
254  .type == GRPC_OP_COMPLETE);
255  grpc_completion_queue_destroy(shutdown_cq);
256  grpc_server_destroy(a.server);
259  grpc_shutdown();
260 }
261 
263  void* /*arg*/) {
264  if (incoming->count < 1) {
265  return false;
266  }
267  grpc_slice slice = incoming->slices[0];
268  /* There should be at least one settings frame present */
270  return false;
271  }
273  /* Check the frame type (SETTINGS) */
274  return *(p + 3) == 4;
275 }
276 
277 /* connection preface and settings frame to be sent by the client */
278 #define CONNECTION_PREFACE_FROM_CLIENT \
279  "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n" \
280  "\x00\x00\x00\x04\x00\x00\x00\x00\x00"
281 
285 
287  // Get last frame from incoming slice buffer.
288  constexpr int kExpectedFrameLength = 13;
289  if (incoming->length < kExpectedFrameLength) return false;
290  grpc_slice_buffer last_frame_buffer;
291  grpc_slice_buffer_init(&last_frame_buffer);
292  grpc_slice_buffer_trim_end(incoming, kExpectedFrameLength,
293  &last_frame_buffer);
294  GPR_ASSERT(last_frame_buffer.count == 1);
295  grpc_slice last_frame = last_frame_buffer.slices[0];
296 
297  const uint8_t* p = GRPC_SLICE_START_PTR(last_frame);
298  bool success =
299  // Length == 4
300  *p++ != 0 || *p++ != 0 || *p++ != 4 ||
301  // Frame type (RST_STREAM)
302  *p++ != 3 ||
303  // Flags
304  *p++ != 0 ||
305  // Stream ID.
306  *p++ != 0 || *p++ != 0 || *p++ != 0 || *p++ != 1 ||
307  // Payload (error code)
308  *p++ == 0 || *p++ == 0 || *p++ == 0 || *p == 0 || *p == 11;
309 
310  if (!success) {
311  gpr_log(GPR_INFO, "client expected RST_STREAM frame, not found");
312  }
313 
314  grpc_slice_buffer_destroy(&last_frame_buffer);
315  return success;
316 }
317 
318 static void* tag(intptr_t t) { return reinterpret_cast<void*>(t); }
319 
322  void* /*registered_method*/) {
324  grpc_call* s;
328 
331 
333  &request_metadata_recv, cq, cq, tag(101));
335  CQ_EXPECT_COMPLETION(cqv, tag(101), 1);
336  cq_verify(cqv);
337 
338  GPR_ASSERT(0 == grpc_slice_str_cmp(call_details.host, "localhost"));
340 
343  grpc_call_unref(s);
344  cq_verifier_destroy(cqv);
345 }
GRPC_CLOSURE_INIT
#define GRPC_CLOSURE_INIT(closure, cb, cb_arg, scheduler)
Definition: closure.h:115
grpc_core::Server::SetupTransport
grpc_error_handle SetupTransport(grpc_transport *transport, grpc_pollset *accepting_pollset, const grpc_channel_args *args, const RefCountedPtr< channelz::SocketNode > &socket_node)
Definition: src/core/lib/surface/server.cc:605
GPR_INFO
#define GPR_INFO
Definition: include/grpc/impl/codegen/log.h:56
grpc_call_error
grpc_call_error
Definition: grpc_types.h:464
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
grpc_call_details_destroy
GRPCAPI void grpc_call_details_destroy(grpc_call_details *details)
Definition: call_details.cc:36
grpc_call_details_init
GRPCAPI void grpc_call_details_init(grpc_call_details *details)
Definition: call_details.cc:30
grpc_timeout_seconds_to_deadline
gpr_timespec grpc_timeout_seconds_to_deadline(int64_t time_s)
Definition: test/core/util/test_config.cc:81
gpr_event_get
GPRAPI void * gpr_event_get(gpr_event *ev)
Definition: sync.cc:69
grpc_run_client_side_validator
void grpc_run_client_side_validator(grpc_bad_client_arg *arg, uint32_t flags, grpc_endpoint_pair *sfd, grpc_completion_queue *client_cq)
Definition: bad_client.cc:96
grpc_completion_queue_create_for_pluck
GRPCAPI grpc_completion_queue * grpc_completion_queue_create_for_pluck(void *reserved)
Definition: completion_queue_factory.cc:69
GRPC_BAD_CLIENT_REGISTERED_METHOD
#define GRPC_BAD_CLIENT_REGISTERED_METHOD
Definition: bad_client.h:28
grpc_create_chttp2_transport
grpc_transport * grpc_create_chttp2_transport(const grpc_channel_args *channel_args, grpc_endpoint *ep, bool is_client)
Definition: chttp2_transport.cc:3122
grpc_core::Server::channel_args
const grpc_channel_args * channel_args() const
Definition: src/core/lib/surface/server.h:132
grpc_metadata_array
Definition: grpc_types.h:579
grpc_call_details
Definition: grpc_types.h:585
string.h
thd_args::validator
grpc_bad_client_server_side_validator validator
Definition: bad_client.cc:47
grpc_slice_buffer::slices
grpc_slice * slices
Definition: include/grpc/impl/codegen/slice.h:89
gpr_event_set
GPRAPI void gpr_event_set(gpr_event *ev, void *value)
Definition: sync.cc:59
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
error
grpc_error_handle error
Definition: retry_filter.cc:499
GRPC_OP_COMPLETE
@ GRPC_OP_COMPLETE
Definition: grpc_types.h:558
completion_queue.h
grpc_server_create
GRPCAPI grpc_server * grpc_server_create(const grpc_channel_args *args, void *reserved)
Definition: src/core/lib/surface/server.cc:1456
GRPC_CALL_OK
@ GRPC_CALL_OK
Definition: grpc_types.h:466
grpc_server_register_completion_queue
GRPCAPI void grpc_server_register_completion_queue(grpc_server *server, grpc_completion_queue *cq, void *reserved)
Definition: src/core/lib/surface/server.cc:1466
grpc_endpoint_pair::server
grpc_endpoint * server
Definition: endpoint_pair.h:28
GRPC_LOG_IF_ERROR
#define GRPC_LOG_IF_ERROR(what, error)
Definition: error.h:398
a
int a
Definition: abseil-cpp/absl/container/internal/hash_policy_traits_test.cc:88
xds_manager.p
p
Definition: xds_manager.py:60
GPR_DUMP_HEX
#define GPR_DUMP_HEX
Definition: string.h:34
grpc_call_details::method
grpc_slice method
Definition: grpc_types.h:586
uint8_t
unsigned char uint8_t
Definition: stdint-msvc2008.h:78
grpc_channel_args
Definition: grpc_types.h:132
GPR_DUMP_ASCII
#define GPR_DUMP_ASCII
Definition: string.h:35
GRPC_BAD_CLIENT_REGISTERED_HOST
#define GRPC_BAD_CLIENT_REGISTERED_HOST
Definition: bad_client.h:29
grpc_core::Server::HasOpenConnections
bool HasOpenConnections() ABSL_LOCKS_EXCLUDED(mu_global_)
Definition: src/core/lib/surface/server.cc:638
endpoint_pair.h
uint32_t
unsigned int uint32_t
Definition: stdint-msvc2008.h:80
grpc_metadata_array_destroy
GRPCAPI void grpc_metadata_array_destroy(grpc_metadata_array *array)
Definition: metadata_array.cc:35
string_util.h
grpc_server_request_call
GRPCAPI grpc_call_error grpc_server_request_call(grpc_server *server, grpc_call **call, grpc_call_details *details, grpc_metadata_array *request_metadata, grpc_completion_queue *cq_bound_to_call, grpc_completion_queue *cq_for_notification, void *tag_new)
Definition: src/core/lib/surface/server.cc:1526
asyncio_get_stats.args
args
Definition: asyncio_get_stats.py:40
client_fd
static uv_os_fd_t client_fd
Definition: test-poll-oob.c:38
GPR_ASSERT
#define GPR_ASSERT(x)
Definition: include/grpc/impl/codegen/log.h:94
gpr_time_cmp
GPRAPI int gpr_time_cmp(gpr_timespec a, gpr_timespec b)
Definition: src/core/lib/gpr/time.cc:30
grpc_core::CoreConfiguration::Get
static const CoreConfiguration & Get()
Definition: core_configuration.h:82
tag
static void * tag(intptr_t t)
Definition: bad_client.cc:318
grpc_core::ExecCtx::Flush
bool Flush()
Definition: exec_ctx.cc:69
grpc_call_unref
GRPCAPI void grpc_call_unref(grpc_call *call)
Definition: call.cc:1770
grpc_slice_buffer::count
size_t count
Definition: include/grpc/impl/codegen/slice.h:91
channel_stack.h
grpc_timeout_milliseconds_to_deadline
gpr_timespec grpc_timeout_milliseconds_to_deadline(int64_t time_ms)
Definition: test/core/util/test_config.cc:89
slice
grpc_slice slice
Definition: src/core/lib/surface/server.cc:467
thd_args::done_thd
gpr_event done_thd
Definition: bad_client.cc:49
gpr_log
GPRAPI void gpr_log(const char *file, int line, gpr_log_severity severity, const char *format,...) GPR_PRINT_FORMAT_CHECK(4
grpc_completion_queue
Definition: completion_queue.cc:347
transport
grpc_transport transport
Definition: filter_fuzzer.cc:146
cq_verifier_destroy
void cq_verifier_destroy(cq_verifier *v)
Definition: cq_verifier.cc:92
thd_args::registered_method
void * registered_method
Definition: bad_client.cc:48
grpc_call
struct grpc_call grpc_call
Definition: grpc_types.h:70
client_connection_preface_validator
bool client_connection_preface_validator(grpc_slice_buffer *incoming, void *)
Definition: bad_client.cc:262
grpc_cq_pollset
grpc_pollset * grpc_cq_pollset(grpc_completion_queue *cq)
Definition: completion_queue.cc:1433
grpc_bad_client_server_side_validator
void(* grpc_bad_client_server_side_validator)(grpc_server *server, grpc_completion_queue *cq, void *registered_method)
Definition: bad_client.h:32
GRPC_SLICE_START_PTR
#define GRPC_SLICE_START_PTR(slice)
Definition: include/grpc/impl/codegen/slice.h:101
grpc_core::ChannelArgs::ToC
const grpc_channel_args * ToC() const
Definition: channel_args.cc:94
grpc_channel_args_destroy
void grpc_channel_args_destroy(grpc_channel_args *a)
Definition: channel_args.cc:360
arg
Definition: cmdline.cc:40
cq_verifier_create
cq_verifier * cq_verifier_create(grpc_completion_queue *cq)
Definition: cq_verifier.cc:86
grpc_slice
Definition: include/grpc/impl/codegen/slice.h:65
grpc_server
struct grpc_server grpc_server
Definition: grpc_types.h:65
grpc_core::Thread::Join
void Join()
Definition: thd.h:141
intptr_t
_W64 signed int intptr_t
Definition: stdint-msvc2008.h:118
cq_verifier
Definition: cq_verifier.cc:76
request_metadata_recv
static grpc_metadata_array request_metadata_recv
Definition: test/core/fling/server.cc:48
gpr_event_init
GPRAPI void gpr_event_init(gpr_event *ev)
Definition: sync.cc:54
grpc_endpoint_shutdown
void grpc_endpoint_shutdown(grpc_endpoint *ep, grpc_error_handle why)
Definition: endpoint.cc:49
grpc_server_destroy
GRPCAPI void grpc_server_destroy(grpc_server *server)
Definition: src/core/lib/surface/server.cc:1519
thd_args::cq
grpc_completion_queue * cq
Definition: bad_client.cc:46
set_done_write
static void set_done_write(void *arg, grpc_error_handle)
Definition: bad_client.cc:62
CQ_EXPECT_COMPLETION
#define CQ_EXPECT_COMPLETION(v, tag, success)
Definition: cq_verifier.h:58
GRPC_BAD_CLIENT_LARGE_REQUEST
#define GRPC_BAD_CLIENT_LARGE_REQUEST
Definition: bad_client.h:49
slice_internal.h
MIN_HTTP2_FRAME_SIZE
#define MIN_HTTP2_FRAME_SIZE
Definition: bad_client.cc:41
grpc_endpoint_destroy
void grpc_endpoint_destroy(grpc_endpoint *ep)
Definition: endpoint.cc:53
grpc_core::CoreConfiguration::channel_args_preconditioning
const ChannelArgsPreconditioning & channel_args_preconditioning() const
Definition: core_configuration.h:139
gpr_now
GPRAPI gpr_timespec gpr_now(gpr_clock_type clock)
grpc_core::ExecCtx
Definition: exec_ctx.h:97
grpc_core::Thread::Start
void Start()
Definition: thd.h:125
grpc_slice_buffer_init
GPRAPI void grpc_slice_buffer_init(grpc_slice_buffer *sb)
Definition: slice/slice_buffer.cc:116
gpr_event_wait
GPRAPI void * gpr_event_wait(gpr_event *ev, gpr_timespec abs_deadline)
Definition: sync.cc:73
thd_func
static void thd_func(void *arg)
Definition: bad_client.cc:53
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
CONNECTION_PREFACE_FROM_CLIENT
#define CONNECTION_PREFACE_FROM_CLIENT
Definition: bad_client.cc:278
GRPC_BAD_CLIENT_DISCONNECT
#define GRPC_BAD_CLIENT_DISCONNECT
Definition: bad_client.h:48
gpr_timespec::clock_type
gpr_clock_type clock_type
Definition: gpr_types.h:55
grpc_completion_queue_pluck
GRPCAPI grpc_event grpc_completion_queue_pluck(grpc_completion_queue *cq, void *tag, gpr_timespec deadline, void *reserved)
Definition: completion_queue.cc:1328
grpc_slice_buffer_add
GPRAPI void grpc_slice_buffer_add(grpc_slice_buffer *sb, grpc_slice slice)
Definition: slice/slice_buffer.cc:170
gpr_event
Definition: impl/codegen/sync_generic.h:31
server_setup_transport
static void server_setup_transport(void *ts, grpc_transport *transport)
Definition: bad_client.cc:67
grpc_slice_from_copied_buffer
GPRAPI grpc_slice grpc_slice_from_copied_buffer(const char *source, size_t len)
Definition: slice/slice.cc:170
grpc_core::Server
Definition: src/core/lib/surface/server.h:75
cq_verifier.h
thd_args::server
grpc_server * server
Definition: bad_client.cc:45
absl::flags_internal
Definition: abseil-cpp/absl/flags/commandlineflag.h:40
grpc_call_details::host
grpc_slice host
Definition: grpc_types.h:587
server
Definition: examples/python/async_streaming/server.py:1
http_server_filter.h
grpc_completion_queue_destroy
GRPCAPI void grpc_completion_queue_destroy(grpc_completion_queue *cq)
Definition: completion_queue.cc:1424
exec_ctx
grpc_core::ExecCtx exec_ctx
Definition: end2end_binder_transport_test.cc:75
grpc_endpoint_pair::client
grpc_endpoint * client
Definition: endpoint_pair.h:27
grpc_run_bad_client_test
void grpc_run_bad_client_test(grpc_bad_client_server_side_validator server_validator, grpc_bad_client_arg args[], int num_args, uint32_t flags)
Definition: bad_client.cc:193
grpc_bad_client_arg
Definition: bad_client.h:40
alloc.h
grpc_iomgr_create_endpoint_pair
grpc_endpoint_pair grpc_iomgr_create_endpoint_pair(const char *name, grpc_channel_args *args)
shutdown_client
static void shutdown_client(grpc_endpoint **client_fd)
Definition: bad_client.cc:85
chttp2_transport.h
thd.h
grpc_server_shutdown_and_notify
GRPCAPI void grpc_server_shutdown_and_notify(grpc_server *server, grpc_completion_queue *cq, void *tag)
Definition: src/core/lib/surface/server.cc:1503
done_write
static void done_write(void *, grpc_error_handle error)
Definition: bad_server_response_test.cc:94
grpc_completion_queue_next
GRPCAPI grpc_event grpc_completion_queue_next(grpc_completion_queue *cq, gpr_timespec deadline, void *reserved)
Definition: completion_queue.cc:1133
cq_verify
void cq_verify(cq_verifier *v, int timeout_sec)
Definition: cq_verifier.cc:268
arg
struct arg arg
server.h
grpc_core::Thread
Definition: thd.h:43
grpc_transport
Definition: transport_impl.h:89
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
grpc_slice_buffer_trim_end
GPRAPI void grpc_slice_buffer_trim_end(grpc_slice_buffer *sb, size_t n, grpc_slice_buffer *garbage)
Definition: slice/slice_buffer.cc:402
GRPC_SRM_PAYLOAD_READ_INITIAL_BYTE_BUFFER
@ GRPC_SRM_PAYLOAD_READ_INITIAL_BYTE_BUFFER
Definition: grpc.h:400
set_read_done
static void set_read_done(void *arg, grpc_error_handle)
Definition: bad_client.cc:79
murmur_hash.h
rst_stream_client_validator
bool rst_stream_client_validator(grpc_slice_buffer *incoming, void *)
Definition: bad_client.cc:286
grpc_slice_buffer
Definition: include/grpc/impl/codegen/slice.h:83
grpc_completion_queue_create_for_next
GRPCAPI grpc_completion_queue * grpc_completion_queue_create_for_next(void *reserved)
Definition: completion_queue_factory.cc:62
gpr_dump
char * gpr_dump(const char *buf, size_t len, uint32_t flags)
Definition: string.cc:144
connection_preface_arg
grpc_bad_client_arg connection_preface_arg
Definition: bad_client.cc:282
asyncio_get_stats.type
type
Definition: asyncio_get_stats.py:37
gpr_timespec
Definition: gpr_types.h:50
grpc_init
GRPCAPI void grpc_init(void)
Definition: init.cc:146
grpc_server_start
GRPCAPI void grpc_server_start(grpc_server *server)
Definition: src/core/lib/surface/server.cc:1497
grpc_error
Definition: error_internal.h:42
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
grpc_core::CppImplOf< Server, grpc_server >::FromC
static Server * FromC(grpc_server *c_type)
Definition: cpp_impl_of.h:30
grpc_slice_str_cmp
GPRAPI int grpc_slice_str_cmp(grpc_slice a, const char *b)
Definition: slice/slice.cc:426
thd_args
Definition: bad_client.cc:44
sync.h
grpc_closure
Definition: closure.h:56
server_verifier_request_call
void server_verifier_request_call(grpc_server *server, grpc_completion_queue *cq, void *)
Definition: bad_client.cc:320
GRPC_QUEUE_TIMEOUT
@ GRPC_QUEUE_TIMEOUT
Definition: grpc_types.h:556
grpc_endpoint
Definition: endpoint.h:105
grpc_shutdown
GRPCAPI void grpc_shutdown(void)
Definition: init.cc:209
grpc_core::ChannelArgsPreconditioning::PreconditionChannelArgs
ChannelArgs PreconditionChannelArgs(const grpc_channel_args *args) const
Definition: channel_args_preconditioning.cc:34
bad_client.h
cq
static grpc_completion_queue * cq
Definition: test/core/fling/client.cc:37
grpc_chttp2_transport_start_reading
void grpc_chttp2_transport_start_reading(grpc_transport *transport, grpc_slice_buffer *read_buffer, grpc_closure *notify_on_receive_settings, grpc_closure *notify_on_close)
Definition: chttp2_transport.cc:3128
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
call_details
static grpc_call_details call_details
Definition: test/core/fling/server.cc:47
grpc_metadata_array_init
GRPCAPI void grpc_metadata_array_init(grpc_metadata_array *array)
Definition: metadata_array.cc:30
grpc_server_register_method
GRPCAPI void * grpc_server_register_method(grpc_server *server, const char *method, const char *host, grpc_server_register_method_payload_handling payload_handling, uint32_t flags)
Definition: src/core/lib/surface/server.cc:1485
api.h


grpc
Author(s):
autogenerated on Thu Mar 13 2025 02:58:35