1 // 2 // 3 // Copyright 2016 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 <grpc/grpc.h> 20 #include <grpc/support/port_platform.h> 21 22 #include "src/core/config/core_configuration.h" 23 #include "src/core/handshaker/endpoint_info/endpoint_info_handshaker.h" 24 #include "src/core/handshaker/http_connect/http_connect_handshaker.h" 25 #include "src/core/handshaker/tcp_connect/tcp_connect_handshaker.h" 26 #include "src/core/lib/surface/channel_stack_type.h" 27 #include "src/core/lib/surface/lame_client.h" 28 #include "src/core/server/server.h" 29 #include "src/core/server/server_call_tracer_filter.h" 30 31 namespace grpc_event_engine { 32 namespace experimental { 33 extern void RegisterEventEngineChannelArgPreconditioning( 34 grpc_core::CoreConfiguration::Builder* builder); 35 } // namespace experimental 36 } // namespace grpc_event_engine 37 38 namespace grpc_core { 39 40 extern void BuildClientChannelConfiguration( 41 CoreConfiguration::Builder* builder); 42 extern void SecurityRegisterHandshakerFactories( 43 CoreConfiguration::Builder* builder); 44 extern void RegisterClientAuthorityFilter(CoreConfiguration::Builder* builder); 45 extern void RegisterLegacyChannelIdleFilters( 46 CoreConfiguration::Builder* builder); 47 extern void RegisterGrpcLbPolicy(CoreConfiguration::Builder* builder); 48 extern void RegisterHttpFilters(CoreConfiguration::Builder* builder); 49 extern void RegisterMessageSizeFilter(CoreConfiguration::Builder* builder); 50 extern void RegisterSecurityFilters(CoreConfiguration::Builder* builder); 51 extern void RegisterServiceConfigChannelArgFilter( 52 CoreConfiguration::Builder* builder); 53 extern void RegisterExtraFilters(CoreConfiguration::Builder* builder); 54 extern void RegisterResourceQuota(CoreConfiguration::Builder* builder); 55 extern void FaultInjectionFilterRegister(CoreConfiguration::Builder* builder); 56 extern void RegisterDnsResolver(CoreConfiguration::Builder* builder); 57 extern void RegisterBackendMetricFilter(CoreConfiguration::Builder* builder); 58 extern void RegisterSockaddrResolver(CoreConfiguration::Builder* builder); 59 extern void RegisterFakeResolver(CoreConfiguration::Builder* builder); 60 extern void RegisterPriorityLbPolicy(CoreConfiguration::Builder* builder); 61 extern void RegisterOutlierDetectionLbPolicy( 62 CoreConfiguration::Builder* builder); 63 extern void RegisterWeightedTargetLbPolicy(CoreConfiguration::Builder* builder); 64 extern void RegisterPickFirstLbPolicy(CoreConfiguration::Builder* builder); 65 extern void RegisterRoundRobinLbPolicy(CoreConfiguration::Builder* builder); 66 extern void RegisterWeightedRoundRobinLbPolicy( 67 CoreConfiguration::Builder* builder); 68 extern void RegisterHttpProxyMapper(CoreConfiguration::Builder* builder); 69 extern void RegisterConnectedChannel(CoreConfiguration::Builder* builder); 70 extern void RegisterLoadBalancedCallDestination( 71 CoreConfiguration::Builder* builder); 72 #ifndef GRPC_NO_RLS 73 extern void RegisterRlsLbPolicy(CoreConfiguration::Builder* builder); 74 #endif // !GRPC_NO_RLS 75 76 namespace { 77 RegisterBuiltins(CoreConfiguration::Builder * builder)78void RegisterBuiltins(CoreConfiguration::Builder* builder) { 79 RegisterServerCallTracerFilter(builder); 80 builder->channel_init() 81 ->RegisterV2Filter<LameClientFilter>(GRPC_CLIENT_LAME_CHANNEL) 82 .Terminal(); 83 builder->channel_init() 84 ->RegisterFilter(GRPC_SERVER_CHANNEL, &Server::kServerTopFilter) 85 .SkipV3() 86 .BeforeAll(); 87 } 88 89 } // namespace 90 BuildCoreConfiguration(CoreConfiguration::Builder * builder)91void BuildCoreConfiguration(CoreConfiguration::Builder* builder) { 92 grpc_event_engine::experimental::RegisterEventEngineChannelArgPreconditioning( 93 builder); 94 // The order of the handshaker registration is crucial here. 95 // We want TCP connect handshaker to be registered last so that it is added 96 // to the start of the handshaker list. 97 RegisterEndpointInfoHandshaker(builder); 98 RegisterHttpConnectHandshaker(builder); 99 RegisterTCPConnectHandshaker(builder); 100 RegisterPriorityLbPolicy(builder); 101 RegisterOutlierDetectionLbPolicy(builder); 102 RegisterWeightedTargetLbPolicy(builder); 103 RegisterPickFirstLbPolicy(builder); 104 RegisterRoundRobinLbPolicy(builder); 105 RegisterWeightedRoundRobinLbPolicy(builder); 106 BuildClientChannelConfiguration(builder); 107 SecurityRegisterHandshakerFactories(builder); 108 RegisterClientAuthorityFilter(builder); 109 RegisterLegacyChannelIdleFilters(builder); 110 RegisterConnectedChannel(builder); 111 RegisterGrpcLbPolicy(builder); 112 RegisterHttpFilters(builder); 113 RegisterMessageSizeFilter(builder); 114 RegisterServiceConfigChannelArgFilter(builder); 115 RegisterResourceQuota(builder); 116 FaultInjectionFilterRegister(builder); 117 RegisterDnsResolver(builder); 118 RegisterSockaddrResolver(builder); 119 RegisterFakeResolver(builder); 120 RegisterHttpProxyMapper(builder); 121 RegisterLoadBalancedCallDestination(builder); 122 #ifndef GRPC_NO_RLS 123 RegisterRlsLbPolicy(builder); 124 #endif // !GRPC_NO_RLS 125 // Run last so it gets a consistent location. 126 // TODO(ctiller): Is this actually necessary? 127 RegisterBackendMetricFilter(builder); 128 RegisterSecurityFilters(builder); 129 RegisterExtraFilters(builder); 130 RegisterBuiltins(builder); 131 } 132 133 } // namespace grpc_core 134