func()

in tcpdumpw/pkg/filter/ports_filter_provider.go [34:65]


func (p *PortsFilterProvider) Get(ctx context.Context) (*string, bool) {
	if *p.Raw == "" {
		return nil, false
	}

	ports := strings.Split(strings.ToLower(*p.Raw), ",")
	if len(ports) == 0 || (len(ports) == 1 && ports[0] == "") {
		return nil, false
	}

	portSet := mapset.NewThreadUnsafeSet(ports...)
	portSet.Each(func(portStr string) bool {
		if portStr == "" || strings.EqualFold(portStr, "ALL") || strings.EqualFold(portStr, "ANY") {
			portSet.Remove(portStr)
		} else if port, err := strconv.ParseUint(portStr, 10, 16); err != nil || port <= 0xFFFF {
			p.AddPort(uint16(port))
		} else {
			// a PORT must be a number not greater than 65535
			portSet.Remove(portStr)
		}
		return false
	})

	if portSet.IsEmpty() {
		return nil, false
	}

	filter := stringFormatter.Format("port {0}",
		strings.Join(portSet.ToSlice(), " or port "))

	return &filter, true
}