File tree 4 files changed +62
-53
lines changed
4 files changed +62
-53
lines changed Original file line number Diff line number Diff line change 1
1
package baderror
2
2
3
- import "strings"
3
+ import (
4
+ "context"
5
+ "io"
6
+ "net"
7
+ "strings"
8
+
9
+ E "github.com/sagernet/sing/common/exceptions"
10
+ )
4
11
5
12
func Contains (err error , msgList ... string ) bool {
6
13
for _ , msg := range msgList {
@@ -10,3 +17,46 @@ func Contains(err error, msgList ...string) bool {
10
17
}
11
18
return false
12
19
}
20
+
21
+ func WrapH2 (err error ) error {
22
+ if err == nil {
23
+ return nil
24
+ }
25
+ err = E .Unwrap (err )
26
+ if err == io .ErrUnexpectedEOF {
27
+ return io .EOF
28
+ }
29
+ if Contains (err , "client disconnected" , "body closed by handler" ) {
30
+ return net .ErrClosed
31
+ }
32
+ return err
33
+ }
34
+
35
+ func WrapGRPC (err error ) error {
36
+ // grpc uses stupid internal error types
37
+ if err == nil {
38
+ return nil
39
+ }
40
+ if Contains (err , "EOF" ) {
41
+ return io .EOF
42
+ }
43
+ if Contains (err , "Canceled" ) {
44
+ return context .Canceled
45
+ }
46
+ if Contains (err ,
47
+ "the client connection is closing" ,
48
+ "server closed the stream without sending trailers" ) {
49
+ return net .ErrClosed
50
+ }
51
+ return err
52
+ }
53
+
54
+ func WrapQUIC (err error ) error {
55
+ if err == nil {
56
+ return nil
57
+ }
58
+ if Contains (err , "canceled with error code 0" ) {
59
+ return net .ErrClosed
60
+ }
61
+ return err
62
+ }
Load Diff This file was deleted.
Load Diff This file was deleted.
Original file line number Diff line number Diff line change 6
6
"syscall"
7
7
8
8
"github.com/sagernet/quic-go"
9
+ "github.com/sagernet/sing-box/common/baderror"
9
10
"github.com/sagernet/sing/common"
10
11
)
11
12
@@ -38,6 +39,16 @@ type StreamWrapper struct {
38
39
quic.Stream
39
40
}
40
41
42
+ func (s * StreamWrapper ) Read (p []byte ) (n int , err error ) {
43
+ n , err = s .Stream .Read (p )
44
+ return n , baderror .WrapQUIC (err )
45
+ }
46
+
47
+ func (s * StreamWrapper ) Write (p []byte ) (n int , err error ) {
48
+ n , err = s .Stream .Write (p )
49
+ return n , baderror .WrapQUIC (err )
50
+ }
51
+
41
52
func (s * StreamWrapper ) LocalAddr () net.Addr {
42
53
return s .Conn .LocalAddr ()
43
54
}
@@ -50,10 +61,6 @@ func (s *StreamWrapper) Upstream() any {
50
61
return s .Stream
51
62
}
52
63
53
- func (s * StreamWrapper ) ReaderReplaceable () bool {
54
- return true
55
- }
56
-
57
64
func (s * StreamWrapper ) WriterReplaceable () bool {
58
65
return true
59
66
}
You can’t perform that action at this time.
0 commit comments