refine user timeout

pull/467/head^2
Darien Raymond 2017-01-31 17:46:39 +01:00
parent ad7d98473f
commit 08b9778f05
No known key found for this signature in database
GPG Key ID: 7251FFA14BB18169
3 changed files with 13 additions and 16 deletions

View File

@ -1,6 +1,8 @@
package protocol package protocol
import ( import (
"time"
"v2ray.com/core/common/errors" "v2ray.com/core/common/errors"
) )
@ -30,15 +32,18 @@ func (v *User) GetTypedAccount() (Account, error) {
} }
func (v *User) GetSettings() UserSettings { func (v *User) GetSettings() UserSettings {
settings := UserSettings{ settings := UserSettings{}
PayloadReadTimeout: 120, switch v.Level {
} case 0:
if v.Level > 0 { settings.PayloadTimeout = time.Second * 30
settings.PayloadReadTimeout = 0 case 1:
settings.PayloadTimeout = time.Minute * 2
default:
settings.PayloadTimeout = time.Minute * 5
} }
return settings return settings
} }
type UserSettings struct { type UserSettings struct {
PayloadReadTimeout uint32 PayloadTimeout time.Duration
} }

View File

@ -158,11 +158,7 @@ func (s *Server) handleConnection(ctx context.Context, conn internet.Connection)
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(ctx)
userSettings := s.user.GetSettings() userSettings := s.user.GetSettings()
timeout := time.Second * time.Duration(userSettings.PayloadReadTimeout) timer := signal.CancelAfterInactivity(ctx, cancel, userSettings.PayloadTimeout)
if timeout == 0 {
timeout = time.Minute * 2
}
timer := signal.CancelAfterInactivity(ctx, cancel, timeout)
ray := s.packetDispatcher.DispatchToOutbound(ctx) ray := s.packetDispatcher.DispatchToOutbound(ctx)
requestDone := signal.ExecuteAsync(func() error { requestDone := signal.ExecuteAsync(func() error {

View File

@ -203,11 +203,7 @@ func (v *VMessInboundHandler) Process(ctx context.Context, network net.Network,
ctx = proxy.ContextWithDestination(ctx, request.Destination()) ctx = proxy.ContextWithDestination(ctx, request.Destination())
ctx = protocol.ContextWithUser(ctx, request.User) ctx = protocol.ContextWithUser(ctx, request.User)
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(ctx)
timeout := time.Second * time.Duration(userSettings.PayloadReadTimeout) timer := signal.CancelAfterInactivity(ctx, cancel, userSettings.PayloadTimeout)
if timeout == 0 {
timeout = time.Minute * 2
}
timer := signal.CancelAfterInactivity(ctx, cancel, timeout)
ray := v.packetDispatcher.DispatchToOutbound(ctx) ray := v.packetDispatcher.DispatchToOutbound(ctx)
input := ray.InboundInput() input := ray.InboundInput()