ice

package module
v0.3.4 Latest Latest
Warning

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

Go to latest
Published: Jun 3, 2019 License: MIT Imports: 16 Imported by: 8

README


Pion ICE

A Go implementation of ICE

Pion transport Slack Widget
Build Status GoDoc Coverage Status Go Report Card


Roadmap

The library is used as a part of our WebRTC implementation. Please refer to that roadmap to track our major milestones.

Community

Pion has an active community on the Golang Slack. Sign up and join the #pion channel for discussions and support. You can also use Pion mailing list.

We are always looking to support your projects. Please reach out if you have something to build!

If you need commercial support or don't want to use public methods you can contact us at team@pion.ly

Contributing

Check out the contributing wiki to join the group of amazing people making this project possible:

License

MIT License - see LICENSE for full text

Documentation

Overview

Package ice implements the Interactive Connectivity Establishment (ICE) protocol defined in rfc5245.

Index

Constants

View Source
const (

	// ComponentRTP indicates that the candidate is used for RTP
	ComponentRTP uint16 = 1
	// ComponentRTCP indicates that the candidate is used for RTCP
	ComponentRTCP
)
View Source
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

View Source
const Unknown = iota

Unknown defines default public constant to use for "enum" like struct comparisons when no value was defined.

Variables

View Source
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")

	// 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
	// while running in trickle mode.
	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")
)

Functions

This section is empty.

Types

type Agent

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

Agent represents the ICE agent

func NewAgent

func NewAgent(config *AgentConfig) (*Agent, error)

NewAgent creates a new Agent

func (*Agent) Accept

func (a *Agent) Accept(ctx context.Context, remoteUfrag, remotePwd string) (*Conn, error)

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

func (a *Agent) AddRemoteCandidate(c Candidate) error

AddRemoteCandidate adds a new remote candidate

func (*Agent) Close

func (a *Agent) Close() error

Close cleans up the Agent

func (*Agent) Dial

func (a *Agent) Dial(ctx context.Context, remoteUfrag, remotePwd string) (*Conn, error)

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 added in v0.3.2

func (a *Agent) GatherCandidates() error

GatherCandidates initiates the trickle based gathering process.

func (*Agent) GetLocalCandidates

func (a *Agent) GetLocalCandidates() ([]Candidate, error)

GetLocalCandidates returns the local candidates

func (*Agent) GetLocalUserCredentials

func (a *Agent) GetLocalUserCredentials() (frag string, pwd string)

GetLocalUserCredentials returns the local user credentials

func (*Agent) OnCandidate added in v0.3.2

func (a *Agent) OnCandidate(f func(Candidate)) error

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

func (a *Agent) OnSelectedCandidatePairChange(f func(Candidate, Candidate)) error

OnSelectedCandidatePairChange sets a handler that is fired when the final candidate pair is selected

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

	// Trickle specifies whether or not ice agent should trickle candidates or
	// work perform synchronous gathering.
	Trickle bool

	// ConnectionTimeout defaults to 30 seconds when this property is nil.
	// If the duration is 0, we will never timeout this connection.
	ConnectionTimeout *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

	// CandidatesSelectionTimeout specify a timeout for selecting candidates, if no nomination has happen
	// before this timeout, once hit we will nominate the best valid candidate available,
	// or mark the connection as failed if no valid candidate is available
	CandidateSelectionTimeout *time.Duration

	// 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
	// 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 added in v0.2.9

type AttrControl struct {
	Role       Role
	Tiebreaker uint64
}

AttrControl is helper that wraps ICE-{CONTROLLED,CONTROLLING}.

func (AttrControl) AddTo added in v0.2.9

func (c AttrControl) AddTo(m *stun.Message) error

AddTo adds ICE-CONTROLLED or ICE-CONTROLLING attribute depending on Role.

func (*AttrControl) GetFrom added in v0.2.9

func (c *AttrControl) GetFrom(m *stun.Message) error

GetFrom decodes Role and Tiebreaker value from message.

type AttrControlled added in v0.2.9

type AttrControlled uint64

AttrControlled represents ICE-CONTROLLED attribute.

func (AttrControlled) AddTo added in v0.2.9

func (c AttrControlled) AddTo(m *stun.Message) error

AddTo adds ICE-CONTROLLED to message.

func (*AttrControlled) GetFrom added in v0.2.9

func (c *AttrControlled) GetFrom(m *stun.Message) error

GetFrom decodes ICE-CONTROLLED from message.

type AttrControlling added in v0.2.9

type AttrControlling uint64

AttrControlling represents ICE-CONTROLLING attribute.

