package mux
import (
"errors"
"io"
"net"
"time"
"github.com/pion/ice/v4"
"github.com/pion/transport/v3/packetio"
)
type Endpoint struct {
mux *Mux
buffer *packetio .Buffer
onClose func ()
}
func (e *Endpoint ) Close () (err error ) {
if e .onClose != nil {
e .onClose ()
}
if err = e .close (); err != nil {
return err
}
e .mux .RemoveEndpoint (e )
return nil
}
func (e *Endpoint ) close () error {
return e .buffer .Close ()
}
func (e *Endpoint ) Read (p []byte ) (int , error ) {
return e .buffer .Read (p )
}
func (e *Endpoint ) ReadFrom (p []byte ) (int , net .Addr , error ) {
i , err := e .Read (p )
return i , nil , err
}
func (e *Endpoint ) Write (p []byte ) (int , error ) {
n , err := e .mux .nextConn .Write (p )
if errors .Is (err , ice .ErrNoCandidatePairs ) {
return 0 , nil
} else if errors .Is (err , ice .ErrClosed ) {
return 0 , io .ErrClosedPipe
}
return n , err
}
func (e *Endpoint ) WriteTo (p []byte , _ net .Addr ) (int , error ) {
return e .Write (p )
}
func (e *Endpoint ) LocalAddr () net .Addr {
return e .mux .nextConn .LocalAddr ()
}
func (e *Endpoint ) RemoteAddr () net .Addr {
return e .mux .nextConn .RemoteAddr ()
}
func (e *Endpoint ) SetDeadline (time .Time ) error {
return nil
}
func (e *Endpoint ) SetReadDeadline (time .Time ) error {
return nil
}
func (e *Endpoint ) SetWriteDeadline (time .Time ) error {
return nil
}
func (e *Endpoint ) SetOnClose (onClose func ()) {
e .onClose = onClose
}
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 .