Skip to content

Commit 3899cef

Browse files
committed
2025-09-09 17:50:08
1 parent 35ab30c commit 3899cef

File tree

5 files changed

+25
-44
lines changed

5 files changed

+25
-44
lines changed

daze.go

Lines changed: 5 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -592,9 +592,10 @@ func (l *Locale) Serve(ctx *Context, cli io.ReadWriteCloser) error {
592592
buf = make([]byte, 1)
593593
err error
594594
)
595-
cli = &RateConn{
596-
Conn: cli,
597-
Rate: l.Limits,
595+
cli = &ReadWriteCloser{
596+
Reader: io.TeeReader(cli, rate.NewLimitsWriter(l.Limits)),
597+
Writer: io.MultiWriter(cli, rate.NewLimitsWriter(l.Limits)),
598+
Closer: cli,
598599
}
599600
_, err = io.ReadFull(cli, buf)
600601
if err != nil {
@@ -606,7 +607,7 @@ func (l *Locale) Serve(ctx *Context, cli io.ReadWriteCloser) error {
606607
}
607608
return err
608609
}
609-
cli = ReadWriteCloser{
610+
cli = &ReadWriteCloser{
610611
Reader: io.MultiReader(bytes.NewReader(buf), cli),
611612
Writer: cli,
612613
Closer: cli,
@@ -1140,31 +1141,6 @@ func (r *RandomReader) Read(p []byte) (int, error) {
11401141
return len(p), nil
11411142
}
11421143

1143-
// RateConn wraps a net.Conn with a per-conn and a rate limiter.
1144-
type RateConn struct {
1145-
Conn io.ReadWriteCloser
1146-
Rate *rate.Limits
1147-
}
1148-
1149-
// Close closes the connection.
1150-
func (r *RateConn) Close() error {
1151-
return r.Conn.Close()
1152-
}
1153-
1154-
// Read reads up to len(p) bytes into p.
1155-
func (r *RateConn) Read(p []byte) (int, error) {
1156-
n, err := r.Conn.Read(p)
1157-
r.Rate.Wait(uint64(n))
1158-
return n, err
1159-
}
1160-
1161-
// Write writes len(p) bytes from p to the underlying data stream.
1162-
func (r *RateConn) Write(p []byte) (int, error) {
1163-
n, err := r.Conn.Write(p)
1164-
r.Rate.Wait(uint64(n))
1165-
return n, err
1166-
}
1167-
11681144
// Salt converts the stupid password passed in by the user to 32-sized byte array.
11691145
func Salt(s string) []byte {
11701146
h := sha256.Sum256([]byte(s))

protocol/ashe/engine.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -234,9 +234,10 @@ func (s *Server) Run() error {
234234
idx++
235235
ctx := &daze.Context{Cid: idx}
236236
log.Printf("conn: %08x accept remote=%s", ctx.Cid, cli.RemoteAddr())
237-
rtc := &daze.RateConn{
238-
Conn: cli,
239-
Rate: s.Limits,
237+
rtc := &daze.ReadWriteCloser{
238+
Reader: io.TeeReader(cli, rate.NewLimitsWriter(s.Limits)),
239+
Writer: io.MultiWriter(cli, rate.NewLimitsWriter(s.Limits)),
240+
Closer: cli,
240241
}
241242
go func() {
242243
defer rtc.Close()

protocol/baboon/engine.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,10 @@ func (s *Server) ServeDaze(w http.ResponseWriter, r *http.Request) {
7979
spy := &ashe.Server{Cipher: s.Cipher}
8080
ctx := &daze.Context{Cid: atomic.AddUint32(&s.NextID, 1)}
8181
log.Printf("conn: %08x accept remote=%s", ctx.Cid, cc.RemoteAddr())
82-
rtc := &daze.RateConn{
83-
Conn: cli,
84-
Rate: s.Limits,
82+
rtc := &daze.ReadWriteCloser{
83+
Reader: io.TeeReader(cli, rate.NewLimitsWriter(s.Limits)),
84+
Writer: io.MultiWriter(cli, rate.NewLimitsWriter(s.Limits)),
85+
Closer: cli,
8586
}
8687
if err := spy.Serve(ctx, rtc); err != nil {
8788
log.Printf("conn: %08x error %s", ctx.Cid, err)

protocol/czar/engine.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -108,9 +108,10 @@ func (s *Server) Run() error {
108108
}
109109
break
110110
}
111-
rtc := &daze.RateConn{
112-
Conn: cli,
113-
Rate: s.Limits,
111+
rtc := &daze.ReadWriteCloser{
112+
Reader: io.TeeReader(cli, rate.NewLimitsWriter(s.Limits)),
113+
Writer: io.MultiWriter(cli, rate.NewLimitsWriter(s.Limits)),
114+
Closer: cli,
114115
}
115116
mux := NewMuxServer(rtc)
116117
go func() {

protocol/dahlia/engine.go

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,10 @@ func (s *Server) Run() error {
7070
idx++
7171
ctx := &daze.Context{Cid: idx}
7272
log.Printf("conn: %08x accept remote=%s", ctx.Cid, cli.RemoteAddr())
73-
rtc := &daze.RateConn{
74-
Conn: cli,
75-
Rate: s.Limits,
73+
rtc := daze.ReadWriteCloser{
74+
Reader: io.TeeReader(cli, rate.NewLimitsWriter(s.Limits)),
75+
Writer: io.MultiWriter(cli, rate.NewLimitsWriter(s.Limits)),
76+
Closer: cli,
7677
}
7778
go func() {
7879
defer rtc.Close()
@@ -148,9 +149,10 @@ func (c *Client) Run() error {
148149
}
149150
break
150151
}
151-
rtc := &daze.RateConn{
152-
Conn: cli,
153-
Rate: c.Limits,
152+
rtc := &daze.ReadWriteCloser{
153+
Reader: io.TeeReader(cli, rate.NewLimitsWriter(c.Limits)),
154+
Writer: io.MultiWriter(cli, rate.NewLimitsWriter(c.Limits)),
155+
Closer: cli,
154156
}
155157
idx++
156158
ctx := &daze.Context{Cid: idx}

0 commit comments

Comments
 (0)