README


Pion Data Channels

A Go implementation of WebRTC Data Channels

Pion Data Channels Slack Widget
Build Status GoDoc Coverage Status Go Report Card


See DESIGN.md for an overview of features and future goals.

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 datachannel implements WebRTC Data Channels

Index

Constants

View Source
const (
	ChannelPriorityBelowNormal uint16 = 128
	ChannelPriorityNormal      uint16 = 256
	ChannelPriorityHigh        uint16 = 512
	ChannelPriorityExtraHigh   uint16 = 1024
)

ChannelPriority enums

Variables

This section is empty.

Functions

This section is empty.

Types

type ChannelType

type ChannelType byte

ChannelType determines the reliability of the WebRTC DataChannel

const (
	// ChannelTypeReliable determines the Data Channel provides a
	// reliable in-order bi-directional communication.
	ChannelTypeReliable ChannelType = 0x00
	// ChannelTypeReliableUnordered determines the Data Channel
	// provides a reliable unordered bi-directional communication.
	ChannelTypeReliableUnordered ChannelType = 0x80
	// ChannelTypePartialReliableRexmit determines the Data Channel
	// provides a partially-reliable in-order bi-directional communication.
	// User messages will not be retransmitted more times than specified in the Reliability Parameter.
	ChannelTypePartialReliableRexmit ChannelType = 0x01
	// ChannelTypePartialReliableRexmitUnordered determines
	//  the Data Channel provides a partial reliable unordered bi-directional communication.
	// User messages will not be retransmitted more times than specified in the Reliability Parameter.
	ChannelTypePartialReliableRexmitUnordered ChannelType = 0x81
	// ChannelTypePartialReliableTimed determines the Data Channel
	// provides a partial reliable in-order bi-directional communication.
	// User messages might not be transmitted or retransmitted after
	// a specified life-time given in milli- seconds in the Reliability Parameter.
	// This life-time starts when providing the user message to the protocol stack.
	ChannelTypePartialReliableTimed ChannelType = 0x02
	// The Data Channel provides a partial reliable unordered bi-directional
	// communication.  User messages might not be transmitted or retransmitted
	// after a specified life-time given in milli- seconds in the Reliability Parameter.
	// This life-time starts when providing the user message to the protocol stack.
	ChannelTypePartialReliableTimedUnordered ChannelType = 0x82
)

ChannelType enums

type Config

type Config struct {
	ChannelType          ChannelType
	Negotiated           bool
	Priority             uint16
	ReliabilityParameter uint32
	Label                string
	Protocol             string
	LoggerFactory        logging.LoggerFactory
}

Config is used to configure the data channel.

type DataChannel

type DataChannel struct {
	Config
	// contains filtered or unexported fields
}

DataChannel represents a data channel

func Accept

func Accept(a *sctp.Association, config *Config) (*DataChannel, error)

Accept is used to accept incoming data channels over SCTP

func Client

func Client(stream *sctp.Stream, config *Config) (*DataChannel, error)

Client opens a data channel over an SCTP stream

func Dial

func Dial(a *sctp.Association, id uint16, config *Config) (*DataChannel, error)

Dial opens a data channels over SCTP

func Server

func Server(stream *sctp.Stream, config *Config) (*DataChannel, error)

Server accepts a data channel over an SCTP stream

func (*DataChannel) BufferedAmount

func (c *DataChannel) BufferedAmount() uint64

BufferedAmount returns the number of bytes of data currently queued to be sent over this stream.

func (*DataChannel) BufferedAmountLowThreshold

func (c *DataChannel) BufferedAmountLowThreshold() uint64

BufferedAmountLowThreshold returns the number of bytes of buffered outgoing data that is considered "low." Defaults to 0.

func (*DataChannel) BytesReceived

func (c *DataChannel) BytesReceived() uint64

BytesReceived returns the number of bytes received

func (*DataChannel) BytesSent

func (c *DataChannel) BytesSent() uint64

BytesSent returns the number of bytes sent

func (*DataChannel) Close

func (c *DataChannel) Close() error

Close closes the DataChannel and the underlying SCTP stream.

func (*DataChannel) MessagesReceived

func (c *DataChannel) MessagesReceived() uint32

MessagesReceived returns the number of messages received

func (*DataChannel) MessagesSent

func (c *DataChannel) MessagesSent() uint32

MessagesSent returns the number of messages sent

func (*DataChannel) OnBufferedAmountLow

func (c *DataChannel) OnBufferedAmountLow(f func())

OnBufferedAmountLow sets the callback handler which would be called when the number of bytes of outgoing data buffered is lower than the threshold.

func (*DataChannel) Read

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

Read reads a packet of len(p) bytes as binary data

func (*DataChannel) ReadDataChannel

func (c *DataChannel) ReadDataChannel(p []byte) (int, bool, error)

ReadDataChannel reads a packet of len(p) bytes

func (*DataChannel) SetBufferedAmountLowThreshold

func (c *DataChannel) SetBufferedAmountLowThreshold(th uint64)

SetBufferedAmountLowThreshold is used to update the threshold. See BufferedAmountLowThreshold().

func (*DataChannel) StreamIdentifier

func (c *DataChannel) StreamIdentifier() uint16

StreamIdentifier returns the Stream identifier associated to the stream.

func (*DataChannel) Write

func (c *DataChannel) Write(p []byte) (n int, err error)

Write writes len(p) bytes from p as binary data

func (*DataChannel) WriteDataChannel

func (c *DataChannel) WriteDataChannel(p []byte, isString bool) (n int, err error)

WriteDataChannel writes len(p) bytes from p

type ReadWriteCloser

type ReadWriteCloser interface {
	io.Reader
	io.Writer
	Reader
	Writer
	io.Closer
}

ReadWriteCloser is an extended io.ReadWriteCloser that also implements our Reader and Writer.

type Reader

type Reader interface {
	ReadDataChannel([]byte) (int, bool, error)
}

Reader is an extended io.Reader that also returns if the message is text.

type Writer

type Writer interface {
	WriteDataChannel([]byte, bool) (int, error)
}

Writer is an extended io.Writer that also allows indicating if a message is text.