1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- package baderror
- import (
- "context"
- "io"
- "net"
- "strings"
- E "github.com/sagernet/sing/common/exceptions"
- )
- func Contains(err error, msgList ...string) bool {
- for _, msg := range msgList {
- if strings.Contains(err.Error(), msg) {
- return true
- }
- }
- return false
- }
- func WrapH2(err error) error {
- if err == nil {
- return nil
- }
- err = E.Unwrap(err)
- if err == io.ErrUnexpectedEOF {
- return io.EOF
- }
- if Contains(err, "client disconnected", "body closed by handler", "response body closed", "; CANCEL") {
- return net.ErrClosed
- }
- return err
- }
- func WrapGRPC(err error) error {
- // grpc uses stupid internal error types
- if err == nil {
- return nil
- }
- if Contains(err, "EOF") {
- return io.EOF
- }
- if Contains(err, "Canceled") {
- return context.Canceled
- }
- if Contains(err,
- "the client connection is closing",
- "server closed the stream without sending trailers") {
- return net.ErrClosed
- }
- return err
- }
- func WrapQUIC(err error) error {
- if err == nil {
- return nil
- }
- if Contains(err, "canceled with error code 0") {
- return net.ErrClosed
- }
- return err
- }
|