func MakeListener()

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
}