yamux.go 852 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package transport
  2. import (
  3. "github.com/hashicorp/yamux"
  4. "net"
  5. )
  6. type YaMux struct {
  7. conn net.Conn
  8. config *yamux.Config
  9. session *yamux.Session
  10. }
  11. func NewYaMux(conn net.Conn, config *yamux.Config) *YaMux {
  12. return &YaMux{
  13. conn: conn,
  14. config: config,
  15. }
  16. }
  17. func (ym *YaMux) Server() error {
  18. var err error
  19. ym.session, err = yamux.Server(ym.conn, ym.config)
  20. return err
  21. }
  22. func (ym *YaMux) Accept() (net.Conn, error) {
  23. return ym.session.Accept()
  24. }
  25. func (ym *YaMux) Addr() net.Addr {
  26. return ym.conn.LocalAddr()
  27. }
  28. func (ym *YaMux) RemoteAddr() net.Addr {
  29. return ym.conn.RemoteAddr()
  30. }
  31. func (ym *YaMux) Client() error {
  32. var err error
  33. ym.session, err = yamux.Client(ym.conn, ym.config)
  34. return err
  35. }
  36. func (ym *YaMux) Open() (net.Conn, error) {
  37. return ym.session.Open()
  38. }
  39. func (ym *YaMux) Close() error {
  40. return ym.conn.Close()
  41. }