package awgserver import ( "fmt" "strconv" "strings" ) // HeaderRange represents an H1-H4 header value range for AWG packet detection. type HeaderRange struct { Min, Max uint32 } // Contains checks if value v falls within the range [Min, Max]. func (h HeaderRange) Contains(v uint32) bool { return v >= h.Min && v <= h.Max } func (h HeaderRange) String() string { if h.Min == h.Max { return fmt.Sprintf("%d", h.Min) } return fmt.Sprintf("%d-%d", h.Min, h.Max) } // ParseHeaderRange parses a string like "50000-100000" or "50000" into a HeaderRange. func ParseHeaderRange(s string) (HeaderRange, error) { if strings.Contains(s, "-") { parts := strings.SplitN(s, "-", 2) min, err := strconv.ParseUint(parts[0], 10, 32) if err != nil { return HeaderRange{}, fmt.Errorf("parse min: %w", err) } max, err := strconv.ParseUint(parts[1], 10, 32) if err != nil { return HeaderRange{}, fmt.Errorf("parse max: %w", err) } return HeaderRange{Min: uint32(min), Max: uint32(max)}, nil } v, err := strconv.ParseUint(s, 10, 32) if err != nil { return HeaderRange{}, fmt.Errorf("parse value: %w", err) } return HeaderRange{Min: uint32(v), Max: uint32(v)}, nil }