package gost import ( "net" smux "gopkg.in/xtaci/smux.v1" ) type muxStreamConn struct { net.Conn stream *smux.Stream } func (c *muxStreamConn) Read(b []byte) (n int, err error) { return c.stream.Read(b) } func (c *muxStreamConn) Write(b []byte) (n int, err error) { return c.stream.Write(b) } func (c *muxStreamConn) Close() error { return c.stream.Close() } type muxSession struct { conn net.Conn session *smux.Session } func (session *muxSession) GetConn() (net.Conn, error) { stream, err := session.session.OpenStream() if err != nil { return nil, err } return &muxStreamConn{Conn: session.conn, stream: stream}, nil } func (session *muxSession) Close() error { return session.session.Close() } func (session *muxSession) IsClosed() bool { return session.session.IsClosed() } func (session *muxSession) NumStreams() int { return session.session.NumStreams() }