1
0
mirror of https://github.com/v2fly/v2ray-core.git synced 2025-12-27 20:45:28 -05:00

cancel sessions after inactivity

This commit is contained in:
Darien Raymond
2017-01-31 12:42:05 +01:00
parent 75b5a62c11
commit c462e35aad
11 changed files with 159 additions and 46 deletions

View File

@@ -4,6 +4,7 @@ import (
"io"
"v2ray.com/core/common/errors"
"v2ray.com/core/common/signal"
)
// Reader extends io.Reader with alloc.Buffer.
@@ -33,13 +34,15 @@ func ReadFullFrom(reader io.Reader, size int) Supplier {
}
// Pipe dumps all content from reader to writer, until an error happens.
func Pipe(reader Reader, writer Writer) error {
func Pipe(timer *signal.ActivityTimer, reader Reader, writer Writer) error {
for {
buffer, err := reader.Read()
if err != nil {
return err
}
timer.UpdateActivity()
if buffer.IsEmpty() {
buffer.Release()
continue
@@ -54,8 +57,8 @@ func Pipe(reader Reader, writer Writer) error {
}
// PipeUntilEOF behaves the same as Pipe(). The only difference is PipeUntilEOF returns nil on EOF.
func PipeUntilEOF(reader Reader, writer Writer) error {
err := Pipe(reader, writer)
func PipeUntilEOF(timer *signal.ActivityTimer, reader Reader, writer Writer) error {
err := Pipe(timer, reader, writer)
if err != nil && errors.Cause(err) != io.EOF {
return err
}