| 12345678910111213141516171819202122232425262728293031323334353637383940 |
- 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)
- }
- }
|