• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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)78 void 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)91 void 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