|  | @@ -1,85 +0,0 @@
 | 
	
		
			
				|  |  | -package json
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -import (
 | 
	
		
			
				|  |  | -	"encoding/json"
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	"github.com/v2ray/v2ray-core/common/log"
 | 
	
		
			
				|  |  | -	v2net "github.com/v2ray/v2ray-core/common/net"
 | 
	
		
			
				|  |  | -	v2netjson "github.com/v2ray/v2ray-core/common/net/json"
 | 
	
		
			
				|  |  | -	"github.com/v2ray/v2ray-core/proxy/internal"
 | 
	
		
			
				|  |  | -	proxyconfig "github.com/v2ray/v2ray-core/proxy/internal/config"
 | 
	
		
			
				|  |  | -	jsonconfig "github.com/v2ray/v2ray-core/proxy/internal/config/json"
 | 
	
		
			
				|  |  | -	"github.com/v2ray/v2ray-core/proxy/vmess"
 | 
	
		
			
				|  |  | -	vmessjson "github.com/v2ray/v2ray-core/proxy/vmess/json"
 | 
	
		
			
				|  |  | -	"github.com/v2ray/v2ray-core/proxy/vmess/outbound"
 | 
	
		
			
				|  |  | -)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -type ConfigTarget struct {
 | 
	
		
			
				|  |  | -	Destination v2net.Destination
 | 
	
		
			
				|  |  | -	Users       []*vmessjson.ConfigUser
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -func (t *ConfigTarget) UnmarshalJSON(data []byte) error {
 | 
	
		
			
				|  |  | -	type RawConfigTarget struct {
 | 
	
		
			
				|  |  | -		Address *v2netjson.Host         `json:"address"`
 | 
	
		
			
				|  |  | -		Port    v2net.Port              `json:"port"`
 | 
	
		
			
				|  |  | -		Users   []*vmessjson.ConfigUser `json:"users"`
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -	var rawConfig RawConfigTarget
 | 
	
		
			
				|  |  | -	if err := json.Unmarshal(data, &rawConfig); err != nil {
 | 
	
		
			
				|  |  | -		return err
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -	if len(rawConfig.Users) == 0 {
 | 
	
		
			
				|  |  | -		log.Error("0 user configured for VMess outbound.")
 | 
	
		
			
				|  |  | -		return internal.ErrorBadConfiguration
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -	t.Users = rawConfig.Users
 | 
	
		
			
				|  |  | -	if rawConfig.Address == nil {
 | 
	
		
			
				|  |  | -		log.Error("Address is not set in VMess outbound config.")
 | 
	
		
			
				|  |  | -		return internal.ErrorBadConfiguration
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -	t.Destination = v2net.TCPDestination(rawConfig.Address.Address(), rawConfig.Port)
 | 
	
		
			
				|  |  | -	return nil
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -type Outbound struct {
 | 
	
		
			
				|  |  | -	TargetList []*ConfigTarget `json:"vnext"`
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -func (this *Outbound) UnmarshalJSON(data []byte) error {
 | 
	
		
			
				|  |  | -	type RawOutbound struct {
 | 
	
		
			
				|  |  | -		TargetList []*ConfigTarget `json:"vnext"`
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -	rawOutbound := &RawOutbound{}
 | 
	
		
			
				|  |  | -	err := json.Unmarshal(data, rawOutbound)
 | 
	
		
			
				|  |  | -	if err != nil {
 | 
	
		
			
				|  |  | -		return err
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -	if len(rawOutbound.TargetList) == 0 {
 | 
	
		
			
				|  |  | -		log.Error("0 VMess receiver configured.")
 | 
	
		
			
				|  |  | -		return internal.ErrorBadConfiguration
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -	this.TargetList = rawOutbound.TargetList
 | 
	
		
			
				|  |  | -	return nil
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -func (o *Outbound) Receivers() []*outbound.Receiver {
 | 
	
		
			
				|  |  | -	targets := make([]*outbound.Receiver, 0, 2*len(o.TargetList))
 | 
	
		
			
				|  |  | -	for _, rawTarget := range o.TargetList {
 | 
	
		
			
				|  |  | -		users := make([]vmess.User, 0, len(rawTarget.Users))
 | 
	
		
			
				|  |  | -		for _, rawUser := range rawTarget.Users {
 | 
	
		
			
				|  |  | -			users = append(users, rawUser)
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		targets = append(targets, &outbound.Receiver{
 | 
	
		
			
				|  |  | -			Destination: rawTarget.Destination,
 | 
	
		
			
				|  |  | -			Accounts:    users,
 | 
	
		
			
				|  |  | -		})
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -	return targets
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -func init() {
 | 
	
		
			
				|  |  | -	proxyconfig.RegisterOutboundConnectionConfig("vmess", jsonconfig.JsonConfigLoader(func() interface{} {
 | 
	
		
			
				|  |  | -		return new(Outbound)
 | 
	
		
			
				|  |  | -	}))
 | 
	
		
			
				|  |  | -}
 |