@@ -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.
11691145func Salt (s string ) []byte {
11701146 h := sha256 .Sum256 ([]byte (s ))
0 commit comments