GRPC Core  9.0.0
metadata_batch.h
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 #ifndef GRPC_CORE_LIB_TRANSPORT_METADATA_BATCH_H
20 #define GRPC_CORE_LIB_TRANSPORT_METADATA_BATCH_H
21 
23 
24 #include <stdbool.h>
25 
26 #include <grpc/grpc.h>
27 #include <grpc/slice.h>
28 #include <grpc/support/time.h>
32 
33 typedef struct grpc_linked_mdelem {
35 
37  struct grpc_linked_mdelem* next = nullptr;
38  struct grpc_linked_mdelem* prev = nullptr;
39  void* reserved;
41 
42 typedef struct grpc_mdelem_list {
43  size_t count;
44  size_t default_count; // Number of default keys.
48 
49 typedef struct grpc_metadata_batch {
58 
63 
64 /* Returns the transport size of the batch. */
66 
69  grpc_linked_mdelem* storage);
72 
75  grpc_linked_mdelem* storage,
76  grpc_mdelem new_value);
77 
79  const grpc_slice& value);
80 
87  grpc_linked_mdelem* storage)
92 
99  grpc_linked_mdelem* storage)
104 
113  grpc_mdelem elem_to_add) GRPC_MUST_USE_RESULT;
114 
115 // TODO(arjunroy, roth): Remove redundant methods.
116 // add/link_head/tail are almost identical.
120  return grpc_metadata_batch_link_head(batch, storage, idx);
121 }
122 
126  GPR_DEBUG_ASSERT(!GRPC_MDISNULL(elem_to_add));
127  storage->md = elem_to_add;
128  return grpc_metadata_batch_add_head(batch, storage, idx);
129 }
130 
139  grpc_mdelem elem_to_add) GRPC_MUST_USE_RESULT;
140 
144  return grpc_metadata_batch_link_tail(batch, storage, idx);
145 }
146 
150  GPR_DEBUG_ASSERT(!GRPC_MDISNULL(elem_to_add));
151  storage->md = elem_to_add;
152  return grpc_metadata_batch_add_tail(batch, storage, idx);
153 }
154 
156 
157 typedef struct {
161 
162 #define GRPC_FILTERED_ERROR(error) \
163  { (error), GRPC_MDNULL }
164 #define GRPC_FILTERED_MDELEM(md) \
165  { GRPC_ERROR_NONE, (md) }
166 #define GRPC_FILTERED_REMOVE() \
167  { GRPC_ERROR_NONE, GRPC_MDNULL }
168 
170  void* user_data, grpc_mdelem elem);
173  void* user_data, const char* composite_error_string) GRPC_MUST_USE_RESULT;
174 
175 #ifndef NDEBUG
177 #else
178 #define grpc_metadata_batch_assert_ok(comd) \
179  do { \
180  } while (0)
181 #endif
182 
186  grpc_metadata_batch* dst,
187  grpc_linked_mdelem* storage);
188 
190  grpc_metadata_batch* dst);
191 
192 #endif /* GRPC_CORE_LIB_TRANSPORT_METADATA_BATCH_H */
grpc_transport_stream_op_batch batch
Definition: client_channel.cc:471
grpc_call_element * elem
Definition: client_channel.cc:112
int64_t grpc_millis
Definition: exec_ctx.h:35
#define GPR_DEBUG_ASSERT(x)
Definition: log.h:103
#define GRPC_MUST_USE_RESULT
Definition: port_platform.h:570
#define GRPC_MDISNULL(md)
Definition: metadata.h:172
void grpc_metadata_batch_set_value(grpc_linked_mdelem *storage, const grpc_slice &value)
Definition: metadata_batch.cc:290
void grpc_metadata_batch_copy(grpc_metadata_batch *src, grpc_metadata_batch *dst, grpc_linked_mdelem *storage)
Copies src to dst.
Definition: metadata_batch.cc:369
void grpc_metadata_batch_assert_ok(grpc_metadata_batch *comd)
Definition: metadata_batch.cc:77
size_t grpc_metadata_batch_size(grpc_metadata_batch *batch)
Definition: metadata_batch.cc:331
grpc_error * grpc_metadata_batch_add_tail(grpc_metadata_batch *batch, grpc_linked_mdelem *storage, grpc_mdelem elem_to_add) GRPC_MUST_USE_RESULT
Add elem_to_add as the last element in batch, using storage as backing storage for the linked list el...
Definition: metadata_batch.cc:200
grpc_error * grpc_metadata_batch_link_tail(grpc_metadata_batch *batch, grpc_linked_mdelem *storage) GRPC_MUST_USE_RESULT
Add storage to the end of batch.
Definition: metadata_batch.cc:224
void grpc_metadata_batch_init(grpc_metadata_batch *batch)
Definition: metadata_batch.cc:82
struct grpc_mdelem_list grpc_mdelem_list
struct grpc_linked_mdelem grpc_linked_mdelem
grpc_error * grpc_attach_md_to_error(grpc_error *src, grpc_mdelem md)
Definition: metadata_batch.cc:94
grpc_error * grpc_metadata_batch_add_head(grpc_metadata_batch *batch, grpc_linked_mdelem *storage, grpc_mdelem elem_to_add) GRPC_MUST_USE_RESULT
Add elem_to_add as the first element in batch, using storage as backing storage for the linked list e...
Definition: metadata_batch.cc:145
grpc_error * grpc_metadata_batch_filter(grpc_metadata_batch *batch, grpc_metadata_batch_filter_func func, void *user_data, const char *composite_error_string) GRPC_MUST_USE_RESULT
Definition: metadata_batch.cc:349
void grpc_metadata_batch_move(grpc_metadata_batch *src, grpc_metadata_batch *dst)
Definition: metadata_batch.cc:388
bool grpc_metadata_batch_is_empty(grpc_metadata_batch *batch)
Definition: metadata_batch.cc:326
void grpc_metadata_batch_clear(grpc_metadata_batch *batch)
Definition: metadata_batch.cc:321
struct grpc_metadata_batch grpc_metadata_batch
void grpc_metadata_batch_remove(grpc_metadata_batch *batch, grpc_linked_mdelem *storage)
Remove storage from the batch, unreffing the mdelem contained.
Definition: metadata_batch.cc:269
grpc_error * grpc_metadata_batch_substitute(grpc_metadata_batch *batch, grpc_linked_mdelem *storage, grpc_mdelem new_value)
Substitute a new mdelem for an old value.
Definition: metadata_batch.cc:299
grpc_error * grpc_metadata_batch_link_head(grpc_metadata_batch *batch, grpc_linked_mdelem *storage) GRPC_MUST_USE_RESULT
Add storage to the beginning of batch.
Definition: metadata_batch.cc:169
void grpc_metadata_batch_destroy(grpc_metadata_batch *batch)
Definition: metadata_batch.cc:87
grpc_filtered_mdelem(* grpc_metadata_batch_filter_func)(void *user_data, grpc_mdelem elem)
Definition: metadata_batch.h:169
grpc_metadata_batch_callouts_index
Definition: static_metadata.h:516
Definition: error_internal.h:39
Definition: metadata_batch.h:157
grpc_mdelem md
Definition: metadata_batch.h:159
grpc_error * error
Definition: metadata_batch.h:158
Definition: metadata_batch.h:33
void * reserved
Definition: metadata_batch.h:39
grpc_linked_mdelem()
Definition: metadata_batch.h:34
struct grpc_linked_mdelem * prev
Definition: metadata_batch.h:38
grpc_mdelem md
Definition: metadata_batch.h:36
struct grpc_linked_mdelem * next
Definition: metadata_batch.h:37
Definition: metadata_batch.h:42
grpc_linked_mdelem * head
Definition: metadata_batch.h:45
grpc_linked_mdelem * tail
Definition: metadata_batch.h:46
size_t default_count
Definition: metadata_batch.h:44
size_t count
Definition: metadata_batch.h:43
Definition: metadata.h:98
Definition: metadata_batch.h:49
grpc_millis deadline
Used to calculate grpc-timeout at the point of sending, or GRPC_MILLIS_INF_FUTURE if this batch does ...
Definition: metadata_batch.h:56
grpc_metadata_batch_callouts idx
Definition: metadata_batch.h:52
grpc_mdelem_list list
Metadata elements in this batch.
Definition: metadata_batch.h:51
A grpc_slice s, if initialized, represents the byte range s.bytes[0..s.length-1].
Definition: slice.h:60
Definition: static_metadata.h:544