GRPC C++  1.39.1
channel_args.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_CHANNEL_CHANNEL_ARGS_H
20 #define GRPC_CORE_LIB_CHANNEL_CHANNEL_ARGS_H
21 
23 
24 #include <string>
25 
26 #include <grpc/grpc.h>
27 
29 
30 // Channel args are intentionally immutable, to avoid the need for locking.
31 
34 
37 
41  const grpc_arg* to_add,
42  size_t num_to_add);
43 
47  const grpc_channel_args* src, const char** to_remove, size_t num_to_remove);
48 
52  const grpc_channel_args* src, const char** to_remove, size_t num_to_remove,
53  const grpc_arg* to_add, size_t num_to_add);
54 
57  const grpc_channel_args* b);
58 
63 }
64 
66  const grpc_channel_args* b);
67 
70  const char* name);
71 
73 
74 typedef struct grpc_integer_options {
75  int default_value; // Return this if value is outside of expected bounds.
76  int min_value;
77  int max_value;
79 
82  const grpc_integer_options options);
86  const char* name,
87  const grpc_integer_options options);
88 
92 char* grpc_channel_arg_get_string(const grpc_arg* arg);
96  const char* name);
99 bool grpc_channel_arg_get_bool(const grpc_arg* arg, bool default_value);
103  const char* name, bool default_value);
104 
105 template <typename T>
107  const char* name) {
108  const grpc_arg* arg = grpc_channel_args_find(args, name);
109  if (arg == nullptr || arg->type != GRPC_ARG_POINTER) return nullptr;
110  return static_cast<T*>(arg->value.pointer.p);
111 }
112 
113 // Helpers for creating channel args.
114 grpc_arg grpc_channel_arg_string_create(char* name, char* value);
115 grpc_arg grpc_channel_arg_integer_create(char* name, int value);
116 grpc_arg grpc_channel_arg_pointer_create(char* name, void* value,
117  const grpc_arg_pointer_vtable* vtable);
118 
119 // Returns a string representing channel args in human-readable form.
120 std::string grpc_channel_args_string(const grpc_channel_args* args);
121 
122 // Takes ownership of the old_args
123 typedef grpc_channel_args* (*grpc_channel_args_client_channel_creation_mutator)(
124  const char* target, grpc_channel_args* old_args,
126 
127 // Should be called only once globaly before grpc is init'ed.
130 // This will be called at the creation of each channel.
133 
134 #endif /* GRPC_CORE_LIB_CHANNEL_CHANNEL_ARGS_H */
int grpc_channel_arg_get_integer(const grpc_arg *arg, const grpc_integer_options options)
Returns the value of arg, subject to the constraints in options.
Definition: channel_args.cc:248
T * grpc_channel_args_find_pointer(const grpc_channel_args *args, const char *name)
Definition: channel_args.h:106
grpc_channel_args * grpc_channel_args_union(const grpc_channel_args *a, const grpc_channel_args *b)
Perform the union of a and b, prioritizing a entries.
Definition: channel_args.cc:125
std::string grpc_channel_args_string(const grpc_channel_args *args)
Definition: channel_args.cc:345
const grpc_arg * grpc_channel_args_find(const grpc_channel_args *args, const char *name)
Returns the value of argument name from args, or NULL if not found.
Definition: channel_args.cc:236
struct grpc_integer_options grpc_integer_options
grpc_arg grpc_channel_arg_pointer_create(char *name, void *value, const grpc_arg_pointer_vtable *vtable)
Definition: channel_args.cc:335
int grpc_channel_args_compare(const grpc_channel_args *a, const grpc_channel_args *b)
Definition: channel_args.cc:223
grpc_arg grpc_channel_arg_string_create(char *name, char *value)
Definition: channel_args.cc:319
char * grpc_channel_args_find_string(const grpc_channel_args *args, const char *name)
Similar to the above, but needs to find the arg from args by the name first.
Definition: channel_args.cc:284
grpc_channel_args *(* grpc_channel_args_client_channel_creation_mutator)(const char *target, grpc_channel_args *old_args, grpc_channel_stack_type type)
Definition: channel_args.h:123
grpc_channel_args * grpc_channel_args_normalize(const grpc_channel_args *src)
Copy the arguments in src into a new instance, stably sorting keys.
Definition: channel_args.cc:181
grpc_channel_args * grpc_channel_args_copy_and_remove(const grpc_channel_args *src, const char **to_remove, size_t num_to_remove)
Copies the arguments in src except for those whose keys are in to_remove.
Definition: channel_args.cc:67
int grpc_channel_args_find_integer(const grpc_channel_args *args, const char *name, const grpc_integer_options options)
Similar to the above, but needs to find the arg from args by the name first.
Definition: channel_args.cc:268
char * grpc_channel_arg_get_string(const grpc_arg *arg)
Returns the value of arg if arg is of type GRPC_ARG_STRING.
Definition: channel_args.cc:275
bool grpc_channel_args_find_bool(const grpc_channel_args *args, const char *name, bool default_value)
Similar to the above, but needs to find the arg from args by the name first.
Definition: channel_args.cc:308
grpc_arg grpc_channel_arg_integer_create(char *name, int value)
Definition: channel_args.cc:327
grpc_channel_args_client_channel_creation_mutator grpc_channel_args_get_client_channel_creation_mutator()
Definition: channel_args.cc:379
void grpc_channel_args_set_client_channel_creation_mutator(grpc_channel_args_client_channel_creation_mutator cb)
Definition: channel_args.cc:373
bool grpc_channel_args_want_minimal_stack(const grpc_channel_args *args)
Definition: channel_args.cc:314
grpc_channel_args * grpc_channel_args_copy_and_add(const grpc_channel_args *src, const grpc_arg *to_add, size_t num_to_add)
Copy the arguments in src and append to_add.
Definition: channel_args.cc:60
void grpc_channel_args_destroy(grpc_channel_args *a)
Destroy arguments created by grpc_channel_args_copy.
Definition: channel_args.cc:203
bool grpc_channel_arg_get_bool(const grpc_arg *arg, bool default_value)
If arg is of type GRPC_ARG_INTEGER, returns true if it's non-zero.
Definition: channel_args.cc:290
grpc_channel_args * grpc_channel_args_copy(const grpc_channel_args *src)
Copy the arguments in src into a new instance.
Definition: channel_args.cc:121
grpc_channel_args * grpc_channel_args_copy_and_add_and_remove(const grpc_channel_args *src, const char **to_remove, size_t num_to_remove, const grpc_arg *to_add, size_t num_to_add)
Copies the arguments from src except for those whose keys are in to_remove and appends the arguments ...
Definition: channel_args.cc:82
grpc_channel_stack_type
Definition: channel_stack_type.h:26
@ GRPC_ARG_POINTER
Definition: grpc_types.h:82
void * p
Definition: grpc_types.h:110
Definition: grpc_types.h:85
A single argument...
Definition: grpc_types.h:103
union grpc_arg::grpc_arg_value value
grpc_arg_type type
Definition: grpc_types.h:104
An array of arguments that can be passed around.
Definition: grpc_types.h:132
Definition: channel_args.h:74
int default_value
Definition: channel_args.h:75
int max_value
Definition: channel_args.h:77
int min_value
Definition: channel_args.h:76
struct grpc_arg::grpc_arg_value::grpc_arg_pointer pointer
DiscoveryMechanismType type
Definition: xds_cluster_resolver.cc:73