func (AttrControlling) AddTo added in v0.2.9

func (c AttrControlling) AddTo(m *stun.Message) error

AddTo adds ICE-CONTROLLING to message.

func (*AttrControlling) GetFrom added in v0.2.9

func (c *AttrControlling) GetFrom(m *stun.Message) error

GetFrom decodes ICE-CONTROLLING from message.

type Candidate

type Candidate interface {
	Component() uint16
	IP() net.IP
	LastReceived() time.Time
	LastSent() time.Time
	NetworkType() NetworkType
	Port() int
	Priority() uint32
	RelatedAddress() *CandidateRelatedAddress
	String() string
	Type() CandidateType

	Equal(other Candidate) bool
	// contains filtered or unexported methods
}

Candidate represents an ICE candidate

type CandidateHost added in v0.3.0

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

CandidateHost is a candidate of type host

func NewCandidateHost

func NewCandidateHost(network string, ip net.IP, port int, component uint16) (*CandidateHost, error)

NewCandidateHost creates a new host candidate

func (*CandidateHost) Component added in v0.3.0

func (c *CandidateHost) Component() uint16

Component returns candidate component

func (*CandidateHost) Equal added in v0.3.0

func (c *CandidateHost) Equal(other Candidate) bool

Equal is used to compare two candidateBases

func (*CandidateHost) IP added in v0.3.0

func (c *CandidateHost) IP() net.IP

IP returns Candidate IP

func (*CandidateHost) LastReceived added in v0.3.0

func (c *CandidateHost) LastReceived() time.Time

LastReceived returns a time.Time indicating the last time this candidate was received

func (*CandidateHost) LastSent added in v0.3.0

func (c *CandidateHost) LastSent() time.Time

LastSent returns a time.Time indicating the last time this candidate was sent

func (*CandidateHost) LocalPreference added in v0.3.0

func (c *CandidateHost) LocalPreference() uint16

LocalPreference returns the local preference for this candidate

func (*CandidateHost) NetworkType added in v0.3.0

func (c *CandidateHost) NetworkType() NetworkType

NetworkType returns candidate NetworkType

func (*CandidateHost) Port added in v0.3.0

func (c *CandidateHost) Port() int

Port returns Candidate Port

func (*CandidateHost) Priority added in v0.3.0

func (c *CandidateHost) Priority() uint32

Priority computes the priority for this ICE Candidate

func (*CandidateHost) RelatedAddress added in v0.3.0

func (c *CandidateHost) RelatedAddress() *CandidateRelatedAddress

RelatedAddress returns *CandidateRelatedAddress

func (*CandidateHost) String added in v0.3.0

func (c *CandidateHost) String() string

String makes the candidateBase printable

func (*CandidateHost) Type added in v0.3.0

func (c *CandidateHost) Type() CandidateType

Type returns candidate type

type CandidatePeerReflexive added in v0.3.0

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

CandidatePeerReflexive ...

func NewCandidatePeerReflexive

func NewCandidatePeerReflexive(network string, ip net.IP, port int, component uint16, relAddr string, relPort int) (*CandidatePeerReflexive, error)

NewCandidatePeerReflexive creates a new peer reflective candidate

func (*CandidatePeerReflexive) Component added in v0.3.0

func (c *CandidatePeerReflexive) Component() uint16

Component returns candidate component

func (*CandidatePeerReflexive) Equal added in v0.3.0

func (c *CandidatePeerReflexive) Equal(other Candidate) bool

Equal is used to compare two candidateBases

func (*CandidatePeerReflexive) IP added in v0.3.0

func (c *CandidatePeerReflexive) IP() net.IP

IP returns Candidate IP

func (*CandidatePeerReflexive) LastReceived added in v0.3.0

func (c *CandidatePeerReflexive) LastReceived() time.Time

LastReceived returns a time.Time indicating the last time this candidate was received

func (*CandidatePeerReflexive) LastSent added in v0.3.0

func (c *CandidatePeerReflexive) LastSent() time.Time

LastSent returns a time.Time indicating the last time this candidate was sent

func (*CandidatePeerReflexive) LocalPreference added in v0.3.0

func (c *CandidatePeerReflexive) LocalPreference() uint16

LocalPreference returns the local preference for this candidate

func (*CandidatePeerReflexive) NetworkType added in v0.3.0

func (c *CandidatePeerReflexive) NetworkType() NetworkType

NetworkType returns candidate NetworkType

func (*CandidatePeerReflexive) Port added in v0.3.0

func (c *CandidatePeerReflexive) Port() int

