allocation

package
v4.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 21, 2026 License: MIT Imports: 10 Imported by: 0

Documentation

Overview

Package allocation contains all CRUD operations for allocations

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Allocation

type Allocation struct {
	RelayAddr   net.Addr
	Protocol    Protocol
	TurnSocket  net.PacketConn
	RelaySocket net.PacketConn
	// contains filtered or unexported fields
}

Allocation is tied to a FiveTuple and relays traffic use CreateAllocation and GetAllocation to operate.

func NewAllocation

func NewAllocation(turnSocket net.PacketConn, fiveTuple *FiveTuple, log logging.LeveledLogger) *Allocation

NewAllocation creates a new instance of NewAllocation.

func (*Allocation) AddChannelBind

func (a *Allocation) AddChannelBind(chanBind *ChannelBind, lifetime time.Duration) error

AddChannelBind adds a new ChannelBind to the allocation, it also updates the permissions needed for this ChannelBind.

func (*Allocation) AddPermission

func (a *Allocation) AddPermission(perms *Permission)

AddPermission adds a new permission to the allocation.

func (*Allocation) Close

func (a *Allocation) Close() error

Close closes the allocation.

func (*Allocation) GetChannelByAddr

func (a *Allocation) GetChannelByAddr(addr net.Addr) *ChannelBind

GetChannelByAddr gets the ChannelBind from this allocation by net.Addr.

func (*Allocation) GetChannelByNumber

func (a *Allocation) GetChannelByNumber(number proto.ChannelNumber) *ChannelBind

GetChannelByNumber gets the ChannelBind from this allocation by id.

func (*Allocation) GetPermission

func (a *Allocation) GetPermission(addr net.Addr) *Permission

GetPermission gets the Permission from the allocation.

func (*Allocation) GetResponseCache

func (a *Allocation) GetResponseCache() (id [stun.TransactionIDSize]byte, attrs []stun.Setter)

GetResponseCache return response cache for retransmit allocation request.

func (*Allocation) Refresh

func (a *Allocation) Refresh(lifetime time.Duration)

Refresh updates the allocations lifetime.

func (*Allocation) RemoveChannelBind

func (a *Allocation) RemoveChannelBind(number proto.ChannelNumber) bool

RemoveChannelBind removes the ChannelBind from this allocation by id.

func (*Allocation) RemovePermission

func (a *Allocation) RemovePermission(addr net.Addr)

RemovePermission removes the net.Addr's fingerprint from the allocation's permissions.

func (*Allocation) SetResponseCache

func (a *Allocation) SetResponseCache(transactionID [stun.TransactionIDSize]byte, attrs []stun.Setter)

SetResponseCache cache allocation response for retransmit allocation request.

type ChannelBind

type ChannelBind struct {
	Peer   net.Addr
	Number proto.ChannelNumber
	// contains filtered or unexported fields
}

ChannelBind represents a TURN Channel See: https://tools.ietf.org/html/rfc5766#section-2.5

func NewChannelBind

func NewChannelBind(number proto.ChannelNumber, peer net.Addr, log logging.LeveledLogger) *ChannelBind

NewChannelBind creates a new ChannelBind.

type FiveTuple

type FiveTuple struct {
	Protocol
	SrcAddr, DstAddr net.Addr
}

FiveTuple is the combination (client IP address and port, server IP address and port, and transport protocol (currently one of UDP, TCP, or TLS)) used to communicate between the client and the server. The 5-tuple uniquely identifies this communication stream. The 5-tuple also uniquely identifies the Allocation on the server.

func (*FiveTuple) Equal

func (f *FiveTuple) Equal(b *FiveTuple) bool

Equal asserts if two FiveTuples are equal.

func (*FiveTuple) Fingerprint

func (f *FiveTuple) Fingerprint() (fp FiveTupleFingerprint)

Fingerprint is the identity of a FiveTuple.

type FiveTupleFingerprint

type FiveTupleFingerprint struct {
	// contains filtered or unexported fields
}

FiveTupleFingerprint is a comparable representation of a FiveTuple.

type Manager

type Manager struct {
	// contains filtered or unexported fields
}

Manager is used to hold active allocations.

func NewManager

func NewManager(config ManagerConfig) (*Manager, error)

NewManager creates a new instance of Manager.

func (*Manager) AllocationCount

func (m *Manager) AllocationCount() int

AllocationCount returns the number of existing allocations.

func (*Manager) Close

func (m *Manager) Close() error

Close closes the manager and closes all allocations it manages.

func (*Manager) CreateAllocation

func (m *Manager) CreateAllocation(
	fiveTuple *FiveTuple,
	turnSocket net.PacketConn,
	requestedPort int,
	lifetime time.Duration,
) (*Allocation, error)

CreateAllocation creates a new allocation and starts relaying.

func (*Manager) CreateReservation

func (m *Manager) CreateReservation(reservationToken string, port int)

CreateReservation stores the reservation for the token+port.

func (*Manager) DeleteAllocation

func (m *Manager) DeleteAllocation(fiveTuple *FiveTuple)

DeleteAllocation removes an allocation.

func (*Manager) GetAllocation

func (m *Manager) GetAllocation(fiveTuple *FiveTuple) *Allocation

GetAllocation fetches the allocation matching the passed FiveTuple.

func (*Manager) GetRandomEvenPort

func (m *Manager) GetRandomEvenPort() (int, error)

GetRandomEvenPort returns a random un-allocated udp4 port.

func (*Manager) GetReservation

func (m *Manager) GetReservation(reservationToken string) (int, bool)

GetReservation returns the port for a given reservation if it exists.

func (*Manager) GrantPermission

func (m *Manager) GrantPermission(sourceAddr net.Addr, peerIP net.IP) error

GrantPermission handles permission requests by calling the permission handler callback associated with the TURN server listener socket.

type ManagerConfig

type ManagerConfig struct {
	LeveledLogger      logging.LeveledLogger
	AllocatePacketConn func(network string, requestedPort int) (net.PacketConn, net.Addr, error)
	AllocateConn       func(network string, requestedPort int) (net.Conn, net.Addr, error)
	PermissionHandler  func(sourceAddr net.Addr, peerIP net.IP) bool
}

ManagerConfig a bag of config params for Manager.

type Permission

type Permission struct {
	Addr net.Addr
	// contains filtered or unexported fields
}

Permission represents a TURN permission. TURN permissions mimic the address-restricted filtering mechanism of NATs that comply with [RFC4787]. See: https://tools.ietf.org/html/rfc5766#section-2.3

func NewPermission

func NewPermission(addr net.Addr, log logging.LeveledLogger) *Permission

NewPermission create a new Permission.

type Protocol

type Protocol uint8

Protocol is an enum for relay protocol.

const (
	UDP Protocol = iota
	TCP
)

Network protocols for relay.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL
⌂ 换网址