Bladeren bron

socks client config

v2ray 9 jaren geleden
bovenliggende
commit
6a620d1c6d

+ 18 - 0
proxy/socks/account.go

@@ -0,0 +1,18 @@
+package socks
+
+import (
+	"github.com/v2ray/v2ray-core/common/protocol"
+)
+
+type Account struct {
+	Username string `json:"user"`
+	Password string `json:"pass"`
+}
+
+func (this *Account) Equals(another protocol.Account) bool {
+	socksAccount, ok := another.(*Account)
+	if !ok {
+		return false
+	}
+	return this.Username == socksAccount.Username
+}

+ 9 - 0
proxy/socks/client_config.go

@@ -0,0 +1,9 @@
+package socks
+
+import (
+	"github.com/v2ray/v2ray-core/common/protocol"
+)
+
+type ClientConfig struct {
+	Servers []*protocol.ServerSpec
+}

+ 47 - 0
proxy/socks/client_config_json.go

@@ -0,0 +1,47 @@
+package socks
+
+import (
+	"encoding/json"
+	"errors"
+
+	v2net "github.com/v2ray/v2ray-core/common/net"
+	"github.com/v2ray/v2ray-core/common/protocol"
+	"github.com/v2ray/v2ray-core/proxy/internal"
+)
+
+func (this *ClientConfig) UnmarshalJSON(data []byte) error {
+	type ServerConfig struct {
+		Address *v2net.AddressJson `json:"address"`
+		Port    v2net.Port         `json:"port"`
+		Users   []json.RawMessage  `json:"users"`
+	}
+	type JsonConfig struct {
+		Servers []*ServerConfig `json:"servers"`
+	}
+	jsonConfig := new(JsonConfig)
+	if err := json.Unmarshal(data, jsonConfig); err != nil {
+		return errors.New("Socks|Client: Failed to parse config: " + err.Error())
+	}
+	this.Servers = make([]*protocol.ServerSpec, len(jsonConfig.Servers))
+	for idx, serverConfig := range jsonConfig.Servers {
+		server := protocol.NewServerSpec(v2net.TCPDestination(serverConfig.Address.Address, serverConfig.Port), protocol.AlwaysValid())
+		for _, rawUser := range serverConfig.Users {
+			user := new(protocol.User)
+			if err := json.Unmarshal(rawUser, user); err != nil {
+				return errors.New("Socks|Client: Failed to parse user: " + err.Error())
+			}
+			account := new(Account)
+			if err := json.Unmarshal(rawUser, account); err != nil {
+				return errors.New("Socks|Client: Failed to parse socks account: " + err.Error())
+			}
+			user.Account = account
+			server.AddUser(user)
+		}
+		this.Servers[idx] = server
+	}
+	return nil
+}
+
+func init() {
+	internal.RegisterOutboundConfig("socks", func() interface{} { return new(ClientConfig) })
+}

+ 0 - 0
proxy/socks/config.go → proxy/socks/server_config.go


+ 1 - 6
proxy/socks/config_json.go → proxy/socks/server_config_json.go

@@ -17,14 +17,9 @@ const (
 )
 
 func (this *Config) UnmarshalJSON(data []byte) error {
-	type SocksAccount struct {
-		Username string `json:"user"`
-		Password string `json:"pass"`
-	}
-
 	type SocksConfig struct {
 		AuthMethod string             `json:"auth"`
-		Accounts   []*SocksAccount    `json:"accounts"`
+		Accounts   []*Account         `json:"accounts"`
 		UDP        bool               `json:"udp"`
 		Host       *v2net.AddressJson `json:"ip"`
 		Timeout    int                `json:"timeout"`

+ 0 - 0
proxy/socks/config_json_test.go → proxy/socks/server_config_json_test.go