Port returns Candidate Port

func (*CandidatePeerReflexive) Priority added in v0.3.0

func (c *CandidatePeerReflexive) Priority() uint32

Priority computes the priority for this ICE Candidate

func (*CandidatePeerReflexive) RelatedAddress added in v0.3.0

func (c *CandidatePeerReflexive) RelatedAddress() *CandidateRelatedAddress

RelatedAddress returns *CandidateRelatedAddress

func (*CandidatePeerReflexive) String added in v0.3.0

func (c *CandidatePeerReflexive) String() string

String makes the candidateBase printable

func (*CandidatePeerReflexive) Type added in v0.3.0

func (c *CandidatePeerReflexive) Type() CandidateType

Type returns candidate type

type CandidateRelatedAddress

type CandidateRelatedAddress struct {
	Address string
	Port    int
}

CandidateRelatedAddress convey transport addresses related to the candidate, useful for diagnostics and other purposes.

func (*CandidateRelatedAddress) Equal

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 added in v0.3.0

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

CandidateRelay ...

func NewCandidateRelay

func NewCandidateRelay(network string, ip net.IP, port int, component uint16, relAddr string, relPort int) (*CandidateRelay, error)

NewCandidateRelay creates a new relay candidate

func (*CandidateRelay) Component added in v0.3.0

func (c *CandidateRelay) Component() uint16

Component returns candidate component

func (*CandidateRelay) Equal added in v0.3.0

func (c *CandidateRelay) Equal(other Candidate) bool

Equal is used to compare two candidateBases

func (*CandidateRelay) IP added in v0.3.0

func (c *CandidateRelay) IP() net.IP

IP returns Candidate IP

func (*CandidateRelay) LastReceived added in v0.3.0

func (c *CandidateRelay) LastReceived() time.Time

LastReceived returns a time.Time indicating the last time this candidate was received

func (*CandidateRelay) LastSent added in v0.3.0

func (c *CandidateRelay) LastSent() time.Time

LastSent returns a time.Time indicating the last time this candidate was sent

func (*CandidateRelay) LocalPreference added in v0.3.0

func (c *CandidateRelay) LocalPreference() uint16

LocalPreference returns the local preference for this candidate

func (*CandidateRelay) NetworkType added in v0.3.0

func (c *CandidateRelay) NetworkType() NetworkType

NetworkType returns candidate NetworkType

func (*CandidateRelay) Port added in v0.3.0

func (c *CandidateRelay) Port() int

Port returns Candidate Port

func (*CandidateRelay) Priority added in v0.3.0

func (c *CandidateRelay) Priority() uint32

Priority computes the priority for this ICE Candidate

func (*CandidateRelay) RelatedAddress added in v0.3.0

func (c *CandidateRelay) RelatedAddress() *CandidateRelatedAddress

RelatedAddress returns *CandidateRelatedAddress

func (*CandidateRelay) String added in v0.3.0

func (c *CandidateRelay) String() string

String makes the candidateBase printable

func (*CandidateRelay) Type added in v0.3.0

func (c *CandidateRelay) Type() CandidateType

Type returns candidate type

type CandidateServerReflexive added in v0.3.0

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

CandidateServerReflexive ...

func NewCandidateServerReflexive

func NewCandidateServerReflexive(network string, ip net.IP, port int, component uint16, relAddr string, relPort int) (*CandidateServerReflexive, error)

NewCandidateServerReflexive creates a new server reflective candidate

func (*CandidateServerReflexive) Component added in v0.3.0

func (c *CandidateServerReflexive) Component() uint16

Component returns candidate component

func (*CandidateServerReflexive) Equal added in v0.3.0

func (c *CandidateServerReflexive) Equal(other Candidate) bool

Equal is used to compare two candidateBases

func (*CandidateServerReflexive) IP added in v0.3.0

func (c *CandidateServerReflexive) IP() net.IP

IP returns Candidate IP

func (*CandidateServerReflexive) LastReceived added in v0.3.0

func (c *CandidateServerReflexive) LastReceived() time.Time

LastReceived returns a time.Time indicating the last time this candidate was received

func (*CandidateServerReflexive) LastSent added in v0.3.0

func (c *CandidateServerReflexive) LastSent() time.Time

LastSent returns a time.Time indicating the last time this candidate was sent

func (*CandidateServerReflexive) LocalPreference added in v0.3.0

func (c *CandidateServerReflexive) LocalPreference() uint16

LocalPreference returns the local preference for this candidate

func (*CandidateServerReflexive) NetworkType added in v0.3.0

