summaryrefslogtreecommitdiff
path: root/vendor/github.com/pion/webrtc/v3/internal/mux/endpoint.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/pion/webrtc/v3/internal/mux/endpoint.go')
-rw-r--r--vendor/github.com/pion/webrtc/v3/internal/mux/endpoint.go75
1 files changed, 75 insertions, 0 deletions
diff --git a/vendor/github.com/pion/webrtc/v3/internal/mux/endpoint.go b/vendor/github.com/pion/webrtc/v3/internal/mux/endpoint.go
new file mode 100644
index 0000000..afccc07
--- /dev/null
+++ b/vendor/github.com/pion/webrtc/v3/internal/mux/endpoint.go
@@ -0,0 +1,75 @@
+package mux
+
+import (
+ "errors"
+ "io"
+ "net"
+ "time"
+
+ "github.com/pion/ice/v2"
+ "github.com/pion/transport/packetio"
+)
+
+// Endpoint implements net.Conn. It is used to read muxed packets.
+type Endpoint struct {
+ mux *Mux
+ buffer *packetio.Buffer
+}
+
+// Close unregisters the endpoint from the Mux
+func (e *Endpoint) Close() (err error) {
+ err = e.close()
+ if err != nil {
+ return err
+ }
+
+ e.mux.RemoveEndpoint(e)
+ return nil
+}
+
+func (e *Endpoint) close() error {
+ return e.buffer.Close()
+}
+
+// Read reads a packet of len(p) bytes from the underlying conn
+// that are matched by the associated MuxFunc
+func (e *Endpoint) Read(p []byte) (int, error) {
+ return e.buffer.Read(p)
+}
+
+// Write writes len(p) bytes to the underlying conn
+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
+}
+
+// LocalAddr is a stub
+func (e *Endpoint) LocalAddr() net.Addr {
+ return e.mux.nextConn.LocalAddr()
+}
+
+// RemoteAddr is a stub
+func (e *Endpoint) RemoteAddr() net.Addr {
+ return e.mux.nextConn.RemoteAddr()
+}
+
+// SetDeadline is a stub
+func (e *Endpoint) SetDeadline(t time.Time) error {
+ return nil
+}
+
+// SetReadDeadline is a stub
+func (e *Endpoint) SetReadDeadline(t time.Time) error {
+ return nil
+}
+
+// SetWriteDeadline is a stub
+func (e *Endpoint) SetWriteDeadline(t time.Time) error {
+ return nil
+}