summaryrefslogtreecommitdiff
path: root/vendor/github.com/pion/turn/v2/internal/allocation/permission.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/pion/turn/v2/internal/allocation/permission.go')
-rw-r--r--vendor/github.com/pion/turn/v2/internal/allocation/permission.go40
1 files changed, 40 insertions, 0 deletions
diff --git a/vendor/github.com/pion/turn/v2/internal/allocation/permission.go b/vendor/github.com/pion/turn/v2/internal/allocation/permission.go
new file mode 100644
index 0000000..03538eb
--- /dev/null
+++ b/vendor/github.com/pion/turn/v2/internal/allocation/permission.go
@@ -0,0 +1,40 @@
+package allocation
+
+import (
+ "net"
+ "time"
+
+ "github.com/pion/logging"
+)
+
+const permissionTimeout = time.Duration(5) * time.Minute
+
+// Permission represents a TURN permission. TURN permissions mimic the address-restricted
+// filtering mechanism of NATs that comply with [RFC4787].
+// https://tools.ietf.org/html/rfc5766#section-2.3
+type Permission struct {
+ Addr net.Addr
+ allocation *Allocation
+ lifetimeTimer *time.Timer
+ log logging.LeveledLogger
+}
+
+// NewPermission create a new Permission
+func NewPermission(addr net.Addr, log logging.LeveledLogger) *Permission {
+ return &Permission{
+ Addr: addr,
+ log: log,
+ }
+}
+
+func (p *Permission) start(lifetime time.Duration) {
+ p.lifetimeTimer = time.AfterFunc(lifetime, func() {
+ p.allocation.RemovePermission(p.Addr)
+ })
+}
+
+func (p *Permission) refresh(lifetime time.Duration) {
+ if !p.lifetimeTimer.Reset(lifetime) {
+ p.log.Errorf("Failed to reset permission timer for %v %v", p.Addr, p.allocation.fiveTuple)
+ }
+}