|
@@ -8,6 +8,7 @@ import (
|
|
|
|
|
|
"github.com/sagernet/sing-box/adapter"
|
|
|
C "github.com/sagernet/sing-box/constant"
|
|
|
+ E "github.com/sagernet/sing/common/exceptions"
|
|
|
"github.com/sagernet/sing/common/rw"
|
|
|
)
|
|
|
|
|
@@ -15,7 +16,7 @@ func RDP(_ context.Context, metadata *adapter.InboundContext, reader io.Reader)
|
|
|
var tpktVersion uint8
|
|
|
err := binary.Read(reader, binary.BigEndian, &tpktVersion)
|
|
|
if err != nil {
|
|
|
- return err
|
|
|
+ return E.Cause1(ErrNeedMoreData, err)
|
|
|
}
|
|
|
if tpktVersion != 0x03 {
|
|
|
return os.ErrInvalid
|
|
@@ -24,7 +25,7 @@ func RDP(_ context.Context, metadata *adapter.InboundContext, reader io.Reader)
|
|
|
var tpktReserved uint8
|
|
|
err = binary.Read(reader, binary.BigEndian, &tpktReserved)
|
|
|
if err != nil {
|
|
|
- return err
|
|
|
+ return E.Cause1(ErrNeedMoreData, err)
|
|
|
}
|
|
|
if tpktReserved != 0x00 {
|
|
|
return os.ErrInvalid
|
|
@@ -33,7 +34,7 @@ func RDP(_ context.Context, metadata *adapter.InboundContext, reader io.Reader)
|
|
|
var tpktLength uint16
|
|
|
err = binary.Read(reader, binary.BigEndian, &tpktLength)
|
|
|
if err != nil {
|
|
|
- return err
|
|
|
+ return E.Cause1(ErrNeedMoreData, err)
|
|
|
}
|
|
|
|
|
|
if tpktLength != 19 {
|
|
@@ -43,7 +44,7 @@ func RDP(_ context.Context, metadata *adapter.InboundContext, reader io.Reader)
|
|
|
var cotpLength uint8
|
|
|
err = binary.Read(reader, binary.BigEndian, &cotpLength)
|
|
|
if err != nil {
|
|
|
- return err
|
|
|
+ return E.Cause1(ErrNeedMoreData, err)
|
|
|
}
|
|
|
|
|
|
if cotpLength != 14 {
|
|
@@ -53,7 +54,7 @@ func RDP(_ context.Context, metadata *adapter.InboundContext, reader io.Reader)
|
|
|
var cotpTpduType uint8
|
|
|
err = binary.Read(reader, binary.BigEndian, &cotpTpduType)
|
|
|
if err != nil {
|
|
|
- return err
|
|
|
+ return E.Cause1(ErrNeedMoreData, err)
|
|
|
}
|
|
|
if cotpTpduType != 0xE0 {
|
|
|
return os.ErrInvalid
|
|
@@ -61,13 +62,13 @@ func RDP(_ context.Context, metadata *adapter.InboundContext, reader io.Reader)
|
|
|
|
|
|
err = rw.SkipN(reader, 5)
|
|
|
if err != nil {
|
|
|
- return err
|
|
|
+ return E.Cause1(ErrNeedMoreData, err)
|
|
|
}
|
|
|
|
|
|
var rdpType uint8
|
|
|
err = binary.Read(reader, binary.BigEndian, &rdpType)
|
|
|
if err != nil {
|
|
|
- return err
|
|
|
+ return E.Cause1(ErrNeedMoreData, err)
|
|
|
}
|
|
|
if rdpType != 0x01 {
|
|
|
return os.ErrInvalid
|
|
@@ -75,12 +76,12 @@ func RDP(_ context.Context, metadata *adapter.InboundContext, reader io.Reader)
|
|
|
var rdpFlags uint8
|
|
|
err = binary.Read(reader, binary.BigEndian, &rdpFlags)
|
|
|
if err != nil {
|
|
|
- return err
|
|
|
+ return E.Cause1(ErrNeedMoreData, err)
|
|
|
}
|
|
|
var rdpLength uint8
|
|
|
err = binary.Read(reader, binary.BigEndian, &rdpLength)
|
|
|
if err != nil {
|
|
|
- return err
|
|
|
+ return E.Cause1(ErrNeedMoreData, err)
|
|
|
}
|
|
|
if rdpLength != 8 {
|
|
|
return os.ErrInvalid
|