func (c *CandidateServerReflexive) NetworkType() NetworkType

NetworkType returns candidate NetworkType

func (*CandidateServerReflexive) Port added in v0.3.0

func (c *CandidateServerReflexive) Port() int

Port returns Candidate Port

func (*CandidateServerReflexive) Priority added in v0.3.0

func (c *CandidateServerReflexive) Priority() uint32

Priority computes the priority for this ICE Candidate

func (*CandidateServerReflexive) RelatedAddress added in v0.3.0

func (c *CandidateServerReflexive) RelatedAddress() *CandidateRelatedAddress

RelatedAddress returns *CandidateRelatedAddress

func (*CandidateServerReflexive) String added in v0.3.0

func (c *CandidateServerReflexive) String() string

String makes the candidateBase printable

func (*CandidateServerReflexive) Type added in v0.3.0

func (c *CandidateServerReflexive) Type() CandidateType

Type returns candidate type

type CandidateType

type CandidateType byte

CandidateType represents the type of candidate

const (
	CandidateTypeHost CandidateType = iota + 1
	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) Close

func (c *Conn) Close() error

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

func (c *Conn) LocalAddr() net.Addr

LocalAddr is a stub

func (*Conn) Read

func (c *Conn) Read(p []byte) (int, error)

Read implements the Conn Read method.

func (*Conn) RemoteAddr

func (c *Conn) RemoteAddr() net.Addr

RemoteAddr is a stub

func (*Conn) SetDeadline

func (c *Conn) SetDeadline(t time.Time) error

SetDeadline is a stub

func (*Conn) SetReadDeadline

func (c *Conn) SetReadDeadline(t time.Time) error

SetReadDeadline is a stub

func (*Conn) SetWriteDeadline

func (c *Conn) SetWriteDeadline(t time.Time) error

SetWriteDeadline is a stub

func (*Conn) Write

func (c *Conn) Write(p []byte) (int, error)

Write implements the Conn Write method.

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 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) NetworkShort

func (t NetworkType) NetworkShort() string

NetworkShort returns the short network description

func (NetworkType) String

func (t NetworkType) String() string

type PriorityAttr added in v0.2.9

type PriorityAttr uint32

PriorityAttr represents PRIORITY attribute.

func (PriorityAttr) AddTo added in v0.2.9

func (p PriorityAttr) AddTo(m *stun.Message) error

AddTo adds PRIORITY attribute to message.

func (*PriorityAttr) GetFrom added in v0.2.9

func (p *PriorityAttr) GetFrom(m *stun.Message) error

GetFrom decodes PRIORITY attribute from message.

type ProtoType

type ProtoType int

ProtoType indicates the transport protocol type that is used in the ice.URL structure.

const (
	// ProtoTypeUDP indicates the URL uses a UDP transport.
	ProtoTypeUDP ProtoType = iota + 1

	// ProtoTypeTCP indicates the URL uses a TCP transport.
	ProtoTypeTCP
)

func NewProtoType

func NewProtoType(raw string) ProtoType

NewProtoType defines a procedure for creating a new ProtoType from a raw string naming the transport protocol type.

func (ProtoType) String

func (t ProtoType) String() string

type Role added in v0.2.9

type Role byte

Role represents ICE agent role, which can be controlling or controlled.

const (
	Controlling Role = iota
	Controlled
)

Possible ICE agent roles.

func (Role) MarshalText added in v0.2.9

func (r Role) MarshalText() (text []byte, err error)

MarshalText implements TextMarshaler.

func (Role) String added in v0.2.9

func (r Role) String() string

func (*Role) UnmarshalText added in v0.2.9

func (r *Role) UnmarshalText(text []byte) error

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 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

func ParseURL(raw string) (*URL, error)

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.

func (URL) IsSecure

func (u URL) IsSecure() bool

IsSecure returns whether the this URL's scheme describes secure scheme or not.

func (URL) String

func (u URL) String() string

type UseCandidateAttr added in v0.2.9

type UseCandidateAttr struct{}

UseCandidateAttr represents USE-CANDIDATE attribute.

var UseCandidate UseCandidateAttr

UseCandidate is shorthand for UseCandidateAttr.

func (UseCandidateAttr) AddTo added in v0.2.9

func (UseCandidateAttr) AddTo(m *stun.Message) error

AddTo adds USE-CANDIDATE attribute to message.

func (UseCandidateAttr) IsSet added in v0.2.9

func (UseCandidateAttr) IsSet(m *stun.Message) bool

IsSet returns true if USE-CANDIDATE attribute is set.

Jump to

Keyboard shortcuts

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