add rtcp
This commit is contained in:
@ -6,70 +6,80 @@ import (
|
||||
smux "github.com/xtaci/smux"
|
||||
)
|
||||
|
||||
type MuxSession struct {
|
||||
type Session struct {
|
||||
conn net.Conn
|
||||
session *smux.Session
|
||||
}
|
||||
|
||||
func NewMuxSession(conn net.Conn) (*MuxSession, error) {
|
||||
// Upgrade connection to multiplex stream.
|
||||
func ClientSession(conn net.Conn) (*Session, error) {
|
||||
s, err := smux.Client(conn, smux.DefaultConfig())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &MuxSession{
|
||||
return &Session{
|
||||
conn: conn,
|
||||
session: s,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (session *MuxSession) GetConn() (net.Conn, error) {
|
||||
func ServerSession(conn net.Conn) (*Session, error) {
|
||||
s, err := smux.Server(conn, smux.DefaultConfig())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &Session{
|
||||
conn: conn,
|
||||
session: s,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (session *Session) GetConn() (net.Conn, error) {
|
||||
stream, err := session.session.OpenStream()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &muxStreamConn{Conn: session.conn, stream: stream}, nil
|
||||
return &StreamConn{Conn: session.conn, stream: stream}, nil
|
||||
}
|
||||
|
||||
func (session *MuxSession) Accept() (net.Conn, error) {
|
||||
func (session *Session) Accept() (net.Conn, error) {
|
||||
stream, err := session.session.AcceptStream()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &muxStreamConn{Conn: session.conn, stream: stream}, nil
|
||||
return &StreamConn{Conn: session.conn, stream: stream}, nil
|
||||
}
|
||||
|
||||
func (session *MuxSession) Close() error {
|
||||
func (session *Session) Close() error {
|
||||
if session.session == nil {
|
||||
return nil
|
||||
}
|
||||
return session.session.Close()
|
||||
}
|
||||
|
||||
func (session *MuxSession) IsClosed() bool {
|
||||
func (session *Session) IsClosed() bool {
|
||||
if session.session == nil {
|
||||
return true
|
||||
}
|
||||
return session.session.IsClosed()
|
||||
}
|
||||
|
||||
func (session *MuxSession) NumStreams() int {
|
||||
func (session *Session) NumStreams() int {
|
||||
return session.session.NumStreams()
|
||||
}
|
||||
|
||||
type muxStreamConn struct {
|
||||
type StreamConn struct {
|
||||
net.Conn
|
||||
stream *smux.Stream
|
||||
}
|
||||
|
||||
func (c *muxStreamConn) Read(b []byte) (n int, err error) {
|
||||
func (c *StreamConn) Read(b []byte) (n int, err error) {
|
||||
return c.stream.Read(b)
|
||||
}
|
||||
|
||||
func (c *muxStreamConn) Write(b []byte) (n int, err error) {
|
||||
func (c *StreamConn) Write(b []byte) (n int, err error) {
|
||||
return c.stream.Write(b)
|
||||
}
|
||||
|
||||
func (c *muxStreamConn) Close() error {
|
||||
func (c *StreamConn) Close() error {
|
||||
return c.stream.Close()
|
||||
}
|
||||
|
Reference in New Issue
Block a user