GRPC Core  18.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 "absl/types/optional.h"
27 
28 #include <grpc/grpc.h>
29 #include <grpc/slice.h>
30 #include <grpc/support/time.h>
31 
35 
36 typedef struct grpc_linked_mdelem {
38 
40  struct grpc_linked_mdelem* next = nullptr;
41  struct grpc_linked_mdelem* prev = nullptr;
42  void* reserved;
44 
45 typedef struct grpc_mdelem_list {
46  size_t count;
47  size_t default_count; // Number of default keys.
51 
52 typedef struct grpc_metadata_batch {
61 
66 
67 /* Returns the transport size of the batch. */
69 
72  grpc_linked_mdelem* storage);
75 
78  grpc_linked_mdelem* storage,
79  grpc_mdelem new_mdelem);
80 
82  const grpc_slice& value);
83 
91 absl::optional<absl::string_view> grpc_metadata_batch_get_value(
92  grpc_metadata_batch* batch, absl::string_view target_key,
93  std::string* concatenated_value);
94 
101  grpc_linked_mdelem* storage)
106 
113  grpc_linked_mdelem* storage)
118 
127  grpc_mdelem elem_to_add) GRPC_MUST_USE_RESULT;
128 
129 // TODO(arjunroy, roth): Remove redundant methods.
130 // add/link_head/tail are almost identical.
134  return grpc_metadata_batch_link_head(batch, storage, idx);
135 }
136 
140  GPR_DEBUG_ASSERT(!GRPC_MDISNULL(elem_to_add));
141  storage->md = elem_to_add;
142  return grpc_metadata_batch_add_head(batch, storage, idx);
143 }
144 
153  grpc_mdelem elem_to_add) GRPC_MUST_USE_RESULT;
154 
158  return grpc_metadata_batch_link_tail(batch, storage, idx);
159 }
160 
164  GPR_DEBUG_ASSERT(!GRPC_MDISNULL(elem_to_add));
165  storage->md = elem_to_add;
166  return grpc_metadata_batch_add_tail(batch, storage, idx);
167 }
168 
170  grpc_mdelem md);
171 
175 };
176 #define GRPC_FILTERED_ERROR(error) \
177  { (error), GRPC_MDNULL }
178 #define GRPC_FILTERED_MDELEM(md) \
179  { GRPC_ERROR_NONE, (md) }
180 #define GRPC_FILTERED_REMOVE() \
181  { GRPC_ERROR_NONE, GRPC_MDNULL }
182 
184  void* user_data, grpc_mdelem elem);
187  void* user_data, const char* composite_error_string) GRPC_MUST_USE_RESULT;
188 
189 #ifndef NDEBUG
191 #else
192 #define grpc_metadata_batch_assert_ok(batch) \
193  do { \
194  } while (0)
195 #endif
196 
200  grpc_metadata_batch* dst,
201  grpc_linked_mdelem* storage);
202 
204  grpc_metadata_batch* dst);
205 
206 #endif /* GRPC_CORE_LIB_TRANSPORT_METADATA_BATCH_H */
int64_t grpc_millis
Definition: exec_ctx.h:37
#define GPR_DEBUG_ASSERT(x)
Definition: log.h:101
#define GRPC_MUST_USE_RESULT
Definition: port_platform.h:524
#define GRPC_MDISNULL(md)
Definition: metadata.h:172
grpc_error_handle grpc_attach_md_to_error(grpc_error_handle src, grpc_mdelem md)
Definition: metadata_batch.cc:97
void grpc_metadata_batch_set_value(grpc_linked_mdelem *storage, const grpc_slice &value)
Definition: metadata_batch.cc:294
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:396
size_t grpc_metadata_batch_size(grpc_metadata_batch *batch)
Definition: metadata_batch.cc:359
grpc_error_handle 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:228
void grpc_metadata_batch_assert_ok(grpc_metadata_batch *batch)
Definition: metadata_batch.cc:80
grpc_error_handle 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:173
void grpc_metadata_batch_init(grpc_metadata_batch *batch)
Definition: metadata_batch.cc:85
struct grpc_mdelem_list grpc_mdelem_list
absl::optional< absl::string_view > grpc_metadata_batch_get_value(grpc_metadata_batch *batch, absl::string_view target_key, std::string *concatenated_value)
Returns metadata value(s) for the specified key.
Definition: metadata_batch.cc:303
grpc_error_handle grpc_metadata_batch_substitute(grpc_metadata_batch *batch, grpc_linked_mdelem *storage, grpc_mdelem new_mdelem)
Substitute a new mdelem for an old value.
Definition: metadata_batch.cc:327
grpc_error_handle 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:204
struct grpc_linked_mdelem grpc_linked_mdelem
grpc_error_handle 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:149
grpc_error_handle 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:377
void grpc_metadata_batch_move(grpc_metadata_batch *src, grpc_metadata_batch *dst)
Definition: metadata_batch.cc:415
bool grpc_metadata_batch_is_empty(grpc_metadata_batch *batch)
Definition: metadata_batch.cc:354
void grpc_metadata_batch_clear(grpc_metadata_batch *batch)
Definition: metadata_batch.cc:349
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:273
void grpc_metadata_batch_destroy(grpc_metadata_batch *batch)
Definition: metadata_batch.cc:90
grpc_filtered_mdelem(* grpc_metadata_batch_filter_func)(void *user_data, grpc_mdelem elem)
Definition: metadata_batch.h:183
grpc_transport_stream_op_batch * batch
Definition: retry_filter.cc:208
grpc_metadata_batch_callouts_index
Definition: static_metadata.h:523
Definition: error_internal.h:41
Definition: metadata_batch.h:172
grpc_mdelem md
Definition: metadata_batch.h:174
grpc_error_handle error
Definition: metadata_batch.h:173
Definition: metadata_batch.h:36
void * reserved
Definition: metadata_batch.h:42
grpc_linked_mdelem()
Definition: metadata_batch.h:37
struct grpc_linked_mdelem * prev
Definition: metadata_batch.h:41
grpc_mdelem md
Definition: metadata_batch.h:39
struct grpc_linked_mdelem * next
Definition: metadata_batch.h:40
Definition: metadata_batch.h:45
grpc_linked_mdelem * head
Definition: metadata_batch.h:48
grpc_linked_mdelem * tail
Definition: metadata_batch.h:49
size_t default_count
Definition: metadata_batch.h:47
size_t count
Definition: metadata_batch.h:46
Definition: metadata.h:98
Definition: metadata_batch.h:52
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:59
grpc_metadata_batch_callouts idx
Definition: metadata_batch.h:55
grpc_mdelem_list list
Metadata elements in this batch.
Definition: metadata_batch.h:54
A grpc_slice s, if initialized, represents the byte range s.bytes[0..s.length-1].
Definition: slice.h:60
Definition: static_metadata.h:551