Ver código fonte

apply user settings to shadowsocks

v2ray 9 anos atrás
pai
commit
2932d23b32

+ 2 - 0
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 {

+ 4 - 0
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
 }
 

+ 3 - 1
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(""))