38 void* XdsChannelStackModifierArgCopy(
void* p) {
39 XdsChannelStackModifier*
arg =
static_cast<XdsChannelStackModifier*
>(
p);
40 return arg->Ref().release();
43 void XdsChannelStackModifierArgDestroy(
void* p) {
44 XdsChannelStackModifier*
arg =
static_cast<XdsChannelStackModifier*
>(
p);
48 int XdsChannelStackModifierArgCmp(
void* p,
void* q) {
53 XdsChannelStackModifierArgCopy, XdsChannelStackModifierArgDestroy,
54 XdsChannelStackModifierArgCmp};
56 const char* kXdsChannelStackModifierChannelArgName =
57 "grpc.internal.xds_channel_stack_modifier";
63 auto it =
builder->mutable_stack()->begin();
64 while (
it !=
builder->mutable_stack()->end()) {
65 const char* filter_name_at_it = (*it)->name;
66 if (strcmp(
"census_server", filter_name_at_it) == 0 ||
67 strcmp(
"opencensus_server", filter_name_at_it) == 0) {
72 if (
it ==
builder->mutable_stack()->end()) {
91 const_cast<char*
>(kXdsChannelStackModifierChannelArgName),
98 grpc_channel_args_find_pointer<XdsChannelStackModifier>(
99 &
args, kXdsChannelStackModifierChannelArgName);
100 return config_selector_provider !=
nullptr ? config_selector_provider->
Ref()
105 builder->channel_init()->RegisterStage(
111 if (channel_stack_modifier !=
nullptr) {