in src/go/configgenerator/listener_generator.go [91:165]
func MakeListener(opts options.ConfigGeneratorOptions, httpFilterGenerators []filtergen.FilterGenerator, connectionManagerGen filtergen.FilterGenerator, routeGenerators []routegen.RouteGenerator) (*listenerpb.Listener, error) {
httpFilterConfigs, err := MakeHttpFilterConfigs(httpFilterGenerators)
if err != nil {
return nil, err
}
routeConfig, err := MakeRouteConfig(opts, httpFilterGenerators, routeGenerators)
if err != nil {
return nil, fmt.Errorf("makeHttpConnectionManagerRouteConfig got err: %s", err)
}
// HTTP connection manager filter configuration
hcmConfig, err := connectionManagerGen.GenFilterConfig()
if err != nil {
return nil, err
}
typedHCMConfig, ok := hcmConfig.(*hcmpb.HttpConnectionManager)
if !ok {
return nil, fmt.Errorf("HCM generator returned proto config of type %T, want HCM config", hcmConfig)
}
typedHCMConfig.HttpFilters = httpFilterConfigs
typedHCMConfig.RouteSpecifier = &hcmpb.HttpConnectionManager_RouteConfig{
RouteConfig: routeConfig,
}
networkFilterConfig, err := filtergen.FilterConfigToNetworkFilter(typedHCMConfig, filtergen.HTTPConnectionManagerFilterName)
if err != nil {
return nil, err
}
filterChain := &listenerpb.FilterChain{
Filters: []*listenerpb.Filter{
networkFilterConfig,
},
}
if opts.SslServerCertPath != "" {
transportSocket, err := util.CreateDownstreamTransportSocket(
opts.SslServerCertPath,
opts.SslServerRootCertPath,
opts.SslMinimumProtocol,
opts.SslMaximumProtocol,
opts.SslServerCipherSuites,
)
if err != nil {
return nil, err
}
filterChain.TransportSocket = transportSocket
}
listener := &listenerpb.Listener{
Name: util.IngressListenerName,
Address: &corepb.Address{
Address: &corepb.Address_SocketAddress{
SocketAddress: &corepb.SocketAddress{
Address: opts.ListenerAddress,
PortSpecifier: &corepb.SocketAddress_PortValue{
PortValue: uint32(opts.ListenerPort),
},
},
},
},
FilterChains: []*listenerpb.FilterChain{filterChain},
}
if opts.ConnectionBufferLimitBytes >= 0 {
listener.PerConnectionBufferLimitBytes = &wrapperspb.UInt32Value{
Value: uint32(opts.ConnectionBufferLimitBytes),
}
}
return listener, nil
}