add new file

This commit is contained in:
he liu
2022-01-23 17:30:38 +08:00
parent 05b2e55f39
commit c482967f8c
125 changed files with 9688 additions and 0 deletions

71
transport/quic.go Normal file
View File

@@ -0,0 +1,71 @@
package transport
import (
"context"
quic "github.com/lucas-clemente/quic-go"
"net"
)
type QUIC struct {
session quic.Session
}
func NewQUIC(serverSession quic.Session) *QUIC {
return &QUIC{
session: serverSession,
}
}
func (qu *QUIC) Server() error {
return nil
}
func (qu *QUIC) Accept() (net.Conn, error) {
s, err := qu.session.AcceptStream(context.Background())
if err != nil {
return nil, err
}
return NewQUICConn(s, qu.session.RemoteAddr(), qu.session.LocalAddr()), nil
}
func (qu *QUIC) Addr() net.Addr {
return qu.session.LocalAddr()
}
func (qu *QUIC) RemoteAddr() net.Addr {
return qu.session.RemoteAddr()
}
func (qu *QUIC) Client() error {
return nil
}
func (qu *QUIC) Open() (net.Conn, error) {
s, err := qu.session.OpenStream()
if err != nil {
return nil, err
}
return NewQUICConn(s, qu.session.RemoteAddr(), qu.session.LocalAddr()), nil
}
func (qu *QUIC) Close() error {
return qu.session.CloseWithError(1, "by npc")
}
type QUICConn struct {
quic.Stream
localAddr net.Addr
remoteAddr net.Addr
}
func NewQUICConn(stream quic.Stream, rd net.Addr, ld net.Addr) *QUICConn {
return &QUICConn{Stream: stream, localAddr: ld, remoteAddr: rd}
}
func (qc *QUICConn) LocalAddr() net.Addr {
return qc.localAddr
}
func (qc *QUICConn) RemoteAddr() net.Addr {
return qc.remoteAddr
}

17
transport/transport.go Normal file
View File

@@ -0,0 +1,17 @@
package transport
import (
"net"
)
type TunnelType int
type Conn interface {
Server() error
Accept() (net.Conn, error)
Addr() net.Addr
RemoteAddr() net.Addr
Client() error
Open() (net.Conn, error)
Close() error
}

51
transport/yamux.go Normal file
View File

@@ -0,0 +1,51 @@
package transport
import (
"github.com/hashicorp/yamux"
"net"
)
type YaMux struct {
conn net.Conn
config *yamux.Config
session *yamux.Session
}
func NewYaMux(conn net.Conn, config *yamux.Config) *YaMux {
return &YaMux{
conn: conn,
config: config,
}
}
func (ym *YaMux) Server() error {
var err error
ym.session, err = yamux.Server(ym.conn, ym.config)
return err
}
func (ym *YaMux) Accept() (net.Conn, error) {
return ym.session.Accept()
}
func (ym *YaMux) Addr() net.Addr {
return ym.conn.LocalAddr()
}
func (ym *YaMux) RemoteAddr() net.Addr {
return ym.conn.RemoteAddr()
}
func (ym *YaMux) Client() error {
var err error
ym.session, err = yamux.Client(ym.conn, ym.config)
return err
}
func (ym *YaMux) Open() (net.Conn, error) {
return ym.session.Open()
}
func (ym *YaMux) Close() error {
return ym.conn.Close()
}