diff --git a/proxy/shadowsocks/config.go b/proxy/shadowsocks/config.go index d9e1e5aa9..46b21a4e1 100644 --- a/proxy/shadowsocks/config.go +++ b/proxy/shadowsocks/config.go @@ -5,6 +5,7 @@ import ( "io" "github.com/v2ray/v2ray-core/common/crypto" + "github.com/v2ray/v2ray-core/common/protocol" ) type Cipher interface { @@ -48,6 +49,7 @@ type Config struct { Cipher Cipher Key []byte UDP bool + Level protocol.UserLevel } func PasswordToCipherKey(password string, keySize int) []byte { diff --git a/proxy/shadowsocks/config_json.go b/proxy/shadowsocks/config_json.go index 71fe1d8c6..81cce0647 100644 --- a/proxy/shadowsocks/config_json.go +++ b/proxy/shadowsocks/config_json.go @@ -6,6 +6,7 @@ import ( "encoding/json" "github.com/v2ray/v2ray-core/common/log" + "github.com/v2ray/v2ray-core/common/protocol" "github.com/v2ray/v2ray-core/common/serial" "github.com/v2ray/v2ray-core/proxy/internal" "github.com/v2ray/v2ray-core/proxy/internal/config" @@ -16,6 +17,7 @@ func (this *Config) UnmarshalJSON(data []byte) error { Cipher serial.StringLiteral `json:"method"` Password serial.StringLiteral `json:"password"` UDP bool `json:"udp"` + Level byte `json:"level"` } jsonConfig := new(JsonConfig) if err := json.Unmarshal(data, jsonConfig); err != nil { @@ -44,6 +46,8 @@ func (this *Config) UnmarshalJSON(data []byte) error { } this.Key = PasswordToCipherKey(jsonConfig.Password.String(), this.Cipher.KeySize()) + this.Level = protocol.UserLevel(jsonConfig.Level) + return nil } diff --git a/proxy/shadowsocks/shadowsocks.go b/proxy/shadowsocks/shadowsocks.go index e4acbca2d..a8fedec37 100644 --- a/proxy/shadowsocks/shadowsocks.go +++ b/proxy/shadowsocks/shadowsocks.go @@ -13,6 +13,7 @@ import ( v2io "github.com/v2ray/v2ray-core/common/io" "github.com/v2ray/v2ray-core/common/log" v2net "github.com/v2ray/v2ray-core/common/net" + "github.com/v2ray/v2ray-core/common/protocol" "github.com/v2ray/v2ray-core/common/serial" "github.com/v2ray/v2ray-core/proxy" "github.com/v2ray/v2ray-core/proxy/internal" @@ -179,7 +180,8 @@ func (this *Shadowsocks) handleConnection(conn *hub.TCPConn) { return } - timedReader.SetTimeOut(300) + userSettings := protocol.GetUserSettings(this.config.Level) + timedReader.SetTimeOut(userSettings.PayloadReadTimeout) dest := v2net.TCPDestination(request.Address, request.Port) log.Access(conn.RemoteAddr(), dest, log.AccessAccepted, serial.StringLiteral(""))