mirror of
https://github.com/SagerNet/sing.git
synced 2025-04-06 05:17:38 +03:00
More server error messages
This commit is contained in:
parent
1843d16569
commit
8697b84d59
4 changed files with 35 additions and 19 deletions
|
@ -9,24 +9,36 @@ import (
|
|||
"syscall"
|
||||
)
|
||||
|
||||
type exception struct {
|
||||
type causeError struct {
|
||||
message string
|
||||
cause error
|
||||
}
|
||||
|
||||
func (e exception) Error() string {
|
||||
func (e *causeError) Error() string {
|
||||
if e.cause == nil {
|
||||
return e.message
|
||||
}
|
||||
return e.message + ": " + e.cause.Error()
|
||||
}
|
||||
|
||||
func (e exception) Unwrap() error {
|
||||
func (e *causeError) Unwrap() error {
|
||||
return e.cause
|
||||
}
|
||||
|
||||
func (e exception) Is(err error) bool {
|
||||
return e == err || errors.Is(e.cause, err)
|
||||
type extendedError struct {
|
||||
message string
|
||||
cause error
|
||||
}
|
||||
|
||||
func (e *extendedError) Error() string {
|
||||
if e.cause == nil {
|
||||
return e.message
|
||||
}
|
||||
return e.cause.Error() + e.message
|
||||
}
|
||||
|
||||
func (e *extendedError) Unwrap() error {
|
||||
return e.cause
|
||||
}
|
||||
|
||||
func New(message ...any) error {
|
||||
|
@ -34,7 +46,11 @@ func New(message ...any) error {
|
|||
}
|
||||
|
||||
func Cause(cause error, message ...any) error {
|
||||
return exception{fmt.Sprint(message...), cause}
|
||||
return &causeError{fmt.Sprint(message...), cause}
|
||||
}
|
||||
|
||||
func Extend(cause error, message ...any) error {
|
||||
return &extendedError{fmt.Sprint(message...), cause}
|
||||
}
|
||||
|
||||
func IsClosed(err error) bool {
|
||||
|
|
|
@ -317,7 +317,7 @@ func (c *clientConn) readResponse() error {
|
|||
return err
|
||||
}
|
||||
if headerType != HeaderTypeServer {
|
||||
return ErrBadHeaderType
|
||||
return E.Extend(ErrBadHeaderType, "expected ", HeaderTypeServer, ", got ", headerType)
|
||||
}
|
||||
|
||||
var epoch uint64
|
||||
|
@ -328,7 +328,7 @@ func (c *clientConn) readResponse() error {
|
|||
|
||||
diff := int(math.Abs(float64(time.Now().Unix() - int64(epoch))))
|
||||
if diff > 30 {
|
||||
return ErrBadTimestamp
|
||||
return E.Extend(ErrBadTimestamp, "received ", epoch, ", diff ", diff, "s")
|
||||
}
|
||||
|
||||
_requestSalt := buf.Make(c.keySaltLength)
|
||||
|
@ -525,7 +525,7 @@ func (c *clientPacketConn) ReadPacket(buffer *buf.Buffer) (M.Socksaddr, error) {
|
|||
return M.Socksaddr{}, err
|
||||
}
|
||||
if headerType != HeaderTypeServer {
|
||||
return M.Socksaddr{}, ErrBadHeaderType
|
||||
return M.Socksaddr{}, E.Extend(ErrBadHeaderType, "expected ", HeaderTypeServer, ", got ", headerType)
|
||||
}
|
||||
|
||||
var epoch uint64
|
||||
|
@ -536,7 +536,7 @@ func (c *clientPacketConn) ReadPacket(buffer *buf.Buffer) (M.Socksaddr, error) {
|
|||
|
||||
diff := int(math.Abs(float64(time.Now().Unix() - int64(epoch))))
|
||||
if diff > 30 {
|
||||
return M.Socksaddr{}, ErrBadTimestamp
|
||||
return M.Socksaddr{}, E.Extend(ErrBadTimestamp, "received ", epoch, ", diff ", diff, "s")
|
||||
}
|
||||
|
||||
if sessionId == c.session.remoteSessionId {
|
||||
|
|
|
@ -138,7 +138,7 @@ func (s *Service) newConnection(ctx context.Context, conn net.Conn, metadata M.M
|
|||
|
||||
err = reader.ReadChunk(header[s.keySaltLength:])
|
||||
if err != nil {
|
||||
return E.Cause(err, "read request fixed length chunk")
|
||||
return err
|
||||
}
|
||||
|
||||
headerType, err := reader.ReadByte()
|
||||
|
@ -147,7 +147,7 @@ func (s *Service) newConnection(ctx context.Context, conn net.Conn, metadata M.M
|
|||
}
|
||||
|
||||
if headerType != HeaderTypeClient {
|
||||
return ErrBadHeaderType
|
||||
return E.Extend(ErrBadHeaderType, "expected ", HeaderTypeClient, ", got ", headerType)
|
||||
}
|
||||
|
||||
var epoch uint64
|
||||
|
@ -158,7 +158,7 @@ func (s *Service) newConnection(ctx context.Context, conn net.Conn, metadata M.M
|
|||
|
||||
diff := int(math.Abs(float64(time.Now().Unix() - int64(epoch))))
|
||||
if diff > 30 {
|
||||
return ErrBadTimestamp
|
||||
return E.Extend(ErrBadTimestamp, "received ", epoch, ", diff ", diff, "s")
|
||||
}
|
||||
|
||||
var length uint16
|
||||
|
@ -356,7 +356,7 @@ process:
|
|||
goto returnErr
|
||||
}
|
||||
if headerType != HeaderTypeClient {
|
||||
err = ErrBadHeaderType
|
||||
err = E.Extend(ErrBadHeaderType, "expected ", HeaderTypeClient, ", got ", headerType)
|
||||
goto returnErr
|
||||
}
|
||||
|
||||
|
@ -367,7 +367,7 @@ process:
|
|||
}
|
||||
diff := int(math.Abs(float64(time.Now().Unix() - int64(epoch))))
|
||||
if diff > 30 {
|
||||
err = ErrBadTimestamp
|
||||
err = E.Extend(ErrBadTimestamp, "received ", epoch, ", diff ", diff, "s")
|
||||
goto returnErr
|
||||
}
|
||||
|
||||
|
|
|
@ -145,7 +145,7 @@ func (s *MultiService[U]) newConnection(ctx context.Context, conn net.Conn, meta
|
|||
}
|
||||
|
||||
if headerType != HeaderTypeClient {
|
||||
return ErrBadHeaderType
|
||||
return E.Extend(ErrBadHeaderType, "expected ", HeaderTypeClient, ", got ", headerType)
|
||||
}
|
||||
|
||||
var epoch uint64
|
||||
|
@ -155,7 +155,7 @@ func (s *MultiService[U]) newConnection(ctx context.Context, conn net.Conn, meta
|
|||
}
|
||||
diff := int(math.Abs(float64(time.Now().Unix() - int64(epoch))))
|
||||
if diff > 30 {
|
||||
return ErrBadTimestamp
|
||||
return E.Extend(ErrBadTimestamp, "received ", epoch, ", diff ", diff, "s")
|
||||
}
|
||||
var length uint16
|
||||
err = binary.Read(reader, binary.BigEndian, &length)
|
||||
|
@ -284,7 +284,7 @@ process:
|
|||
goto returnErr
|
||||
}
|
||||
if headerType != HeaderTypeClient {
|
||||
err = ErrBadHeaderType
|
||||
err = E.Extend(ErrBadHeaderType, "expected ", HeaderTypeClient, ", got ", headerType)
|
||||
goto returnErr
|
||||
}
|
||||
|
||||
|
@ -295,7 +295,7 @@ process:
|
|||
}
|
||||
diff := int(math.Abs(float64(time.Now().Unix() - int64(epoch))))
|
||||
if diff > 30 {
|
||||
err = ErrBadTimestamp
|
||||
err = E.Extend(ErrBadTimestamp, "received ", epoch, ", diff ", diff, "s")
|
||||
goto returnErr
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue