summaryrefslogtreecommitdiff
path: root/vendor/github.com/pion/turn/v2/internal/proto/addr.go
blob: b1d654d9e19d3a0970603a911e1f0804ff1ee664 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package proto

import (
	"fmt"
	"net"
)

// Addr is ip:port.
type Addr struct {
	IP   net.IP
	Port int
}

// Network implements net.Addr.
func (Addr) Network() string { return "turn" }

// FromUDPAddr sets addr to UDPAddr.
func (a *Addr) FromUDPAddr(n *net.UDPAddr) {
	a.IP = n.IP
	a.Port = n.Port
}

// Equal returns true if b == a.
func (a Addr) Equal(b Addr) bool {
	if a.Port != b.Port {
		return false
	}
	return a.IP.Equal(b.IP)
}

// EqualIP returns true if a and b have equal IP addresses.
func (a Addr) EqualIP(b Addr) bool {
	return a.IP.Equal(b.IP)
}

func (a Addr) String() string {
	return fmt.Sprintf("%s:%d", a.IP, a.Port)
}

// FiveTuple represents 5-TUPLE value.
type FiveTuple struct {
	Client Addr
	Server Addr
	Proto  Protocol
}

func (t FiveTuple) String() string {
	return fmt.Sprintf("%s->%s (%s)",
		t.Client, t.Server, t.Proto,
	)
}

// Equal returns true if b == t.
func (t FiveTuple) Equal(b FiveTuple) bool {
	if t.Proto != b.Proto {
		return false
	}
	if !t.Client.Equal(b.Client) {
		return false
	}
	if !t.Server.Equal(b.Server) {
		return false
	}
	return true
}