Go to the documentation of this file.
41 #define MIN_HTTP2_FRAME_SIZE 9
55 if (
a->validator !=
nullptr) {
56 a->validator(
a->server,
a->cq,
a->registered_method);
101 if (
arg->client_payload_length < 4 * 1024) {
109 arg->client_payload_length);
113 arg->client_payload_length);
121 grpc_schedule_on_exec_ctx);
139 if (sfd->
client !=
nullptr) {
141 if (
arg->client_validator !=
nullptr) {
152 grpc_schedule_on_exec_ctx);
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");
212 a.registered_method =
234 a.validator = server_validator;
238 server_validator_thd.
Start();
239 for (
int i = 0;
i < num_args;
i++) {
248 server_validator_thd.
Join();
274 return *(
p + 3) == 4;
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"
288 constexpr
int kExpectedFrameLength = 13;
289 if (
incoming->length < kExpectedFrameLength)
return false;
300 *
p++ != 0 || *
p++ != 0 || *
p++ != 4 ||
306 *
p++ != 0 || *
p++ != 0 || *
p++ != 0 || *
p++ != 1 ||
308 *
p++ == 0 || *
p++ == 0 || *
p++ == 0 || *
p == 0 || *
p == 11;
318 static void*
tag(
intptr_t t) {
return reinterpret_cast<void*
>(t); }
#define GRPC_CLOSURE_INIT(closure, cb, cb_arg, scheduler)
grpc_error_handle SetupTransport(grpc_transport *transport, grpc_pollset *accepting_pollset, const grpc_channel_args *args, const RefCountedPtr< channelz::SocketNode > &socket_node)
GPRAPI void grpc_slice_buffer_destroy(grpc_slice_buffer *sb)
static uv_pipe_t incoming[4]
GRPCAPI void grpc_call_details_destroy(grpc_call_details *details)
GRPCAPI void grpc_call_details_init(grpc_call_details *details)
gpr_timespec grpc_timeout_seconds_to_deadline(int64_t time_s)
GPRAPI void * gpr_event_get(gpr_event *ev)
void grpc_run_client_side_validator(grpc_bad_client_arg *arg, uint32_t flags, grpc_endpoint_pair *sfd, grpc_completion_queue *client_cq)
GRPCAPI grpc_completion_queue * grpc_completion_queue_create_for_pluck(void *reserved)
#define GRPC_BAD_CLIENT_REGISTERED_METHOD
grpc_transport * grpc_create_chttp2_transport(const grpc_channel_args *channel_args, grpc_endpoint *ep, bool is_client)
const grpc_channel_args * channel_args() const
grpc_bad_client_server_side_validator validator
GPRAPI void gpr_event_set(gpr_event *ev, void *value)
GPRAPI void gpr_free(void *ptr)
void grpc_endpoint_read(grpc_endpoint *ep, grpc_slice_buffer *slices, grpc_closure *cb, bool urgent, int min_progress_size)
GRPCAPI grpc_server * grpc_server_create(const grpc_channel_args *args, void *reserved)
GRPCAPI void grpc_server_register_completion_queue(grpc_server *server, grpc_completion_queue *cq, void *reserved)
#define GRPC_LOG_IF_ERROR(what, error)
#define GRPC_BAD_CLIENT_REGISTERED_HOST
bool HasOpenConnections() ABSL_LOCKS_EXCLUDED(mu_global_)
GRPCAPI void grpc_metadata_array_destroy(grpc_metadata_array *array)
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)
static uv_os_fd_t client_fd
GPRAPI int gpr_time_cmp(gpr_timespec a, gpr_timespec b)
static const CoreConfiguration & Get()
static void * tag(intptr_t t)
GRPCAPI void grpc_call_unref(grpc_call *call)
gpr_timespec grpc_timeout_milliseconds_to_deadline(int64_t time_ms)
GPRAPI void gpr_log(const char *file, int line, gpr_log_severity severity, const char *format,...) GPR_PRINT_FORMAT_CHECK(4
void cq_verifier_destroy(cq_verifier *v)
struct grpc_call grpc_call
bool client_connection_preface_validator(grpc_slice_buffer *incoming, void *)
grpc_pollset * grpc_cq_pollset(grpc_completion_queue *cq)
void(* grpc_bad_client_server_side_validator)(grpc_server *server, grpc_completion_queue *cq, void *registered_method)
#define GRPC_SLICE_START_PTR(slice)
const grpc_channel_args * ToC() const
void grpc_channel_args_destroy(grpc_channel_args *a)
cq_verifier * cq_verifier_create(grpc_completion_queue *cq)
struct grpc_server grpc_server
static grpc_metadata_array request_metadata_recv
GPRAPI void gpr_event_init(gpr_event *ev)
void grpc_endpoint_shutdown(grpc_endpoint *ep, grpc_error_handle why)
GRPCAPI void grpc_server_destroy(grpc_server *server)
grpc_completion_queue * cq
static void set_done_write(void *arg, grpc_error_handle)
#define CQ_EXPECT_COMPLETION(v, tag, success)
#define GRPC_BAD_CLIENT_LARGE_REQUEST
#define MIN_HTTP2_FRAME_SIZE
void grpc_endpoint_destroy(grpc_endpoint *ep)
const ChannelArgsPreconditioning & channel_args_preconditioning() const
GPRAPI gpr_timespec gpr_now(gpr_clock_type clock)
GPRAPI void grpc_slice_buffer_init(grpc_slice_buffer *sb)
GPRAPI void * gpr_event_wait(gpr_event *ev, gpr_timespec abs_deadline)
static void thd_func(void *arg)
#define GRPC_ERROR_CREATE_FROM_STATIC_STRING(desc)
#define GRPC_SLICE_LENGTH(slice)
#define CONNECTION_PREFACE_FROM_CLIENT
#define GRPC_BAD_CLIENT_DISCONNECT
gpr_clock_type clock_type
GRPCAPI grpc_event grpc_completion_queue_pluck(grpc_completion_queue *cq, void *tag, gpr_timespec deadline, void *reserved)
GPRAPI void grpc_slice_buffer_add(grpc_slice_buffer *sb, grpc_slice slice)
static void server_setup_transport(void *ts, grpc_transport *transport)
GPRAPI grpc_slice grpc_slice_from_copied_buffer(const char *source, size_t len)
GRPCAPI void grpc_completion_queue_destroy(grpc_completion_queue *cq)
grpc_core::ExecCtx exec_ctx
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)
grpc_endpoint_pair grpc_iomgr_create_endpoint_pair(const char *name, grpc_channel_args *args)
static void shutdown_client(grpc_endpoint **client_fd)
GRPCAPI void grpc_server_shutdown_and_notify(grpc_server *server, grpc_completion_queue *cq, void *tag)
static void done_write(void *, grpc_error_handle error)
GRPCAPI grpc_event grpc_completion_queue_next(grpc_completion_queue *cq, gpr_timespec deadline, void *reserved)
void cq_verify(cq_verifier *v, int timeout_sec)
void grpc_slice_buffer_destroy_internal(grpc_slice_buffer *sb)
void grpc_endpoint_write(grpc_endpoint *ep, grpc_slice_buffer *slices, grpc_closure *cb, void *arg, int max_frame_size)
GPRAPI void grpc_slice_buffer_trim_end(grpc_slice_buffer *sb, size_t n, grpc_slice_buffer *garbage)
@ GRPC_SRM_PAYLOAD_READ_INITIAL_BYTE_BUFFER
static void set_read_done(void *arg, grpc_error_handle)
bool rst_stream_client_validator(grpc_slice_buffer *incoming, void *)
GRPCAPI grpc_completion_queue * grpc_completion_queue_create_for_next(void *reserved)
char * gpr_dump(const char *buf, size_t len, uint32_t flags)
grpc_bad_client_arg connection_preface_arg
GRPCAPI void grpc_init(void)
GRPCAPI void grpc_server_start(grpc_server *server)
void grpc_endpoint_add_to_pollset(grpc_endpoint *ep, grpc_pollset *pollset)
static Server * FromC(grpc_server *c_type)
GPRAPI int grpc_slice_str_cmp(grpc_slice a, const char *b)
void server_verifier_request_call(grpc_server *server, grpc_completion_queue *cq, void *)
GRPCAPI void grpc_shutdown(void)
ChannelArgs PreconditionChannelArgs(const grpc_channel_args *args) const
static grpc_completion_queue * cq
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)
static grpc_call_details call_details
GRPCAPI void grpc_metadata_array_init(grpc_metadata_array *array)
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)
grpc
Author(s):
autogenerated on Thu Mar 13 2025 02:58:35