addr.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package proto
  2. import (
  3. "fmt"
  4. "net"
  5. )
  6. // Addr is ip:port.
  7. type Addr struct {
  8. IP net.IP
  9. Port int
  10. }
  11. // Network implements net.Addr.
  12. func (Addr) Network() string { return "turn" }
  13. // FromUDPAddr sets addr to UDPAddr.
  14. func (a *Addr) FromUDPAddr(n *net.UDPAddr) {
  15. a.IP = n.IP
  16. a.Port = n.Port
  17. }
  18. // Equal returns true if b == a.
  19. func (a Addr) Equal(b Addr) bool {
  20. if a.Port != b.Port {
  21. return false
  22. }
  23. return a.IP.Equal(b.IP)
  24. }
  25. // EqualIP returns true if a and b have equal IP addresses.
  26. func (a Addr) EqualIP(b Addr) bool {
  27. return a.IP.Equal(b.IP)
  28. }
  29. func (a Addr) String() string {
  30. return fmt.Sprintf("%s:%d", a.IP, a.Port)
  31. }
  32. // FiveTuple represents 5-TUPLE value.
  33. type FiveTuple struct {
  34. Client Addr
  35. Server Addr
  36. Proto Protocol
  37. }
  38. func (t FiveTuple) String() string {
  39. return fmt.Sprintf("%s->%s (%s)",
  40. t.Client, t.Server, t.Proto,
  41. )
  42. }
  43. // Equal returns true if b == t.
  44. func (t FiveTuple) Equal(b FiveTuple) bool {
  45. if t.Proto != b.Proto {
  46. return false
  47. }
  48. if !t.Client.Equal(b.Client) {
  49. return false
  50. }
  51. if !t.Server.Equal(b.Server) {
  52. return false
  53. }
  54. return true
  55. }