endpoint.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package mux
  2. import (
  3. "errors"
  4. "io"
  5. "net"
  6. "time"
  7. "github.com/pion/ice/v2"
  8. "github.com/pion/transport/packetio"
  9. )
  10. // Endpoint implements net.Conn. It is used to read muxed packets.
  11. type Endpoint struct {
  12. mux *Mux
  13. buffer *packetio.Buffer
  14. }
  15. // Close unregisters the endpoint from the Mux
  16. func (e *Endpoint) Close() (err error) {
  17. err = e.close()
  18. if err != nil {
  19. return err
  20. }
  21. e.mux.RemoveEndpoint(e)
  22. return nil
  23. }
  24. func (e *Endpoint) close() error {
  25. return e.buffer.Close()
  26. }
  27. // Read reads a packet of len(p) bytes from the underlying conn
  28. // that are matched by the associated MuxFunc
  29. func (e *Endpoint) Read(p []byte) (int, error) {
  30. return e.buffer.Read(p)
  31. }
  32. // Write writes len(p) bytes to the underlying conn
  33. func (e *Endpoint) Write(p []byte) (int, error) {
  34. n, err := e.mux.nextConn.Write(p)
  35. if errors.Is(err, ice.ErrNoCandidatePairs) {
  36. return 0, nil
  37. } else if errors.Is(err, ice.ErrClosed) {
  38. return 0, io.ErrClosedPipe
  39. }
  40. return n, err
  41. }
  42. // LocalAddr is a stub
  43. func (e *Endpoint) LocalAddr() net.Addr {
  44. return e.mux.nextConn.LocalAddr()
  45. }
  46. // RemoteAddr is a stub
  47. func (e *Endpoint) RemoteAddr() net.Addr {
  48. return e.mux.nextConn.RemoteAddr()
  49. }
  50. // SetDeadline is a stub
  51. func (e *Endpoint) SetDeadline(t time.Time) error {
  52. return nil
  53. }
  54. // SetReadDeadline is a stub
  55. func (e *Endpoint) SetReadDeadline(t time.Time) error {
  56. return nil
  57. }
  58. // SetWriteDeadline is a stub
  59. func (e *Endpoint) SetWriteDeadline(t time.Time) error {
  60. return nil
  61. }