tcp/udp fix

This commit is contained in:
yusing 2024-03-31 07:04:08 +00:00
parent 6e45f3683c
commit cbe23d2ed1
3 changed files with 17 additions and 26 deletions

View file

@ -83,6 +83,10 @@ func newStreamRouteBase(config *ProxyConfig) (*StreamRouteBase, error) {
dstScheme = config.Scheme
}
if srcScheme != dstScheme {
return nil, NewNestedError("unsupported").Subjectf("%v -> %v", srcScheme, dstScheme)
}
return &StreamRouteBase{
Alias: config.Alias,
Type: streamType,
@ -106,14 +110,19 @@ func newStreamRouteBase(config *ProxyConfig) (*StreamRouteBase, error) {
}
func NewStreamRoute(config *ProxyConfig) (StreamRoute, error) {
base, err := newStreamRouteBase(config)
if err != nil {
return nil, err
}
switch config.Scheme {
case StreamType_TCP:
return NewTCPRoute(config)
base.StreamImpl = NewTCPRoute(base)
case StreamType_UDP:
return NewUDPRoute(config)
base.StreamImpl = NewUDPRoute(base)
default:
return nil, NewNestedError("invalid stream type").Subject(config.Scheme)
}
return base, nil
}
func (route *StreamRouteBase) ListeningUrl() string {

View file

@ -16,19 +16,11 @@ type TCPRoute struct {
listener net.Listener
}
func NewTCPRoute(config *ProxyConfig) (StreamRoute, error) {
base, err := newStreamRouteBase(config)
if err != nil {
return nil, NewNestedErrorFrom(err).Subject(config.Alias)
}
if base.TargetScheme != StreamType_TCP {
return nil, NewNestedError("unsupported").Subjectf("tcp -> %s", base.TargetScheme)
}
base.StreamImpl = &TCPRoute{
func NewTCPRoute(base *StreamRouteBase) StreamImpl {
return &TCPRoute{
StreamRouteBase: base,
listener: nil,
}
return base, nil
}
func (route *TCPRoute) Setup() error {
@ -44,7 +36,7 @@ func (route *TCPRoute) Accept() (interface{}, error) {
return route.listener.Accept()
}
func (route *TCPRoute) HandleConnection(c interface{}) error {
func (route *TCPRoute) Handle(c interface{}) error {
clientConn := c.(net.Conn)
defer clientConn.Close()

View file

@ -26,21 +26,11 @@ type UDPConn struct {
nReceived int
}
func NewUDPRoute(config *ProxyConfig) (StreamRoute, error) {
base, err := newStreamRouteBase(config)
if err != nil {
return nil, err
}
if base.TargetScheme != StreamType_UDP {
return nil, NewNestedError("unsupported").Subjectf("udp->%s", base.TargetScheme)
}
base.StreamImpl = &UDPRoute{
func NewUDPRoute(base *StreamRouteBase) StreamImpl {
return &UDPRoute{
StreamRouteBase: base,
connMap: make(map[net.Addr]net.Conn),
}
return base, nil
}
func (route *UDPRoute) Setup() error {
@ -83,7 +73,7 @@ func (route *UDPRoute) Accept() (interface{}, error) {
return conn, nil
}
func (route *UDPRoute) HandleConnection(c interface{}) error {
func (route *UDPRoute) Handle(c interface{}) error {
var err error
conn := c.(*UDPConn)