icemux.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. // SPDX-FileCopyrightText: 2023 The Pion community <https://pion.ly>
  2. // SPDX-License-Identifier: MIT
  3. package webrtc
  4. import (
  5. "net"
  6. "time"
  7. "github.com/pion/ice/v2"
  8. "github.com/pion/logging"
  9. "github.com/pion/transport/v2"
  10. )
  11. // NewICETCPMux creates a new instance of ice.TCPMuxDefault. It enables use of
  12. // passive ICE TCP candidates.
  13. func NewICETCPMux(logger logging.LeveledLogger, listener net.Listener, readBufferSize int) ice.TCPMux {
  14. return ice.NewTCPMuxDefault(ice.TCPMuxParams{
  15. Listener: listener,
  16. Logger: logger,
  17. ReadBufferSize: readBufferSize,
  18. })
  19. }
  20. // NewICEUDPMux creates a new instance of ice.UDPMuxDefault. It allows many PeerConnections to be served
  21. // by a single UDP Port.
  22. func NewICEUDPMux(logger logging.LeveledLogger, udpConn net.PacketConn) ice.UDPMux {
  23. return ice.NewUDPMuxDefault(ice.UDPMuxParams{
  24. UDPConn: udpConn,
  25. Logger: logger,
  26. })
  27. }
  28. // [Psiphon] from https://github.com/pion/webrtc/pull/2298
  29. // NewICEUniversalUDPMux creates a new instance of ice.UniversalUDPMux. It allows many PeerConnections with
  30. // host, server reflexive and relayed candidates to by served by a single UDP port.
  31. func NewICEUniversalUDPMux(
  32. logger logging.LeveledLogger, udpConn net.PacketConn, xorMappedAddrCacheTTL time.Duration, transportNet transport.Net) ice.UniversalUDPMux {
  33. return ice.NewUniversalUDPMuxDefault(ice.UniversalUDPMuxParams{
  34. Logger: logger,
  35. UDPConn: udpConn,
  36. XORMappedAddrCacheTTL: xorMappedAddrCacheTTL,
  37. Net: transportNet,
  38. })
  39. }