parse.go 748 B

123456789101112131415161718192021222324252627282930313233
  1. package nat
  2. import (
  3. "fmt"
  4. "strconv"
  5. "strings"
  6. )
  7. // ParsePortRange parses and validates the specified string as a port-range (8000-9000)
  8. func ParsePortRange(ports string) (uint64, uint64, error) {
  9. if ports == "" {
  10. return 0, 0, fmt.Errorf("empty string specified for ports")
  11. }
  12. if !strings.Contains(ports, "-") {
  13. start, err := strconv.ParseUint(ports, 10, 16)
  14. end := start
  15. return start, end, err
  16. }
  17. parts := strings.Split(ports, "-")
  18. start, err := strconv.ParseUint(parts[0], 10, 16)
  19. if err != nil {
  20. return 0, 0, err
  21. }
  22. end, err := strconv.ParseUint(parts[1], 10, 16)
  23. if err != nil {
  24. return 0, 0, err
  25. }
  26. if end < start {
  27. return 0, 0, fmt.Errorf("invalid range specified for port: %s", ports)
  28. }
  29. return start, end, nil
  30. }