func()

in pkg/config/xds/xds.go [80:109]


func (a *Xds) readDubboServiceFromListener() ([]string, error) {
	dubboServices := make([]string, 0)
	listeners, err := a.listenerMg.CloneXdsControlListener()
	if err != nil {
		return nil, err
	}

	for _, l := range listeners {
		for _, filter := range l.FilterChain.Filters {
			if filter.Name != constant.HTTPConnectManagerFilter {
				continue
			}
			var cfg *model.HttpConnectionManagerConfig
			if filter.Config != nil {
				if err := mapstructure.Decode(filter.Config, &cfg); err != nil {
					logger.Error("read listener config error when init xds", err)
					continue
				}
			}
			for _, httpFilter := range cfg.HTTPFilters {
				if httpFilter.Name == constant.HTTPDirectDubboProxyFilter {
					for _, route := range cfg.RouteConfig.Routes {
						dubboServices = append(dubboServices, route.Route.Cluster)
					}
				}
			}
		}
	}
	return dubboServices, nil
}