Source File
server_config.go
Belonging Package
github.com/pion/turn/v4
// SPDX-FileCopyrightText: 2023 The Pion community <https://pion.ly>// SPDX-License-Identifier: MITpackage turnimport (//nolint:gosec,gci)// RelayAddressGenerator is used to generate a RelayAddress when creating an allocation.// You can use one of the provided ones or provide your own.type RelayAddressGenerator interface {// Validate confirms that the RelayAddressGenerator is properly initializedValidate() error// Allocate a PacketConn (UDP) RelayAddressAllocatePacketConn(network string, requestedPort int) (net.PacketConn, net.Addr, error)// Allocate a Conn (TCP) RelayAddressAllocateConn(network string, requestedPort int) (net.Conn, net.Addr, error)}// PermissionHandler is a callback to filter incoming CreatePermission and ChannelBindRequest// requests based on the client IP address and port and the peer IP address the client intends to// connect to. If the client is behind a NAT then the filter acts on the server reflexive// ("mapped") address instead of the real client IP address and port. Note that TURN permissions// are per-allocation and per-peer-IP-address, to mimic the address-restricted filtering mechanism// of NATs that comply with [RFC4787], see https://tools.ietf.org/html/rfc5766#section-2.3.type PermissionHandler func(clientAddr net.Addr, peerIP net.IP) (ok bool)// DefaultPermissionHandler is convince function that grants permission to all peers.func (net.Addr, net.IP) ( bool) {return true}// PacketConnConfig is a single net.PacketConn to listen/write on.// This will be used for UDP listeners.type PacketConnConfig struct {PacketConn net.PacketConn// When an allocation is generated the RelayAddressGenerator// creates the net.PacketConn and returns the IP/Port it is available atRelayAddressGenerator RelayAddressGenerator// PermissionHandler is a callback to filter peer addresses. Can be set as nil, in which// case the DefaultPermissionHandler is automatically instantiated to admit all peer// connectionsPermissionHandler PermissionHandler}func ( *PacketConnConfig) () error {if .PacketConn == nil {return errConnUnset}if .RelayAddressGenerator != nil {if := .RelayAddressGenerator.Validate(); != nil {return}}return nil}// ListenerConfig is a single net.Listener to accept connections on.// This will be used for TCP, TLS and DTLS listeners.type ListenerConfig struct {Listener net.Listener// When an allocation is generated the RelayAddressGenerator// creates the net.PacketConn and returns the IP/Port it is available atRelayAddressGenerator RelayAddressGenerator// PermissionHandler is a callback to filter peer addresses. Can be set as nil, in which// case the DefaultPermissionHandler is automatically instantiated to admit all peer// connectionsPermissionHandler PermissionHandler}func ( *ListenerConfig) () error {if .Listener == nil {return errListenerUnset}if .RelayAddressGenerator == nil {return errRelayAddressGeneratorUnset}return .RelayAddressGenerator.Validate()}// AuthHandler is a callback used to handle incoming auth requests,// allowing users to customize Pion TURN with custom behavior.type AuthHandler func(username, realm string, srcAddr net.Addr) (key []byte, ok bool)// GenerateAuthKey is a convenience function to easily generate keys in the format used by AuthHandler.func (, , string) []byte {// #nosec:= md5.New()fmt.Fprint(, strings.Join([]string{, , }, ":")) // nolint: errcheckreturn .Sum(nil)}// ServerConfig configures the Pion TURN Server.type ServerConfig struct {// PacketConnConfigs and ListenerConfigs are a list of all the turn listeners// Each listener can have custom behavior around the creation of RelaysPacketConnConfigs []PacketConnConfigListenerConfigs []ListenerConfig// LoggerFactory must be set for logging from this server.LoggerFactory logging.LoggerFactory// Realm sets the realm for this serverRealm string// AuthHandler is a callback used to handle incoming auth requests,// allowing users to customize Pion TURN with custom behaviorAuthHandler AuthHandler// ChannelBindTimeout sets the lifetime of channel binding. Defaults to 10 minutes.ChannelBindTimeout time.Duration// Sets the server inbound MTU(Maximum transmition unit). Defaults to 1600 bytes.InboundMTU int}func ( *ServerConfig) () error {if len(.PacketConnConfigs) == 0 && len(.ListenerConfigs) == 0 {return errNoAvailableConns}for , := range .PacketConnConfigs {if := .validate(); != nil {return}}for , := range .ListenerConfigs {if := .validate(); != nil {return}}return nil}
![]() |
The pages are generated with Golds v0.8.2. (GOOS=linux GOARCH=amd64) Golds is a Go 101 project developed by Tapir Liu. PR and bug reports are welcome and can be submitted to the issue list. Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds. |