Skip to content

Commit e019640

Browse files
committed
Remove bad rw usages
1 parent d8ec9c4 commit e019640

File tree

6 files changed

+74
-62
lines changed

6 files changed

+74
-62
lines changed

common/cond.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -363,10 +363,12 @@ func Close(closers ...any) error {
363363
return retErr
364364
}
365365

366+
// Deprecated: wtf is this?
366367
type Starter interface {
367368
Start() error
368369
}
369370

371+
// Deprecated: wtf is this?
370372
func Start(starters ...any) error {
371373
for _, rawStarter := range starters {
372374
if rawStarter == nil {

common/metadata/serializer.go

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import (
88
"github.com/sagernet/sing/common"
99
"github.com/sagernet/sing/common/buf"
1010
E "github.com/sagernet/sing/common/exceptions"
11-
"github.com/sagernet/sing/common/rw"
1211
)
1312

1413
const (
@@ -116,7 +115,7 @@ func (s *Serializer) WriteAddrPort(writer io.Writer, destination Socksaddr) erro
116115
return err
117116
}
118117
if !isBuffer {
119-
err = rw.WriteBytes(writer, buffer.Bytes())
118+
err = common.Error(writer.Write(buffer.Bytes()))
120119
}
121120
return err
122121
}
@@ -130,7 +129,8 @@ func (s *Serializer) AddrPortLen(destination Socksaddr) int {
130129
}
131130

132131
func (s *Serializer) ReadAddress(reader io.Reader) (Socksaddr, error) {
133-
af, err := rw.ReadByte(reader)
132+
var af byte
133+
err := binary.Read(reader, binary.BigEndian, &af)
134134
if err != nil {
135135
return Socksaddr{}, err
136136
}
@@ -164,11 +164,12 @@ func (s *Serializer) ReadAddress(reader io.Reader) (Socksaddr, error) {
164164
}
165165

166166
func (s *Serializer) ReadPort(reader io.Reader) (uint16, error) {
167-
port, err := rw.ReadBytes(reader, 2)
167+
var port uint16
168+
err := binary.Read(reader, binary.BigEndian, &port)
168169
if err != nil {
169170
return 0, E.Cause(err, "read port")
170171
}
171-
return binary.BigEndian.Uint16(port), nil
172+
return port, nil
172173
}
173174

174175
func (s *Serializer) ReadAddrPort(reader io.Reader) (destination Socksaddr, err error) {
@@ -195,11 +196,17 @@ func (s *Serializer) ReadAddrPort(reader io.Reader) (destination Socksaddr, err
195196
}
196197

197198
func ReadSockString(reader io.Reader) (string, error) {
198-
strLen, err := rw.ReadByte(reader)
199+
var strLen byte
200+
err := binary.Read(reader, binary.BigEndian, &strLen)
201+
if err != nil {
202+
return "", err
203+
}
204+
strBytes := make([]byte, strLen)
205+
_, err = io.ReadFull(reader, strBytes)
199206
if err != nil {
200207
return "", err
201208
}
202-
return rw.ReadString(reader, int(strLen))
209+
return string(strBytes), nil
203210
}
204211

205212
func WriteSocksString(buffer *buf.Buffer, str string) error {

protocol/socks/handshake.go

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package socks
22

33
import (
4+
std_bufio "bufio"
45
"context"
56
"io"
67
"net"
@@ -13,7 +14,7 @@ import (
1314
E "github.com/sagernet/sing/common/exceptions"
1415
M "github.com/sagernet/sing/common/metadata"
1516
N "github.com/sagernet/sing/common/network"
16-
"github.com/sagernet/sing/common/rw"
17+
"github.com/sagernet/sing/common/varbin"
1718
"github.com/sagernet/sing/protocol/socks/socks4"
1819
"github.com/sagernet/sing/protocol/socks/socks5"
1920
)
@@ -32,7 +33,7 @@ func ClientHandshake4(conn io.ReadWriter, command byte, destination M.Socksaddr,
3233
if err != nil {
3334
return socks4.Response{}, err
3435
}
35-
response, err := socks4.ReadResponse(conn)
36+
response, err := socks4.ReadResponse(varbin.StubReader(conn))
3637
if err != nil {
3738
return socks4.Response{}, err
3839
}
@@ -43,6 +44,7 @@ func ClientHandshake4(conn io.ReadWriter, command byte, destination M.Socksaddr,
4344
}
4445

4546
func ClientHandshake5(conn io.ReadWriter, command byte, destination M.Socksaddr, username string, password string) (socks5.Response, error) {
47+
reader := varbin.StubReader(conn)
4648
var method byte
4749
if username == "" {
4850
method = socks5.AuthTypeNotRequired
@@ -55,7 +57,7 @@ func ClientHandshake5(conn io.ReadWriter, command byte, destination M.Socksaddr,
5557
if err != nil {
5658
return socks5.Response{}, err
5759
}
58-
authResponse, err := socks5.ReadAuthResponse(conn)
60+
authResponse, err := socks5.ReadAuthResponse(reader)
5961
if err != nil {
6062
return socks5.Response{}, err
6163
}
@@ -67,7 +69,7 @@ func ClientHandshake5(conn io.ReadWriter, command byte, destination M.Socksaddr,
6769
if err != nil {
6870
return socks5.Response{}, err
6971
}
70-
usernamePasswordResponse, err := socks5.ReadUsernamePasswordAuthResponse(conn)
72+
usernamePasswordResponse, err := socks5.ReadUsernamePasswordAuthResponse(reader)
7173
if err != nil {
7274
return socks5.Response{}, err
7375
}
@@ -84,7 +86,7 @@ func ClientHandshake5(conn io.ReadWriter, command byte, destination M.Socksaddr,
8486
if err != nil {
8587
return socks5.Response{}, err
8688
}
87-
response, err := socks5.ReadResponse(conn)
89+
response, err := socks5.ReadResponse(reader)
8890
if err != nil {
8991
return socks5.Response{}, err
9092
}
@@ -95,17 +97,17 @@ func ClientHandshake5(conn io.ReadWriter, command byte, destination M.Socksaddr,
9597
}
9698

9799
func HandleConnection(ctx context.Context, conn net.Conn, authenticator *auth.Authenticator, handler Handler, metadata M.Metadata) error {
98-
version, err := rw.ReadByte(conn)
100+
return HandleConnection0(ctx, conn, std_bufio.NewReader(conn), authenticator, handler, metadata)
101+
}
102+
103+
func HandleConnection0(ctx context.Context, conn net.Conn, reader *std_bufio.Reader, authenticator *auth.Authenticator, handler Handler, metadata M.Metadata) error {
104+
version, err := reader.ReadByte()
99105
if err != nil {
100106
return err
101107
}
102-
return HandleConnection0(ctx, conn, version, authenticator, handler, metadata)
103-
}
104-
105-
func HandleConnection0(ctx context.Context, conn net.Conn, version byte, authenticator *auth.Authenticator, handler Handler, metadata M.Metadata) error {
106108
switch version {
107109
case socks4.Version:
108-
request, err := socks4.ReadRequest0(conn)
110+
request, err := socks4.ReadRequest0(reader)
109111
if err != nil {
110112
return err
111113
}
@@ -142,7 +144,7 @@ func HandleConnection0(ctx context.Context, conn net.Conn, version byte, authent
142144
return E.New("socks4: unsupported command ", request.Command)
143145
}
144146
case socks5.Version:
145-
authRequest, err := socks5.ReadAuthRequest0(conn)
147+
authRequest, err := socks5.ReadAuthRequest0(reader)
146148
if err != nil {
147149
return err
148150
}
@@ -167,7 +169,7 @@ func HandleConnection0(ctx context.Context, conn net.Conn, version byte, authent
167169
return err
168170
}
169171
if authMethod == socks5.AuthTypeUsernamePassword {
170-
usernamePasswordAuthRequest, err := socks5.ReadUsernamePasswordAuthRequest(conn)
172+
usernamePasswordAuthRequest, err := socks5.ReadUsernamePasswordAuthRequest(reader)
171173
if err != nil {
172174
return err
173175
}
@@ -186,7 +188,7 @@ func HandleConnection0(ctx context.Context, conn net.Conn, version byte, authent
186188
return E.New("socks5: authentication failed, username=", usernamePasswordAuthRequest.Username, ", password=", usernamePasswordAuthRequest.Password)
187189
}
188190
}
189-
request, err := socks5.ReadRequest(conn)
191+
request, err := socks5.ReadRequest(reader)
190192
if err != nil {
191193
return err
192194
}

protocol/socks/socks4/protocol.go

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import (
1010
"github.com/sagernet/sing/common/buf"
1111
E "github.com/sagernet/sing/common/exceptions"
1212
M "github.com/sagernet/sing/common/metadata"
13-
"github.com/sagernet/sing/common/rw"
13+
"github.com/sagernet/sing/common/varbin"
1414
)
1515

1616
const (
@@ -31,8 +31,8 @@ type Request struct {
3131
Username string
3232
}
3333

34-
func ReadRequest(reader io.Reader) (request Request, err error) {
35-
version, err := rw.ReadByte(reader)
34+
func ReadRequest(reader varbin.Reader) (request Request, err error) {
35+
version, err := reader.ReadByte()
3636
if err != nil {
3737
return
3838
}
@@ -43,8 +43,8 @@ func ReadRequest(reader io.Reader) (request Request, err error) {
4343
return ReadRequest0(reader)
4444
}
4545

46-
func ReadRequest0(reader io.Reader) (request Request, err error) {
47-
request.Command, err = rw.ReadByte(reader)
46+
func ReadRequest0(reader varbin.Reader) (request Request, err error) {
47+
request.Command, err = reader.ReadByte()
4848
if err != nil {
4949
return
5050
}
@@ -108,24 +108,24 @@ func WriteRequest(writer io.Writer, request Request) error {
108108
common.Must1(buffer.WriteString(request.Destination.AddrString()))
109109
common.Must(buffer.WriteZero())
110110
}
111-
return rw.WriteBytes(writer, buffer.Bytes())
111+
return common.Error(writer.Write(buffer.Bytes()))
112112
}
113113

114114
type Response struct {
115115
ReplyCode byte
116116
Destination M.Socksaddr
117117
}
118118

119-
func ReadResponse(reader io.Reader) (response Response, err error) {
120-
version, err := rw.ReadByte(reader)
119+
func ReadResponse(reader varbin.Reader) (response Response, err error) {
120+
version, err := reader.ReadByte()
121121
if err != nil {
122122
return
123123
}
124124
if version != 0 {
125125
err = E.New("excepted socks4 response version 0, got ", version)
126126
return
127127
}
128-
response.ReplyCode, err = rw.ReadByte(reader)
128+
response.ReplyCode, err = reader.ReadByte()
129129
if err != nil {
130130
return
131131
}
@@ -151,13 +151,13 @@ func WriteResponse(writer io.Writer, response Response) error {
151151
binary.Write(buffer, binary.BigEndian, response.Destination.Port),
152152
common.Error(buffer.Write(response.Destination.Addr.AsSlice())),
153153
)
154-
return rw.WriteBytes(writer, buffer.Bytes())
154+
return common.Error(writer.Write(buffer.Bytes()))
155155
}
156156

157-
func readString(reader io.Reader) (string, error) {
157+
func readString(reader varbin.Reader) (string, error) {
158158
buffer := bytes.Buffer{}
159159
for {
160-
b, err := rw.ReadByte(reader)
160+
b, err := reader.ReadByte()
161161
if err != nil {
162162
return "", err
163163
}

0 commit comments

Comments
 (0)