Documentation
¶
Index ¶
- Constants
- Variables
- func AppendData(dst []byte, offset uint64, payload []byte) []byte
- func DecodeAbort(body []byte) string
- func DecodeAddPeerAnswer(body []byte) (peerID uint8, sdp string, err error)
- func DecodeAddPeerOffer(body []byte) (peerID uint8, sdp string, err error)
- func Dispatch(msg []byte, h FrameHandler) error
- func EncodeAbort(reason string) []byte
- func EncodeAddPeerAnswer(peerID uint8, sdp string) []byte
- func EncodeAddPeerOffer(peerID uint8, sdp string) []byte
- func EncodeData(offset uint64, payload []byte) []byte
- func EncodeEOF() []byte
- func EncodeMetadata(meta Metadata) []byte
- func EncodeTransferComplete() []byte
- func LabelForDataPeer(peerID int) string
- type Codec
- type Data
- type FrameHandler
- type FrameType
- type Metadata
- type UnexpectedFrameHandler
- func (UnexpectedFrameHandler) OnAbort(string) error
- func (UnexpectedFrameHandler) OnAddPeerAnswer(uint8, string) error
- func (UnexpectedFrameHandler) OnAddPeerOffer(uint8, string) error
- func (UnexpectedFrameHandler) OnData(Data) error
- func (UnexpectedFrameHandler) OnEOF() error
- func (UnexpectedFrameHandler) OnMetadata(Metadata) error
- func (UnexpectedFrameHandler) OnTransferComplete() error
- type Version
Constants ¶
const ( // ChunkSize is the DATA payload size for a full chunk; the final chunk // may be smaller. 256 KB sits well under pion's ~1 GB SCTP max message // size. ChunkSize = 256 * 1024 // PrimaryLabel is the DataChannel label used for the single channel. PrimaryLabel = "primary" // ControlLabel is the DataChannel label on the control PeerConnection // in multi-PC mode. Data PCs use LabelForDataPeer(i). ControlLabel = "control" // MaxDataReadBufSize sizes detached reads on data-bearing DataChannels. // Must exceed dataHeaderLen + ChunkSize plus zstd's non-compressible // expansion margin. MaxDataReadBufSize = 288 * 1024 // MaxControlReadBufSize sizes detached reads on control DataChannels. // The largest frame is ADD_PEER_OFFER/ANSWER carrying a base64-encoded // SDP. MaxControlReadBufSize = 16 * 1024 )
Variables ¶
var ( // ErrTruncatedFrame means the frame is shorter than its type requires. ErrTruncatedFrame = errors.New("truncated frame") // ErrUnknownFrameType means the type byte is not one of the known values. ErrUnknownFrameType = errors.New("unknown frame type") )
var ErrUnexpectedFrame = errors.New("unexpected frame")
ErrUnexpectedFrame is the sentinel returned by UnexpectedFrameHandler methods.
Functions ¶
func AppendData ¶
AppendData appends a DATA frame to dst and returns the extended slice. Layout: [type:1][offset:8][payload:N]. Hot-path callers pass `buf[:0]` to reuse the backing array — pion copies the argument into its own send queue, so aliasing is safe.
func DecodeAbort ¶
DecodeAbort returns the reason string from an ABORT body.
func DecodeAddPeerAnswer ¶
DecodeAddPeerAnswer parses an ADD_PEER_ANSWER body.
func DecodeAddPeerOffer ¶
DecodeAddPeerOffer parses an ADD_PEER_OFFER body.
func Dispatch ¶
func Dispatch(msg []byte, h FrameHandler) error
Dispatch parses one DataChannel message, decodes the body, and calls the matching method on h.
func EncodeAbort ¶
EncodeAbort returns an ABORT frame with a UTF-8 reason string.
func EncodeAddPeerAnswer ¶
EncodeAddPeerAnswer returns a complete ADD_PEER_ANSWER frame.
func EncodeAddPeerOffer ¶
EncodeAddPeerOffer returns a complete ADD_PEER_OFFER frame
func EncodeData ¶
EncodeData returns a complete DATA frame. payload may be empty (zero-length final chunk) but is typically up to ChunkSize bytes.
func EncodeMetadata ¶
EncodeMetadata returns a complete METADATA frame ready for DataChannel.Send.
Layout: [type:1][version:1][codec:1][file_size:8][sha256:32].
func EncodeTransferComplete ¶
func EncodeTransferComplete() []byte
EncodeTransferComplete returns a one-byte TRANSFER_COMPLETE frame.
func LabelForDataPeer ¶
LabelForDataPeer returns the DataChannel label for the peerID'th data PC in multi-PC mode (0..peers-1).
Types ¶
type Data ¶
Data is a decoded DATA frame.
func DecodeData ¶
DecodeData parses the body (everything after the type byte).
Body layout: [offset:8][payload:N]. The returned Payload aliases the input slice — callers that need to keep the bytes must copy them before the owning OnMessage callback returns.
type FrameHandler ¶
type FrameHandler interface {
OnMetadata(Metadata) error
OnData(Data) error
OnEOF() error
OnAbort(reason string) error
OnAddPeerOffer(peerID uint8, sdp string) error
OnAddPeerAnswer(peerID uint8, sdp string) error
OnTransferComplete() error
}
FrameHandler is the visitor interface Dispatch calls into. Each method corresponds to exactly one FrameType.
type FrameType ¶
type FrameType uint8
FrameType is the first byte of every frame. See PROTOCOL.md.
const ( // FrameTypeMetadata is the first frame, before any DATA FrameTypeMetadata FrameType = 0x01 // FrameTypeData is the file payload with byte offset FrameTypeData FrameType = 0x02 // FrameTypeEOF means the sender has no more chunks (single-PC only) FrameTypeEOF FrameType = 0x03 // FrameTypeAbort is a clean-error signal with UTF-8 reason FrameTypeAbort FrameType = 0x04 // FrameTypeAddPeerOffer is sender→receiver: invite a data PC by peer_id+SDP FrameTypeAddPeerOffer FrameType = 0x05 // FrameTypeAddPeerAnswer is receiver→sender: answer an offer by peer_id+SDP FrameTypeAddPeerAnswer FrameType = 0x06 // FrameTypeTransferComplete is sender→receiver: all data PCs flushed FrameTypeTransferComplete FrameType = 0x07 )
type Metadata ¶
Metadata is the handshake frame the sender emits before any DATA. All multi-byte fields are big-endian on the wire.
func DecodeMetadata ¶
DecodeMetadata parses the body (everything after the type byte).
Body layout: [version:1][codec:1][file_size:8][sha256:32].
type UnexpectedFrameHandler ¶
type UnexpectedFrameHandler struct{}
UnexpectedFrameHandler provides a default implementation of every FrameHandler method that returns ErrUnexpectedFrame wrapped with the frame type byte
func (UnexpectedFrameHandler) OnAbort ¶
func (UnexpectedFrameHandler) OnAbort(string) error
OnAbort rejects an ABORT frame with ErrUnexpectedFrame.
func (UnexpectedFrameHandler) OnAddPeerAnswer ¶
func (UnexpectedFrameHandler) OnAddPeerAnswer(uint8, string) error
OnAddPeerAnswer rejects an ADD_PEER_ANSWER frame with ErrUnexpectedFrame.
func (UnexpectedFrameHandler) OnAddPeerOffer ¶
func (UnexpectedFrameHandler) OnAddPeerOffer(uint8, string) error
OnAddPeerOffer rejects an ADD_PEER_OFFER frame with ErrUnexpectedFrame.
func (UnexpectedFrameHandler) OnData ¶
func (UnexpectedFrameHandler) OnData(Data) error
OnData rejects a DATA frame with ErrUnexpectedFrame.
func (UnexpectedFrameHandler) OnEOF ¶
func (UnexpectedFrameHandler) OnEOF() error
OnEOF rejects an EOF frame with ErrUnexpectedFrame.
func (UnexpectedFrameHandler) OnMetadata ¶
func (UnexpectedFrameHandler) OnMetadata(Metadata) error
OnMetadata rejects a METADATA frame with ErrUnexpectedFrame.
func (UnexpectedFrameHandler) OnTransferComplete ¶
func (UnexpectedFrameHandler) OnTransferComplete() error
OnTransferComplete rejects a TRANSFER_COMPLETE frame with ErrUnexpectedFrame.