port.go 1016 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package net
  2. import (
  3. "errors"
  4. "strconv"
  5. "github.com/v2ray/v2ray-core/common/serial"
  6. )
  7. var (
  8. // ErrorInvalidPortRage indicates an error during port range parsing.
  9. ErrorInvalidPortRange = errors.New("Invalid port range.")
  10. )
  11. type Port serial.Uint16Literal
  12. func PortFromBytes(port []byte) Port {
  13. return Port(serial.BytesLiteral(port).Uint16Value())
  14. }
  15. func PortFromInt(v int) (Port, error) {
  16. if v <= 0 || v > 65535 {
  17. return Port(0), ErrorInvalidPortRange
  18. }
  19. return Port(v), nil
  20. }
  21. func PortFromString(s string) (Port, error) {
  22. v, err := strconv.Atoi(s)
  23. if err != nil {
  24. return Port(0), ErrorInvalidPortRange
  25. }
  26. return PortFromInt(v)
  27. }
  28. func (this Port) Value() uint16 {
  29. return uint16(this)
  30. }
  31. func (this Port) Bytes() []byte {
  32. return serial.Uint16Literal(this).Bytes()
  33. }
  34. func (this Port) String() string {
  35. return serial.Uint16Literal(this).String()
  36. }
  37. type PortRange struct {
  38. From Port
  39. To Port
  40. }
  41. func (this PortRange) Contains(port Port) bool {
  42. return this.From <= port && port <= this.To
  43. }