Documentation
¶
Overview ¶
Package allocation contains all CRUD operations for allocations
Index ¶
- type Allocation
- func (a *Allocation) AddChannelBind(chanBind *ChannelBind, lifetime time.Duration) error
- func (a *Allocation) AddPermission(perms *Permission)
- func (a *Allocation) Close() error
- func (a *Allocation) GetChannelByAddr(addr net.Addr) *ChannelBind
- func (a *Allocation) GetChannelByNumber(number proto.ChannelNumber) *ChannelBind
- func (a *Allocation) GetPermission(addr net.Addr) *Permission
- func (a *Allocation) GetResponseCache() (id [stun.TransactionIDSize]byte, attrs []stun.Setter)
- func (a *Allocation) ListChannelBindings() []*ChannelBind
- func (a *Allocation) ListPermissions() []*Permission
- func (a *Allocation) Refresh(lifetime time.Duration)
- func (a *Allocation) RemoveChannelBind(number proto.ChannelNumber) bool
- func (a *Allocation) RemovePermission(addr net.Addr)
- func (a *Allocation) SetResponseCache(transactionID [stun.TransactionIDSize]byte, attrs []stun.Setter)
- type ChannelBind
- type EventHandler
- type FiveTuple
- type FiveTupleFingerprint
- type Manager
- func (m *Manager) AllocationCount() int
- func (m *Manager) Close() error
- func (m *Manager) CreateAllocation(fiveTuple *FiveTuple, turnSocket net.PacketConn, requestedPort int, ...) (*Allocation, error)
- func (m *Manager) CreateReservation(reservationToken string, port int)
- func (m *Manager) DeleteAllocation(fiveTuple *FiveTuple)
- func (m *Manager) GetAllocation(fiveTuple *FiveTuple) *Allocation
- func (m *Manager) GetRandomEvenPort() (int, error)
- func (m *Manager) GetReservation(reservationToken string) (int, bool)
- func (m *Manager) GrantPermission(sourceAddr net.Addr, peerIP net.IP) error
- type ManagerConfig
- type Permission
- type Protocol
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, eventHandler EventHandler, 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) 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) ListChannelBindings ¶ added in v4.1.0
func (a *Allocation) ListChannelBindings() []*ChannelBind
ListChannelBindings returns the channel bindings associated with an allocation.
func (*Allocation) ListPermissions ¶ added in v4.1.0
func (a *Allocation) ListPermissions() []*Permission
ListPermissions returns the permissions associated with an allocation.
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 EventHandler ¶ added in v4.1.0
type EventHandler struct {
// OnAuth is called after an authentication request has been processed with the TURN method
// triggering the authentication request (either "Allocate", "Refresh" "CreatePermission",
// or "ChannelBind"), and the verdict is the authentication result.
OnAuth func(srcAddr, dstAddr net.Addr, protocol, username, realm string, method string, verdict bool)
// OnAllocationCreated is called after a new allocation has been made. The relayAddr
// argument specifies the relay address and requestedPort is the port requested by the
// client (if any).
OnAllocationCreated func(srcAddr, dstAddr net.Addr, protocol, username, realm string,
relayAddr net.Addr, requestedPort int)
// OnAllocationDeleted is called after an allocation has been removed.
OnAllocationDeleted func(srcAddr, dstAddr net.Addr, protocol, username, realm string)
// OnAllocationError is called when the readloop hdndling an allocation exits with an
// error with an error message.
OnAllocationError func(srcAddr, dstAddr net.Addr, protocol, message string)
// OnPermissionCreated is called after a new permission has been made to an IP address.
OnPermissionCreated func(srcAddr, dstAddr net.Addr, protocol, username, realm string,
relayAddr net.Addr, peer net.IP)
// OnPermissionDeleted is called after a permission for a given IP address has been
// removed.
OnPermissionDeleted func(srcAddr, dstAddr net.Addr, protocol, username, realm string,
relayAddr net.Addr, peer net.IP)
// OnChannelCreated is called after a new channel has been made. The relay address, the
// peer address and the channel number can be used to uniquely identify the channel
// created.
OnChannelCreated func(srcAddr, dstAddr net.Addr, protocol, username, realm string,
relayAddr, peer net.Addr, channelNumber uint16)
// OnChannelDeleted is called after a channel has been removed from the server. The relay
// address, the peer address and the channel number can be used to uniquely identify the
// channel deleted.
OnChannelDeleted func(srcAddr, dstAddr net.Addr, protocol, username, realm string,
relayAddr, peer net.Addr, channelNumber uint16)
}
EventHandler is a set of callbacks that the server will call at certain hook points during an allocation's lifecycle. All events are reported with the context that identifies the allocation triggering the event (source and destination address, protocol, username and realm used for authenticating the allocation), plus additional callback specific parameters. It is OK to handle only a subset of the callbacks.
type FiveTuple ¶
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) 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 {
EventHandler EventHandler
// 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 ¶
AllocationCount returns the number of existing allocations.
func (*Manager) CreateAllocation ¶
func (m *Manager) CreateAllocation( fiveTuple *FiveTuple, turnSocket net.PacketConn, requestedPort int, lifetime time.Duration, username, realm string, ) (*Allocation, error)
CreateAllocation creates a new allocation and starts relaying.
func (*Manager) CreateReservation ¶
CreateReservation stores the reservation for the token+port.
func (*Manager) DeleteAllocation ¶
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 ¶
GetRandomEvenPort returns a random un-allocated udp4 port.
func (*Manager) GetReservation ¶
GetReservation returns the port for a given reservation if it exists.
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
EventHandler EventHandler
}
ManagerConfig a bag of config params for Manager.
type Permission ¶
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.