head_of_line_blocking.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 
19 #include <string.h>
20 
21 #include <grpc/grpc.h>
22 #include <grpc/support/alloc.h>
23 
27 
28 static const char prefix[] =
29  "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n"
30  // settings frame
31  "\x00\x00\x00\x04\x00\x00\x00\x00\x00"
32  // stream 1 headers: generated from server_registered_method.headers in this
33  // directory
34  "\x00\x00\xd0\x01\x04\x00\x00\x00\x01"
35  "\x10\x05:path\x0f/registered/bar"
36  "\x10\x07:scheme\x04http"
37  "\x10\x07:method\x04POST"
38  "\x10\x0a:authority\x09localhost"
39  "\x10\x0c"
40  "content-type\x10"
41  "application/grpc"
42  "\x10\x14grpc-accept-encoding\x15identity,deflate,gzip"
43  "\x10\x02te\x08trailers"
44  "\x10\x0auser-agent\"bad-client grpc-c/0.12.0.0 (linux)"
45  // data frame for stream 1: advertise a 10000 byte payload (that we won't
46  // fulfill)
47  "\x00\x00\x05\x00\x00\x00\x00\x00\x01"
48  "\x01\x00\x00\x27\x10"
49  // stream 3 headers: generated from server_registered_method.headers in this
50  // directory
51  "\x00\x00\xd0\x01\x04\x00\x00\x00\x03"
52  "\x10\x05:path\x0f/registered/bar"
53  "\x10\x07:scheme\x04http"
54  "\x10\x07:method\x04POST"
55  "\x10\x0a:authority\x09localhost"
56  "\x10\x0c"
57  "content-type\x10"
58  "application/grpc"
59  "\x10\x14grpc-accept-encoding\x15identity,deflate,gzip"
60  "\x10\x02te\x08trailers"
61  "\x10\x0auser-agent\"bad-client grpc-c/0.12.0.0 (linux)"
62  // data frame for stream 3: advertise a 10000 byte payload (that we will
63  // fulfill)
64  "\x00\x00\x05\x00\x00\x00\x00\x00\x03"
65  "\x01\x00\x00\x27\x10"
66  "";
67 
68 static void* tag(intptr_t t) { return reinterpret_cast<void*>(t); }
69 
71  void* registered_method) {
73  grpc_call* s;
76  gpr_timespec deadline;
77  grpc_byte_buffer* payload = nullptr;
78 
80 
81  error = grpc_server_request_registered_call(server, registered_method, &s,
82  &deadline, &request_metadata_recv,
83  &payload, cq, cq, tag(101));
85  CQ_EXPECT_COMPLETION(cqv, tag(101), 1);
86  cq_verify(cqv);
87 
88  GPR_ASSERT(payload != nullptr);
89 
91  grpc_call_unref(s);
94 }
95 
96 char* g_buffer;
97 size_t g_cap = 0;
98 size_t g_count = 0;
99 
100 static void addbuf(const void* data, size_t len) {
101  if (g_count + len > g_cap) {
102  g_cap = std::max(g_count + len, g_cap * 2);
103  g_buffer = static_cast<char*>(gpr_realloc(g_buffer, g_cap));
104  }
106  g_count += len;
107 }
108 
109 int main(int argc, char** argv) {
110  int i;
111  grpc::testing::TestEnvironment env(&argc, argv);
112  grpc_init();
113 
114 #define NUM_FRAMES 10
115 #define FRAME_SIZE 1000
116 
117  addbuf(prefix, sizeof(prefix) - 1);
118  for (i = 0; i < NUM_FRAMES; i++) {
119  uint8_t hdr[9] = {static_cast<uint8_t>(FRAME_SIZE >> 16),
120  static_cast<uint8_t>(FRAME_SIZE >> 8),
121  static_cast<uint8_t>(FRAME_SIZE),
122  0,
123  0,
124  0,
125  0,
126  0,
127  3};
129  memset(msg, 'a', sizeof(msg));
130  addbuf(hdr, sizeof(hdr));
132  }
133  grpc_bad_client_arg bca = {nullptr, nullptr, g_buffer, g_count};
134  grpc_run_bad_client_test(verifier, &bca, 1, 0);
136  grpc_shutdown();
137 
138  return 0;
139 }
grpc_call_error
grpc_call_error
Definition: grpc_types.h:464
generate.env
env
Definition: generate.py:37
memset
return memset(p, 0, total)
grpc_metadata_array
Definition: grpc_types.h:579
string.h
gpr_free
GPRAPI void gpr_free(void *ptr)
Definition: alloc.cc:51
error
grpc_error_handle error
Definition: retry_filter.cc:499
GRPC_CALL_OK
@ GRPC_CALL_OK
Definition: grpc_types.h:466
grpc_server_request_registered_call
GRPCAPI grpc_call_error grpc_server_request_registered_call(grpc_server *server, void *registered_method, grpc_call **call, gpr_timespec *deadline, grpc_metadata_array *request_metadata, grpc_byte_buffer **optional_payload, grpc_completion_queue *cq_bound_to_call, grpc_completion_queue *cq_for_notification, void *tag_new)
Definition: src/core/lib/surface/server.cc:1546
uint8_t
unsigned char uint8_t
Definition: stdint-msvc2008.h:78
addbuf
static void addbuf(const void *data, size_t len)
Definition: head_of_line_blocking.cc:100
NUM_FRAMES
#define NUM_FRAMES
grpc_metadata_array_destroy
GRPCAPI void grpc_metadata_array_destroy(grpc_metadata_array *array)
Definition: metadata_array.cc:35
memcpy
memcpy(mem, inblock.get(), min(CONTAINING_RECORD(inblock.get(), MEMBLOCK, data) ->size, size))
g_count
size_t g_count
Definition: head_of_line_blocking.cc:98
GPR_ASSERT
#define GPR_ASSERT(x)
Definition: include/grpc/impl/codegen/log.h:94
gpr_realloc
GPRAPI void * gpr_realloc(void *p, size_t size)
Definition: alloc.cc:56
max
int max
Definition: bloaty/third_party/zlib/examples/enough.c:170
grpc_call_unref
GRPCAPI void grpc_call_unref(grpc_call *call)
Definition: call.cc:1770
grpc_completion_queue
Definition: completion_queue.cc:347
cq_verifier_destroy
void cq_verifier_destroy(cq_verifier *v)
Definition: cq_verifier.cc:92
main
int main(int argc, char **argv)
Definition: head_of_line_blocking.cc:109
grpc.h
grpc_call
struct grpc_call grpc_call
Definition: grpc_types.h:70
grpc_byte_buffer
Definition: grpc_types.h:43
cq_verifier_create
cq_verifier * cq_verifier_create(grpc_completion_queue *cq)
Definition: cq_verifier.cc:86
grpc_server
struct grpc_server grpc_server
Definition: grpc_types.h:65
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
data
char data[kBufferLength]
Definition: abseil-cpp/absl/strings/internal/str_format/float_conversion.cc:1006
CQ_EXPECT_COMPLETION
#define CQ_EXPECT_COMPLETION(v, tag, success)
Definition: cq_verifier.h:58
g_buffer
char * g_buffer
Definition: head_of_line_blocking.cc:96
msg
std::string msg
Definition: client_interceptors_end2end_test.cc:372
cq_verifier.h
server
Definition: examples/python/async_streaming/server.py:1
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::testing::TestEnvironment
Definition: test/core/util/test_config.h:54
prefix
static const char prefix[]
Definition: head_of_line_blocking.cc:28
grpc_byte_buffer_destroy
GRPCAPI void grpc_byte_buffer_destroy(grpc_byte_buffer *bb)
Definition: byte_buffer.cc:81
cq_verify
void cq_verify(cq_verifier *v, int timeout_sec)
Definition: cq_verifier.cc:268
verifier
static void verifier(grpc_server *server, grpc_completion_queue *cq, void *registered_method)
Definition: head_of_line_blocking.cc:70
server.h
len
int len
Definition: abseil-cpp/absl/base/internal/low_level_alloc_test.cc:46
gpr_timespec
Definition: gpr_types.h:50
g_cap
size_t g_cap
Definition: head_of_line_blocking.cc:97
grpc_init
GRPCAPI void grpc_init(void)
Definition: init.cc:146
tag
static void * tag(intptr_t t)
Definition: head_of_line_blocking.cc:68
FRAME_SIZE
#define FRAME_SIZE
gen_server_registered_method_bad_client_test_body.payload
list payload
Definition: gen_server_registered_method_bad_client_test_body.py:40
grpc_shutdown
GRPCAPI void grpc_shutdown(void)
Definition: init.cc:209
bad_client.h
cq
static grpc_completion_queue * cq
Definition: test/core/fling/client.cc:37
i
uint64_t i
Definition: abseil-cpp/absl/container/btree_benchmark.cc:230
grpc_metadata_array_init
GRPCAPI void grpc_metadata_array_init(grpc_metadata_array *array)
Definition: metadata_array.cc:30


grpc
Author(s):
autogenerated on Fri May 16 2025 02:59:01