| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 | 
							- package json
 
- import (
 
- 	"encoding/json"
 
- 	"net"
 
- 	"github.com/v2ray/v2ray-core/common/log"
 
- 	v2net "github.com/v2ray/v2ray-core/common/net"
 
- 	proxyconfig "github.com/v2ray/v2ray-core/proxy/common/config"
 
- 	jsonconfig "github.com/v2ray/v2ray-core/proxy/common/config/json"
 
- 	vmessconfig "github.com/v2ray/v2ray-core/proxy/vmess/config"
 
- )
 
- type RawConfigTarget struct {
 
- 	Address string        `json:"address"`
 
- 	Port    uint16        `json:"port"`
 
- 	Users   []*ConfigUser `json:"users"`
 
- }
 
- type ConfigTarget struct {
 
- 	Address v2net.Address
 
- 	Users   []*ConfigUser
 
- }
 
- func (t *ConfigTarget) UnmarshalJSON(data []byte) error {
 
- 	var rawConfig RawConfigTarget
 
- 	if err := json.Unmarshal(data, &rawConfig); err != nil {
 
- 		return err
 
- 	}
 
- 	t.Users = rawConfig.Users
 
- 	ip := net.ParseIP(rawConfig.Address)
 
- 	if ip == nil {
 
- 		log.Error("Unable to parse IP: %s", rawConfig.Address)
 
- 		return proxyconfig.BadConfiguration
 
- 	}
 
- 	t.Address = v2net.IPAddress(ip, rawConfig.Port)
 
- 	return nil
 
- }
 
- type Outbound struct {
 
- 	TargetList []*ConfigTarget `json:"vnext"`
 
- }
 
- func (o *Outbound) Targets() []*vmessconfig.OutboundTarget {
 
- 	targets := make([]*vmessconfig.OutboundTarget, 0, 2*len(o.TargetList))
 
- 	for _, rawTarget := range o.TargetList {
 
- 		users := make([]vmessconfig.User, 0, len(rawTarget.Users))
 
- 		for _, rawUser := range rawTarget.Users {
 
- 			users = append(users, rawUser)
 
- 		}
 
- 		targets = append(targets, &vmessconfig.OutboundTarget{
 
- 			Destination: v2net.NewTCPDestination(rawTarget.Address),
 
- 			Accounts:    users,
 
- 		})
 
- 	}
 
- 	return targets
 
- }
 
- func init() {
 
- 	jsonconfig.RegisterOutboundConnectionConfig("vmess", func() interface{} {
 
- 		return new(Outbound)
 
- 	})
 
- }
 
 
  |