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
}