Documentation ¶
Overview ¶
Package ice implements the Interactive Connectivity Establishment (ICE) protocol defined in rfc5245.
Package ice ...
Package ice ...
Index ¶
- Constants
- Variables
- func GetHKDFUfragPwd(HkdfSecret []byte, HkdfSalt []byte, HkdfInfoPrefix []byte) ([]string, error)
- type Agent
- func (a *Agent) Accept(ctx context.Context, remoteUfrag, remotePwd string) (*Conn, error)
- func (a *Agent) AddRemoteCandidate(c Candidate) error
- func (a *Agent) Close() error
- func (a *Agent) Dial(ctx context.Context, remoteUfrag, remotePwd string) (*Conn, error)
- func (a *Agent) GatherCandidates() error
- func (a *Agent) GetCandidatePairsStats() []CandidatePairStats
- func (a *Agent) GetLocalCandidates() ([]Candidate, error)
- func (a *Agent) GetLocalCandidatesStats() []CandidateStats
- func (a *Agent) GetLocalUserCredentials() (frag string, pwd string, err error)
- func (a *Agent) GetRemoteCandidatesStats() []CandidateStats
- func (a *Agent) GetRemoteUserCredentials() (frag string, pwd string, err error)
- func (a *Agent) OnCandidate(f func(Candidate)) error
- func (a *Agent) OnConnectionStateChange(f func(ConnectionState)) error
- func (a *Agent) OnSelectedCandidatePairChange(f func(Candidate, Candidate)) error
- func (a *Agent) Restart(ufrag, pwd string) error
- func (a *Agent) SetRemoteCredentials(remoteUfrag, remotePwd string) error
- type AgentConfig
- type AttrControl
- type AttrControlled
- type AttrControlling
- type Candidate
- type CandidateHost
- func (c *CandidateHost) Address() string
- func (c *CandidateHost) Component() uint16
- func (c *CandidateHost) Deadline() (deadline time.Time, ok bool)
- func (c *CandidateHost) Done() <-chan struct{}
- func (c *CandidateHost) Equal(other Candidate) bool
- func (c *CandidateHost) Err() error
- func (c *CandidateHost) Foundation() string
- func (c *CandidateHost) ID() string
- func (c *CandidateHost) LastReceived() time.Time
- func (c *CandidateHost) LastSent() time.Time
- func (c *CandidateHost) LocalPreference() uint16
- func (c *CandidateHost) Marshal() string
- func (c *CandidateHost) NetworkType() NetworkType
- func (c *CandidateHost) Port() int
- func (c *CandidateHost) Priority() uint32
- func (c *CandidateHost) RelatedAddress() *CandidateRelatedAddress
- func (c *CandidateHost) SetComponent(component uint16)
- func (c *CandidateHost) String() string
- func (c *CandidateHost) TCPType() TCPType
- func (c *CandidateHost) Type() CandidateType
- func (c *CandidateHost) Value(key interface{}) interface{}
- type CandidateHostConfig
- type CandidatePairState
- type CandidatePairStats
- type CandidatePeerReflexive
- func (c *CandidatePeerReflexive) Address() string
- func (c *CandidatePeerReflexive) Component() uint16
- func (c *CandidatePeerReflexive) Deadline() (deadline time.Time, ok bool)
- func (c *CandidatePeerReflexive) Done() <-chan struct{}
- func (c *CandidatePeerReflexive) Equal(other Candidate) bool
- func (c *CandidatePeerReflexive) Err() error
- func (c *CandidatePeerReflexive) Foundation() string
- func (c *CandidatePeerReflexive) ID() string
- func (c *CandidatePeerReflexive) LastReceived() time.Time
- func (c *CandidatePeerReflexive) LastSent() time.Time
- func (c *CandidatePeerReflexive) LocalPreference() uint16
- func (c *CandidatePeerReflexive) Marshal() string
- func (c *CandidatePeerReflexive) NetworkType() NetworkType
- func (c *CandidatePeerReflexive) Port() int
- func (c *CandidatePeerReflexive) Priority() uint32
- func (c *CandidatePeerReflexive) RelatedAddress() *CandidateRelatedAddress
- func (c *CandidatePeerReflexive) SetComponent(component uint16)
- func (c *CandidatePeerReflexive) String() string
- func (c *CandidatePeerReflexive) TCPType() TCPType
- func (c *CandidatePeerReflexive) Type() CandidateType
- func (c *CandidatePeerReflexive) Value(key interface{}) interface{}
- type CandidatePeerReflexiveConfig
- type CandidateRelatedAddress
- type CandidateRelay
- func (c *CandidateRelay) Address() string
- func (c *CandidateRelay) Component() uint16
- func (c *CandidateRelay) Deadline() (deadline time.Time, ok bool)
- func (c *CandidateRelay) Done() <-chan struct{}
- func (c *CandidateRelay) Equal(other Candidate) bool
- func (c *CandidateRelay) Err() error
- func (c *CandidateRelay) Foundation() string
- func (c *CandidateRelay) ID() string
- func (c *CandidateRelay) LastReceived() time.Time
- func (c *CandidateRelay) LastSent() time.Time
- func (c *CandidateRelay) LocalPreference() uint16
- func (c *CandidateRelay) Marshal() string
- func (c *CandidateRelay) NetworkType() NetworkType
- func (c *CandidateRelay) Port() int
- func (c *CandidateRelay) Priority() uint32
- func (c *CandidateRelay) RelatedAddress() *CandidateRelatedAddress
- func (c *CandidateRelay) SetComponent(component uint16)
- func (c *CandidateRelay) String() string
- func (c *CandidateRelay) TCPType() TCPType
- func (c *CandidateRelay) Type() CandidateType
- func (c *CandidateRelay) Value(key interface{}) interface{}
- type CandidateRelayConfig
- type CandidateServerReflexive
- func (c *CandidateServerReflexive) Address() string
- func (c *CandidateServerReflexive) Component() uint16
- func (c *CandidateServerReflexive) Deadline() (deadline time.Time, ok bool)
- func (c *CandidateServerReflexive) Done() <-chan struct{}
- func (c *CandidateServerReflexive) Equal(other Candidate) bool
- func (c *CandidateServerReflexive) Err() error
- func (c *CandidateServerReflexive) Foundation() string
- func (c *CandidateServerReflexive) ID() string
- func (c *CandidateServerReflexive) LastReceived() time.Time
- func (c *CandidateServerReflexive) LastSent() time.Time
- func (c *CandidateServerReflexive) LocalPreference() uint16
- func (c *CandidateServerReflexive) Marshal() string
- func (c *CandidateServerReflexive) NetworkType() NetworkType
- func (c *CandidateServerReflexive) Port() int
- func (c *CandidateServerReflexive) Priority() uint32
- func (c *CandidateServerReflexive) RelatedAddress() *CandidateRelatedAddress
- func (c *CandidateServerReflexive) SetComponent(component uint16)
- func (c *CandidateServerReflexive) String() string
- func (c *CandidateServerReflexive) TCPType() TCPType
- func (c *CandidateServerReflexive) Type() CandidateType
- func (c *CandidateServerReflexive) Value(key interface{}) interface{}
- type CandidateServerReflexiveConfig
- type CandidateStats
- type CandidateType
- type Conn
- func (c *Conn) BytesReceived() uint64
- func (c *Conn) BytesSent() uint64
- func (c *Conn) Close() error
- func (c *Conn) LocalAddr() net.Addr
- func (c *Conn) Read(p []byte) (int, error)
- func (c *Conn) RemoteAddr() net.Addr
- func (c *Conn) SetDeadline(t time.Time) error
- func (c *Conn) SetReadDeadline(t time.Time) error
- func (c *Conn) SetWriteDeadline(t time.Time) error
- func (c *Conn) Write(p []byte) (int, error)
- type ConnectionState
- type GatheringState
- type MulticastDNSMode
- type NetworkType
- type PriorityAttr
- type ProtoType
- type Role
- type SchemeType
- type TCPMux
- type TCPMuxDefault
- type TCPMuxParams
- type TCPType
- type URL
- type UseCandidateAttr
Constants ¶
const ( // ComponentRTP indicates that the candidate is used for RTP ComponentRTP uint16 = 1 + iota // ComponentRTCP indicates that the candidate is used for RTCP ComponentRTCP )
const ( // CandidatePairStateWaiting means a check has not been performed for // this pair CandidatePairStateWaiting = iota + 1 // CandidatePairStateInProgress means a check has been sent for this pair, // but the transaction is in progress. CandidatePairStateInProgress // CandidatePairStateFailed means a check for this pair was already done // and failed, either never producing any response or producing an unrecoverable // failure response. CandidatePairStateFailed // CandidatePairStateSucceeded means a check for this pair was already // done and produced a successful result. CandidatePairStateSucceeded )
const ( // ConnectionStateNew ICE agent is gathering addresses ConnectionStateNew = iota + 1 // ConnectionStateChecking ICE agent has been given local and remote candidates, and is attempting to find a match ConnectionStateChecking // ConnectionStateConnected ICE agent has a pairing, but is still checking other pairs ConnectionStateConnected // ConnectionStateCompleted ICE agent has finished ConnectionStateCompleted // ConnectionStateFailed ICE agent never could successfully connect ConnectionStateFailed // ConnectionStateDisconnected ICE agent connected successfully, but has entered a failed state ConnectionStateDisconnected // ConnectionStateClosed ICE agent has finished and is no longer handling requests ConnectionStateClosed )
List of supported States
const Unknown = iota
Unknown defines default public constant to use for "enum" like struct comparisons when no value was defined.
Variables ¶
var ( // ErrUnknownType indicates an error with Unknown info. ErrUnknownType = errors.New("Unknown") // ErrSchemeType indicates the scheme type could not be parsed. ErrSchemeType = errors.New("unknown scheme type") // ErrSTUNQuery indicates query arguments are provided in a STUN URL. ErrSTUNQuery = errors.New("queries not supported in stun address") // ErrInvalidQuery indicates an malformed query is provided. ErrInvalidQuery = errors.New("invalid query") // ErrHost indicates malformed hostname is provided. ErrHost = errors.New("invalid hostname") // ErrPort indicates malformed port is provided. ErrPort = errors.New("invalid port") // ErrLocalUfragInsufficientBits indicates local username fragment insufficient bits are provided. // Have to be at least 24 bits long ErrLocalUfragInsufficientBits = errors.New("local username fragment is less than 24 bits long") // ErrLocalPwdInsufficientBits indicates local passoword insufficient bits are provided. // Have to be at least 128 bits long ErrLocalPwdInsufficientBits = errors.New("local password is less than 128 bits long") // ErrProtoType indicates an unsupported transport type was provided. ErrProtoType = errors.New("invalid transport protocol type") // ErrClosed indicates the agent is closed ErrClosed = errors.New("the agent is closed") // ErrNoCandidatePairs indicates agent does not have a valid candidate pair ErrNoCandidatePairs = errors.New("no candidate pairs available") // ErrCanceledByCaller indicates agent connection was canceled by the caller ErrCanceledByCaller = errors.New("connecting canceled by caller") // ErrMultipleStart indicates agent was started twice ErrMultipleStart = errors.New("attempted to start agent twice") // ErrRemoteUfragEmpty indicates agent was started with an empty remote ufrag ErrRemoteUfragEmpty = errors.New("remote ufrag is empty") // ErrRemotePwdEmpty indicates agent was started with an empty remote pwd ErrRemotePwdEmpty = errors.New("remote pwd is empty") // ErrNoOnCandidateHandler indicates agent was started without OnCandidate ErrNoOnCandidateHandler = errors.New("no OnCandidate provided") // ErrMultipleGatherAttempted indicates GatherCandidates has been called multiple times ErrMultipleGatherAttempted = errors.New("attempting to gather candidates during gathering state") // ErrUsernameEmpty indicates agent was give TURN URL with an empty Username ErrUsernameEmpty = errors.New("username is empty") // ErrPasswordEmpty indicates agent was give TURN URL with an empty Password ErrPasswordEmpty = errors.New("password is empty") // ErrAddressParseFailed indicates we were unable to parse a candidate address ErrAddressParseFailed = errors.New("failed to parse address") // ErrLiteUsingNonHostCandidates indicates non host candidates were selected for a lite agent ErrLiteUsingNonHostCandidates = errors.New("lite agents must only use host candidates") // ErrUselessUrlsProvided indicates that one or more URL was provided to the agent but no host // candidate required them ErrUselessUrlsProvided = errors.New("agent does not need URL with selected candidate types") // ErrUnsupportedNAT1To1IPCandidateType indicates that the specified NAT1To1IPCandidateType is // unsupported ErrUnsupportedNAT1To1IPCandidateType = errors.New("unsupported 1:1 NAT IP candidate type") // ErrInvalidNAT1To1IPMapping indicates that the given 1:1 NAT IP mapping is invalid ErrInvalidNAT1To1IPMapping = errors.New("invalid 1:1 NAT IP mapping") // ErrExternalMappedIPNotFound in NAT1To1IPMapping ErrExternalMappedIPNotFound = errors.New("external mapped IP not found") // ErrMulticastDNSWithNAT1To1IPMapping indicates that the mDNS gathering cannot be used along // with 1:1 NAT IP mapping for host candidate. ErrMulticastDNSWithNAT1To1IPMapping = errors.New("mDNS gathering cannot be used with 1:1 NAT IP mapping for host candidate") // ErrIneffectiveNAT1To1IPMappingHost indicates that 1:1 NAT IP mapping for host candidate is // requested, but the host candidate type is disabled. ErrIneffectiveNAT1To1IPMappingHost = errors.New("1:1 NAT IP mapping for host candidate ineffective") // ErrIneffectiveNAT1To1IPMappingSrflx indicates that 1:1 NAT IP mapping for srflx candidate is // requested, but the srflx candidate type is disabled. ErrIneffectiveNAT1To1IPMappingSrflx = errors.New("1:1 NAT IP mapping for srflx candidate ineffective") // ErrInvalidMulticastDNSHostName indicates an invalid MulticastDNSHostName ErrInvalidMulticastDNSHostName = errors.New("invalid mDNS HostName, must end with .local and can only contain a single '.'") // ErrRestartWhenGathering indicates Restart was called when Agent is in GatheringStateGathering ErrRestartWhenGathering = errors.New("ICE Agent can not be restarted when gathering") // ErrRunCanceled indicates a run operation was canceled by its individual done ErrRunCanceled = errors.New("run was canceled by done") // ErrTCPMuxNotInitialized indicates TCPMux is not initialized and that invalidTCPMux is used. ErrTCPMuxNotInitialized = errors.New("TCPMux is not initialized") // ErrTCPRemoteAddrAlreadyExists indicates we already have the connection with same remote addr. ErrTCPRemoteAddrAlreadyExists = errors.New("conn with same remote addr already exists") )
Functions ¶
Types ¶
type Agent ¶
type Agent struct { // Pseudo random reader UfragReader io.Reader PwdReader io.Reader // contains filtered or unexported fields }
Agent represents the ICE agent
func (*Agent) Accept ¶
Accept connects to the remote agent, acting as the controlled ice agent. Accept blocks until at least one ice candidate pair has successfully connected.
func (*Agent) AddRemoteCandidate ¶
AddRemoteCandidate adds a new remote candidate
func (*Agent) Dial ¶
Dial connects to the remote agent, acting as the controlling ice agent. Dial blocks until at least one ice candidate pair has successfully connected.
func (*Agent) GatherCandidates ¶
GatherCandidates initiates the trickle based gathering process.
func (*Agent) GetCandidatePairsStats ¶
func (a *Agent) GetCandidatePairsStats() []CandidatePairStats
GetCandidatePairsStats returns a list of candidate pair stats
func (*Agent) GetLocalCandidates ¶
GetLocalCandidates returns the local candidates
func (*Agent) GetLocalCandidatesStats ¶
func (a *Agent) GetLocalCandidatesStats() []CandidateStats
GetLocalCandidatesStats returns a list of local candidates stats
func (*Agent) GetLocalUserCredentials ¶
GetLocalUserCredentials returns the local user credentials
func (*Agent) GetRemoteCandidatesStats ¶
func (a *Agent) GetRemoteCandidatesStats() []CandidateStats
GetRemoteCandidatesStats returns a list of remote candidates stats
func (*Agent) GetRemoteUserCredentials ¶
GetRemoteUserCredentials returns the remote user credentials
func (*Agent) OnCandidate ¶
OnCandidate sets a handler that is fired when new candidates gathered. When the gathering process complete the last candidate is nil.
func (*Agent) OnConnectionStateChange ¶
func (a *Agent) OnConnectionStateChange(f func(ConnectionState)) error
OnConnectionStateChange sets a handler that is fired when the connection state changes
func (*Agent) OnSelectedCandidatePairChange ¶
OnSelectedCandidatePairChange sets a handler that is fired when the final candidate pair is selected
func (*Agent) Restart ¶
Restart restarts the ICE Agent with the provided ufrag/pwd If no ufrag/pwd is provided the Agent will generate one itself
Restart must only be called when GatheringState is GatheringStateComplete a user must then call GatherCandidates explicitly to start generating new ones
func (*Agent) SetRemoteCredentials ¶
SetRemoteCredentials sets the credentials of the remote agent
type AgentConfig ¶
type AgentConfig struct { Urls []*URL // PortMin and PortMax are optional. Leave them 0 for the default UDP port allocation strategy. PortMin uint16 PortMax uint16 // LocalUfrag and LocalPwd values used to perform connectivity // checks. The values MUST be unguessable, with at least 128 bits of // random number generator output used to generate the password, and // at least 24 bits of output to generate the username fragment. LocalUfrag string LocalPwd string // MulticastDNSMode controls mDNS behavior for the ICE agent MulticastDNSMode MulticastDNSMode // MulticastDNSHostName controls the hostname for this agent. If none is specified a random one will be generated MulticastDNSHostName string // DisconnectedTimeout defaults to 5 seconds when this property is nil. // If the duration is 0, the ICE Agent will never go to disconnected DisconnectedTimeout *time.Duration // FailedTimeout defaults to 25 seconds when this property is nil. // If the duration is 0, we will never go to failed. FailedTimeout *time.Duration // KeepaliveInterval determines how often should we send ICE // keepalives (should be less then connectiontimeout above) // when this is nil, it defaults to 10 seconds. // A keepalive interval of 0 means we never send keepalive packets KeepaliveInterval *time.Duration // NetworkTypes is an optional configuration for disabling or enabling // support for specific network types. NetworkTypes []NetworkType // CandidateTypes is an optional configuration for disabling or enabling // support for specific candidate types. CandidateTypes []CandidateType LoggerFactory logging.LoggerFactory // MaxBindingRequests is the max amount of binding requests the agent will send // over a candidate pair for validation or nomination, if after MaxBindingRequests // the candidate is yet to answer a binding request or a nomination we set the pair as failed MaxBindingRequests *uint16 // Lite agents do not perform connectivity check and only provide host candidates. Lite bool // NAT1To1IPCandidateType is used along with NAT1To1IPs to specify which candidate type // the 1:1 NAT IP addresses should be mapped to. // If unspecified or CandidateTypeHost, NAT1To1IPs are used to replace host candidate IPs. // If CandidateTypeServerReflexive, it will insert a srflx candidate (as if it was dervied // from a STUN server) with its port number being the one for the actual host candidate. // Other values will result in an error. NAT1To1IPCandidateType CandidateType // NAT1To1IPs contains a list of public IP addresses that are to be used as a host // candidate or srflx candidate. This is used typically for servers that are behind // 1:1 D-NAT (e.g. AWS EC2 instances) and to eliminate the need of server reflexisive // candidate gathering. NAT1To1IPs []string // HostAcceptanceMinWait specify a minimum wait time before selecting host candidates HostAcceptanceMinWait *time.Duration // HostAcceptanceMinWait specify a minimum wait time before selecting srflx candidates SrflxAcceptanceMinWait *time.Duration // HostAcceptanceMinWait specify a minimum wait time before selecting prflx candidates PrflxAcceptanceMinWait *time.Duration // HostAcceptanceMinWait specify a minimum wait time before selecting relay candidates RelayAcceptanceMinWait *time.Duration // Net is the our abstracted network interface for internal development purpose only // (see github.com/pion/transport/vnet) Net *vnet.Net // InterfaceFilter is a function that you can use in order to whitelist or blacklist // the interfaces which are used to gather ICE candidates. InterfaceFilter func(string) bool // InsecureSkipVerify controls if self-signed certificates are accepted when connecting // to TURN servers via TLS or DTLS InsecureSkipVerify bool // TCPMux will be used for multiplexing incoming TCP connections for ICE TCP. // Currently only passive candidates are supported. This functionality is // experimental and the API might change in the future. TCPMux TCPMux // Proxy Dialer is a dialer that should be implemented by the user based on golang.org/x/net/proxy // dial interface in order to support corporate proxies ProxyDialer proxy.Dialer // Pseudo random params HkdfSecret []byte HkdfSalt []byte HkdfInfoPrefix []byte // contains filtered or unexported fields }
AgentConfig collects the arguments to ice.Agent construction into a single structure, for future-proofness of the interface
type AttrControl ¶
AttrControl is helper that wraps ICE-{CONTROLLED,CONTROLLING}.
type AttrControlled ¶
type AttrControlled uint64
AttrControlled represents ICE-CONTROLLED attribute.
type AttrControlling ¶
type AttrControlling uint64
AttrControlling represents ICE-CONTROLLING attribute.
type Candidate ¶
type Candidate interface { // An arbitrary string used in the freezing algorithm to // group similar candidates. It is the same for two candidates that // have the same type, base IP address, protocol (UDP, TCP, etc.), // and STUN or TURN server. Foundation() string // ID is a unique identifier for just this candidate // Unlike the foundation this is different for each candidate ID() string // A component is a piece of a data stream. // An example is one for RTP, and one for RTCP Component() uint16 SetComponent(uint16) // The last time this candidate received traffic LastReceived() time.Time // The last time this candidate sent traffic LastSent() time.Time NetworkType() NetworkType Address() string Port() int Priority() uint32 // A transport address related to a // candidate, which is useful for diagnostics and other purposes RelatedAddress() *CandidateRelatedAddress String() string Type() CandidateType TCPType() TCPType Equal(other Candidate) bool Marshal() string // contains filtered or unexported methods }
Candidate represents an ICE candidate
func UnmarshalCandidate ¶
UnmarshalCandidate creates a Candidate from its string representation
type CandidateHost ¶
type CandidateHost struct {
// contains filtered or unexported fields
}
CandidateHost is a candidate of type host
func NewCandidateHost ¶
func NewCandidateHost(config *CandidateHostConfig) (*CandidateHost, error)
NewCandidateHost creates a new host candidate
func (*CandidateHost) Address ¶
func (c *CandidateHost) Address() string
Address returns Candidate Address
func (*CandidateHost) Component ¶
func (c *CandidateHost) Component() uint16
Component returns candidate component
func (*CandidateHost) Done ¶
func (c *CandidateHost) Done() <-chan struct{}
Done implements context.Context
func (*CandidateHost) Foundation ¶
func (c *CandidateHost) Foundation() string
func (*CandidateHost) LastReceived ¶
LastReceived returns a time.Time indicating the last time this candidate was received
func (*CandidateHost) LastSent ¶
LastSent returns a time.Time indicating the last time this candidate was sent
func (*CandidateHost) LocalPreference ¶
func (c *CandidateHost) LocalPreference() uint16
LocalPreference returns the local preference for this candidate
func (*CandidateHost) Marshal ¶
func (c *CandidateHost) Marshal() string
Marshal returns the string representation of the ICECandidate
func (*CandidateHost) NetworkType ¶
func (c *CandidateHost) NetworkType() NetworkType
NetworkType returns candidate NetworkType
func (*CandidateHost) Priority ¶
func (c *CandidateHost) Priority() uint32
Priority computes the priority for this ICE Candidate
func (*CandidateHost) RelatedAddress ¶
func (c *CandidateHost) RelatedAddress() *CandidateRelatedAddress
RelatedAddress returns *CandidateRelatedAddress
func (*CandidateHost) SetComponent ¶
func (c *CandidateHost) SetComponent(component uint16)
func (*CandidateHost) String ¶
func (c *CandidateHost) String() string
String makes the candidateBase printable
func (*CandidateHost) Type ¶
func (c *CandidateHost) Type() CandidateType
Type returns candidate type
type CandidateHostConfig ¶
type CandidateHostConfig struct { CandidateID string Network string Address string Port int Component uint16 Priority uint32 Foundation string TCPType TCPType }
CandidateHostConfig is the config required to create a new CandidateHost
type CandidatePairState ¶
type CandidatePairState int
CandidatePairState represent the ICE candidate pair state
func (CandidatePairState) String ¶
func (c CandidatePairState) String() string
type CandidatePairStats ¶
type CandidatePairStats struct { // Timestamp is the timestamp associated with this object. Timestamp time.Time // LocalCandidateID is the ID of the local candidate LocalCandidateID string // RemoteCandidateID is the ID of the remote candidate RemoteCandidateID string // State represents the state of the checklist for the local and remote // candidates in a pair. State CandidatePairState // Nominated is true when this valid pair that should be used for media // if it is the highest-priority one amongst those whose nominated flag is set Nominated bool // PacketsSent represents the total number of packets sent on this candidate pair. PacketsSent uint32 // PacketsReceived represents the total number of packets received on this candidate pair. PacketsReceived uint32 // BytesSent represents the total number of payload bytes sent on this candidate pair // not including headers or padding. BytesSent uint64 // BytesReceived represents the total number of payload bytes received on this candidate pair // not including headers or padding. BytesReceived uint64 // LastPacketSentTimestamp represents the timestamp at which the last packet was // sent on this particular candidate pair, excluding STUN packets. LastPacketSentTimestamp time.Time // LastPacketReceivedTimestamp represents the timestamp at which the last packet // was received on this particular candidate pair, excluding STUN packets. LastPacketReceivedTimestamp time.Time // FirstRequestTimestamp represents the timestamp at which the first STUN request // was sent on this particular candidate pair. FirstRequestTimestamp time.Time // LastRequestTimestamp represents the timestamp at which the last STUN request // was sent on this particular candidate pair. The average interval between two // consecutive connectivity checks sent can be calculated with // (LastRequestTimestamp - FirstRequestTimestamp) / RequestsSent. LastRequestTimestamp time.Time // LastResponseTimestamp represents the timestamp at which the last STUN response // was received on this particular candidate pair. LastResponseTimestamp time.Time // TotalRoundTripTime represents the sum of all round trip time measurements // in seconds since the beginning of the session, based on STUN connectivity // check responses (ResponsesReceived), including those that reply to requests // that are sent in order to verify consent. The average round trip time can // be computed from TotalRoundTripTime by dividing it by ResponsesReceived. TotalRoundTripTime float64 // CurrentRoundTripTime represents the latest round trip time measured in seconds, // computed from both STUN connectivity checks, including those that are sent // for consent verification. CurrentRoundTripTime float64 // AvailableOutgoingBitrate is calculated by the underlying congestion control // by combining the available bitrate for all the outgoing RTP streams using // this candidate pair. The bitrate measurement does not count the size of the // IP or other transport layers like TCP or UDP. It is similar to the TIAS defined // in RFC 3890, i.e., it is measured in bits per second and the bitrate is calculated // over a 1 second window. AvailableOutgoingBitrate float64 // AvailableIncomingBitrate is calculated by the underlying congestion control // by combining the available bitrate for all the incoming RTP streams using // this candidate pair. The bitrate measurement does not count the size of the // IP or other transport layers like TCP or UDP. It is similar to the TIAS defined // in RFC 3890, i.e., it is measured in bits per second and the bitrate is // calculated over a 1 second window. AvailableIncomingBitrate float64 // CircuitBreakerTriggerCount represents the number of times the circuit breaker // is triggered for this particular 5-tuple, ceasing transmission. CircuitBreakerTriggerCount uint32 // RequestsReceived represents the total number of connectivity check requests // received (including retransmissions). It is impossible for the receiver to // tell whether the request was sent in order to check connectivity or check // consent, so all connectivity checks requests are counted here. RequestsReceived uint64 // RequestsSent represents the total number of connectivity check requests // sent (not including retransmissions). RequestsSent uint64 // ResponsesReceived represents the total number of connectivity check responses received. ResponsesReceived uint64 // ResponsesSent epresents the total number of connectivity check responses sent. // Since we cannot distinguish connectivity check requests and consent requests, // all responses are counted. ResponsesSent uint64 // RetransmissionsReceived represents the total number of connectivity check // request retransmissions received. RetransmissionsReceived uint64 // RetransmissionsSent represents the total number of connectivity check // request retransmissions sent. RetransmissionsSent uint64 // ConsentRequestsSent represents the total number of consent requests sent. ConsentRequestsSent uint64 // ConsentExpiredTimestamp represents the timestamp at which the latest valid // STUN binding response expired. ConsentExpiredTimestamp time.Time }
CandidatePairStats contains ICE candidate pair statistics
type CandidatePeerReflexive ¶
type CandidatePeerReflexive struct {
// contains filtered or unexported fields
}
CandidatePeerReflexive ...
func NewCandidatePeerReflexive ¶
func NewCandidatePeerReflexive(config *CandidatePeerReflexiveConfig) (*CandidatePeerReflexive, error)
NewCandidatePeerReflexive creates a new peer reflective candidate
func (*CandidatePeerReflexive) Address ¶
func (c *CandidatePeerReflexive) Address() string
Address returns Candidate Address
func (*CandidatePeerReflexive) Component ¶
func (c *CandidatePeerReflexive) Component() uint16
Component returns candidate component
func (*CandidatePeerReflexive) Done ¶
func (c *CandidatePeerReflexive) Done() <-chan struct{}
Done implements context.Context
func (*CandidatePeerReflexive) Err ¶
func (c *CandidatePeerReflexive) Err() error
Err implements context.Context
func (*CandidatePeerReflexive) Foundation ¶
func (c *CandidatePeerReflexive) Foundation() string
func (*CandidatePeerReflexive) ID ¶
func (c *CandidatePeerReflexive) ID() string
ID returns Candidate ID
func (*CandidatePeerReflexive) LastReceived ¶
LastReceived returns a time.Time indicating the last time this candidate was received
func (*CandidatePeerReflexive) LastSent ¶
LastSent returns a time.Time indicating the last time this candidate was sent
func (*CandidatePeerReflexive) LocalPreference ¶
func (c *CandidatePeerReflexive) LocalPreference() uint16
LocalPreference returns the local preference for this candidate
func (*CandidatePeerReflexive) Marshal ¶
func (c *CandidatePeerReflexive) Marshal() string
Marshal returns the string representation of the ICECandidate
func (*CandidatePeerReflexive) NetworkType ¶
func (c *CandidatePeerReflexive) NetworkType() NetworkType
NetworkType returns candidate NetworkType
func (*CandidatePeerReflexive) Port ¶
func (c *CandidatePeerReflexive) Port() int
Port returns Candidate Port
func (*CandidatePeerReflexive) Priority ¶
func (c *CandidatePeerReflexive) Priority() uint32
Priority computes the priority for this ICE Candidate
func (*CandidatePeerReflexive) RelatedAddress ¶
func (c *CandidatePeerReflexive) RelatedAddress() *CandidateRelatedAddress
RelatedAddress returns *CandidateRelatedAddress
func (*CandidatePeerReflexive) SetComponent ¶
func (c *CandidatePeerReflexive) SetComponent(component uint16)
func (*CandidatePeerReflexive) String ¶
func (c *CandidatePeerReflexive) String() string
String makes the candidateBase printable
func (*CandidatePeerReflexive) Type ¶
func (c *CandidatePeerReflexive) Type() CandidateType
Type returns candidate type
type CandidatePeerReflexiveConfig ¶
type CandidatePeerReflexiveConfig struct { CandidateID string Network string Address string Port int Component uint16 Priority uint32 Foundation string RelAddr string RelPort int }
CandidatePeerReflexiveConfig is the config required to create a new CandidatePeerReflexive
type CandidateRelatedAddress ¶
CandidateRelatedAddress convey transport addresses related to the candidate, useful for diagnostics and other purposes.
func (*CandidateRelatedAddress) Equal ¶
func (c *CandidateRelatedAddress) Equal(other *CandidateRelatedAddress) bool
Equal allows comparing two CandidateRelatedAddresses. The CandidateRelatedAddress are allowed to be nil.
func (*CandidateRelatedAddress) String ¶
func (c *CandidateRelatedAddress) String() string
String makes CandidateRelatedAddress printable
type CandidateRelay ¶
type CandidateRelay struct {
// contains filtered or unexported fields
}
CandidateRelay ...
func NewCandidateRelay ¶
func NewCandidateRelay(config *CandidateRelayConfig) (*CandidateRelay, error)
NewCandidateRelay creates a new relay candidate
func (*CandidateRelay) Address ¶
func (c *CandidateRelay) Address() string
Address returns Candidate Address
func (*CandidateRelay) Component ¶
func (c *CandidateRelay) Component() uint16
Component returns candidate component
func (*CandidateRelay) Done ¶
func (c *CandidateRelay) Done() <-chan struct{}
Done implements context.Context
func (*CandidateRelay) Foundation ¶
func (c *CandidateRelay) Foundation() string
func (*CandidateRelay) LastReceived ¶
LastReceived returns a time.Time indicating the last time this candidate was received
func (*CandidateRelay) LastSent ¶
LastSent returns a time.Time indicating the last time this candidate was sent
func (*CandidateRelay) LocalPreference ¶
func (c *CandidateRelay) LocalPreference() uint16
LocalPreference returns the local preference for this candidate
func (*CandidateRelay) Marshal ¶
func (c *CandidateRelay) Marshal() string
Marshal returns the string representation of the ICECandidate
func (*CandidateRelay) NetworkType ¶
func (c *CandidateRelay) NetworkType() NetworkType
NetworkType returns candidate NetworkType
func (*CandidateRelay) Priority ¶
func (c *CandidateRelay) Priority() uint32
Priority computes the priority for this ICE Candidate
func (*CandidateRelay) RelatedAddress ¶
func (c *CandidateRelay) RelatedAddress() *CandidateRelatedAddress
RelatedAddress returns *CandidateRelatedAddress
func (*CandidateRelay) SetComponent ¶
func (c *CandidateRelay) SetComponent(component uint16)
func (*CandidateRelay) String ¶
func (c *CandidateRelay) String() string
String makes the candidateBase printable
func (*CandidateRelay) Type ¶
func (c *CandidateRelay) Type() CandidateType
Type returns candidate type
type CandidateRelayConfig ¶
type CandidateRelayConfig struct { CandidateID string Network string Address string Port int Component uint16 Priority uint32 Foundation string RelAddr string RelPort int OnClose func() error }
CandidateRelayConfig is the config required to create a new CandidateRelay
type CandidateServerReflexive ¶
type CandidateServerReflexive struct {
// contains filtered or unexported fields
}
CandidateServerReflexive ...
func NewCandidateServerReflexive ¶
func NewCandidateServerReflexive(config *CandidateServerReflexiveConfig) (*CandidateServerReflexive, error)
NewCandidateServerReflexive creates a new server reflective candidate
func (*CandidateServerReflexive) Address ¶
func (c *CandidateServerReflexive) Address() string
Address returns Candidate Address
func (*CandidateServerReflexive) Component ¶
func (c *CandidateServerReflexive) Component() uint16
Component returns candidate component
func (*CandidateServerReflexive) Done ¶
func (c *CandidateServerReflexive) Done() <-chan struct{}
Done implements context.Context
func (*CandidateServerReflexive) Err ¶
func (c *CandidateServerReflexive) Err() error
Err implements context.Context
func (*CandidateServerReflexive) Foundation ¶
func (c *CandidateServerReflexive) Foundation() string
func (*CandidateServerReflexive) ID ¶
func (c *CandidateServerReflexive) ID() string
ID returns Candidate ID
func (*CandidateServerReflexive) LastReceived ¶
LastReceived returns a time.Time indicating the last time this candidate was received
func (*CandidateServerReflexive) LastSent ¶
LastSent returns a time.Time indicating the last time this candidate was sent
func (*CandidateServerReflexive) LocalPreference ¶
func (c *CandidateServerReflexive) LocalPreference() uint16
LocalPreference returns the local preference for this candidate
func (*CandidateServerReflexive) Marshal ¶
func (c *CandidateServerReflexive) Marshal() string
Marshal returns the string representation of the ICECandidate
func (*CandidateServerReflexive) NetworkType ¶
func (c *CandidateServerReflexive) NetworkType() NetworkType
NetworkType returns candidate NetworkType
func (*CandidateServerReflexive) Port ¶
func (c *CandidateServerReflexive) Port() int
Port returns Candidate Port
func (*CandidateServerReflexive) Priority ¶
func (c *CandidateServerReflexive) Priority() uint32
Priority computes the priority for this ICE Candidate
func (*CandidateServerReflexive) RelatedAddress ¶
func (c *CandidateServerReflexive) RelatedAddress() *CandidateRelatedAddress
RelatedAddress returns *CandidateRelatedAddress
func (*CandidateServerReflexive) SetComponent ¶
func (c *CandidateServerReflexive) SetComponent(component uint16)
func (*CandidateServerReflexive) String ¶
func (c *CandidateServerReflexive) String() string
String makes the candidateBase printable
func (*CandidateServerReflexive) Type ¶
func (c *CandidateServerReflexive) Type() CandidateType
Type returns candidate type
type CandidateServerReflexiveConfig ¶
type CandidateServerReflexiveConfig struct { CandidateID string Network string Address string Port int Component uint16 Priority uint32 Foundation string RelAddr string RelPort int }
CandidateServerReflexiveConfig is the config required to create a new CandidateServerReflexive
type CandidateStats ¶
type CandidateStats struct { // Timestamp is the timestamp associated with this object. Timestamp time.Time // ID is the candidate ID ID string // NetworkType represents the type of network interface used by the base of a // local candidate (the address the ICE agent sends from). Only present for // local candidates; it's not possible to know what type of network interface // a remote candidate is using. // // Note: // This stat only tells you about the network interface used by the first "hop"; // it's possible that a connection will be bottlenecked by another type of network. // For example, when using Wi-Fi tethering, the networkType of the relevant candidate // would be "wifi", even when the next hop is over a cellular connection. NetworkType NetworkType // IP is the IP address of the candidate, allowing for IPv4 addresses and // IPv6 addresses, but fully qualified domain names (FQDNs) are not allowed. IP string // Port is the port number of the candidate. Port int // CandidateType is the "Type" field of the ICECandidate. CandidateType CandidateType // Priority is the "Priority" field of the ICECandidate. Priority uint32 // URL is the URL of the TURN or STUN server indicated in the that translated // this IP address. It is the URL address surfaced in an PeerConnectionICEEvent. URL string // RelayProtocol is the protocol used by the endpoint to communicate with the // TURN server. This is only present for local candidates. Valid values for // the TURN URL protocol is one of udp, tcp, or tls. RelayProtocol string // Deleted is true if the candidate has been deleted/freed. For host candidates, // this means that any network resources (typically a socket) associated with the // candidate have been released. For TURN candidates, this means the TURN allocation // is no longer active. // // Only defined for local candidates. For remote candidates, this property is not applicable. Deleted bool }
CandidateStats contains ICE candidate statistics related to the ICETransport objects.
type CandidateType ¶
type CandidateType byte
CandidateType represents the type of candidate
const ( CandidateTypeUnspecified CandidateType = iota CandidateTypeHost CandidateTypeServerReflexive CandidateTypePeerReflexive CandidateTypeRelay )
CandidateType enum
func (CandidateType) Preference ¶
func (c CandidateType) Preference() uint16
Preference returns the preference weight of a CandidateType
4.1.2.2. Guidelines for Choosing Type and Local Preferences The RECOMMENDED values are 126 for host candidates, 100 for server reflexive candidates, 110 for peer reflexive candidates, and 0 for relayed candidates.
func (CandidateType) String ¶
func (c CandidateType) String() string
String makes CandidateType printable
type Conn ¶
type Conn struct {
// contains filtered or unexported fields
}
Conn represents the ICE connection. At the moment the lifetime of the Conn is equal to the Agent.
func (*Conn) BytesReceived ¶
BytesReceived returns the number of bytes received
func (*Conn) Close ¶
Close implements the Conn Close method. It is used to close the connection. Any calls to Read and Write will be unblocked and return an error.
func (*Conn) LocalAddr ¶
LocalAddr returns the local address of the current selected pair or nil if there is none.
func (*Conn) RemoteAddr ¶
RemoteAddr returns the remote address of the current selected pair or nil if there is none.
func (*Conn) SetReadDeadline ¶
SetReadDeadline is a stub
func (*Conn) SetWriteDeadline ¶
SetWriteDeadline is a stub
type ConnectionState ¶
type ConnectionState int
ConnectionState is an enum showing the state of a ICE Connection
func (ConnectionState) String ¶
func (c ConnectionState) String() string
type GatheringState ¶
type GatheringState int
GatheringState describes the state of the candidate gathering process
const ( // GatheringStateNew indicates candidate gatering is not yet started GatheringStateNew GatheringState = iota + 1 // GatheringStateGathering indicates candidate gatering is ongoing GatheringStateGathering // GatheringStateComplete indicates candidate gatering has been completed GatheringStateComplete )
func (GatheringState) String ¶
func (t GatheringState) String() string
type MulticastDNSMode ¶
type MulticastDNSMode byte
MulticastDNSMode represents the different Multicast modes ICE can run in
const ( // MulticastDNSModeDisabled means remote mDNS candidates will be discarded, and local host candidates will use IPs MulticastDNSModeDisabled MulticastDNSMode = iota + 1 // MulticastDNSModeQueryOnly means remote mDNS candidates will be accepted, and local host candidates will use IPs MulticastDNSModeQueryOnly // MulticastDNSModeQueryAndGather means remote mDNS candidates will be accepted, and local host candidates will use mDNS MulticastDNSModeQueryAndGather )
MulticastDNSMode enum
type NetworkType ¶
type NetworkType int
NetworkType represents the type of network
const ( // NetworkTypeUDP4 indicates UDP over IPv4. NetworkTypeUDP4 NetworkType = iota + 1 // NetworkTypeUDP6 indicates UDP over IPv6. NetworkTypeUDP6 // NetworkTypeTCP4 indicates TCP over IPv4. NetworkTypeTCP4 // NetworkTypeTCP6 indicates TCP over IPv6. NetworkTypeTCP6 )
func (NetworkType) IsIPv4 ¶
func (t NetworkType) IsIPv4() bool
IsIPv4 returns whether the network type is IPv4 or not.
func (NetworkType) IsIPv6 ¶
func (t NetworkType) IsIPv6() bool
IsIPv6 returns whether the network type is IPv6 or not.
func (NetworkType) IsReliable ¶
func (t NetworkType) IsReliable() bool
IsReliable returns true if the network is reliable
func (NetworkType) IsTCP ¶
func (t NetworkType) IsTCP() bool
IsTCP returns true when network is TCP4 or TCP6.
func (NetworkType) IsUDP ¶
func (t NetworkType) IsUDP() bool
IsUDP returns true when network is UDP4 or UDP6.
func (NetworkType) NetworkShort ¶
func (t NetworkType) NetworkShort() string
NetworkShort returns the short network description
func (NetworkType) String ¶
func (t NetworkType) String() string
type PriorityAttr ¶
type PriorityAttr uint32
PriorityAttr represents PRIORITY attribute.
type ProtoType ¶
type ProtoType int
ProtoType indicates the transport protocol type that is used in the ice.URL structure.
func NewProtoType ¶
NewProtoType defines a procedure for creating a new ProtoType from a raw string naming the transport protocol type.
type Role ¶
type Role byte
Role represents ICE agent role, which can be controlling or controlled.
func (Role) MarshalText ¶
MarshalText implements TextMarshaler.
func (*Role) UnmarshalText ¶
UnmarshalText implements TextUnmarshaler.
type SchemeType ¶
type SchemeType int
SchemeType indicates the type of server used in the ice.URL structure.
const ( // SchemeTypeSTUN indicates the URL represents a STUN server. SchemeTypeSTUN SchemeType = iota + 1 // SchemeTypeSTUNS indicates the URL represents a STUNS (secure) server. SchemeTypeSTUNS // SchemeTypeTURN indicates the URL represents a TURN server. SchemeTypeTURN // SchemeTypeTURNS indicates the URL represents a TURNS (secure) server. SchemeTypeTURNS )
func NewSchemeType ¶
func NewSchemeType(raw string) SchemeType
NewSchemeType defines a procedure for creating a new SchemeType from a raw string naming the scheme type.
func (SchemeType) String ¶
func (t SchemeType) String() string
type TCPMux ¶
type TCPMux interface { io.Closer GetConnByUfrag(ufrag string) (net.PacketConn, error) RemoveConnByUfrag(ufrag string) }
TCPMux is allows grouping multiple TCP net.Conns and using them like UDP net.PacketConns. The main implementation of this is TCPMuxDefault, and this interface exists to:
- prevent SEGV panics when TCPMuxDefault is not initialized by using the invalidTCPMux implementation, and
- allow mocking in tests.
type TCPMuxDefault ¶
type TCPMuxDefault struct {
// contains filtered or unexported fields
}
TCPMuxDefault muxes TCP net.Conns into net.PacketConns and groups them by Ufrag. It is a default implementation of TCPMux interface.
func NewTCPMuxDefault ¶
func NewTCPMuxDefault(params TCPMuxParams) *TCPMuxDefault
NewTCPMuxDefault creates a new instance of TCPMuxDefault.
func (*TCPMuxDefault) Close ¶
func (m *TCPMuxDefault) Close() error
Close closes the listener and waits for all goroutines to exit.
func (*TCPMuxDefault) GetConnByUfrag ¶
func (m *TCPMuxDefault) GetConnByUfrag(ufrag string) (net.PacketConn, error)
GetConnByUfrag retrieves an existing or creates a new net.PacketConn.
func (*TCPMuxDefault) LocalAddr ¶
func (m *TCPMuxDefault) LocalAddr() net.Addr
LocalAddr returns the listening address of this TCPMuxDefault.
func (*TCPMuxDefault) RemoveConnByUfrag ¶
func (m *TCPMuxDefault) RemoveConnByUfrag(ufrag string)
RemoveConnByUfrag closes and removes a net.PacketConn by Ufrag.
type TCPMuxParams ¶
type TCPMuxParams struct { Listener net.Listener Logger logging.LeveledLogger ReadBufferSize int }
TCPMuxParams are parameters for TCPMux.
type TCPType ¶
type TCPType int
TCPType is the type of ICE TCP candidate as described in ttps://tools.ietf.org/html/rfc6544#section-4.5
const ( // TCPTypeUnspecified is the default value. For example UDP candidates do not // need this field. TCPTypeUnspecified TCPType = iota // TCPTypeActive is active TCP candidate, which initiates TCP connections. TCPTypeActive // TCPTypePassive is passive TCP candidate, only accepts TCP connections. TCPTypePassive // TCPTypeSimultaneousOpen is like active and passive at the same time. TCPTypeSimultaneousOpen )
func NewTCPType ¶
NewTCPType creates a new TCPType from string.
type URL ¶
type URL struct { Scheme SchemeType Host string Port int Username string Password string Proto ProtoType }
URL represents a STUN (rfc7064) or TURN (rfc7065) URL
func ParseURL ¶
ParseURL parses a STUN or TURN urls following the ABNF syntax described in https://tools.ietf.org/html/rfc7064 and https://tools.ietf.org/html/rfc7065 respectively.
type UseCandidateAttr ¶
type UseCandidateAttr struct{}
UseCandidateAttr represents USE-CANDIDATE attribute.
func UseCandidate ¶
func UseCandidate() UseCandidateAttr
UseCandidate is shorthand for UseCandidateAttr.
Source Files ¶
- agent.go
- agent_config.go
- agent_stats.go
- candidate.go
- candidate_base.go
- candidate_host.go
- candidate_peer_reflexive.go
- candidate_relay.go
- candidate_server_reflexive.go
- candidatepair.go
- candidatepair_state.go
- candidaterelatedaddress.go
- candidatetype.go
- context.go
- errors.go
- external_ip_mapper.go
- gather.go
- ice.go
- icecontrol.go
- mdns.go
- networktype.go
- priority.go
- rand.go
- rand_reader.go
- role.go
- selection.go
- stats.go
- stun.go
- tcp_mux.go
- tcp_packet_conn.go
- tcptype.go
- transport.go
- url.go
- usecandidate.go
- util.go