|  | @@ -1,70 +1,70 @@
 | 
	
		
			
				|  |  |  package json
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  import (
 | 
	
		
			
				|  |  | -  "encoding/json"
 | 
	
		
			
				|  |  | -  "io/ioutil"
 | 
	
		
			
				|  |  | -  "path/filepath"
 | 
	
		
			
				|  |  | -  
 | 
	
		
			
				|  |  | -  "github.com/v2ray/v2ray-core"
 | 
	
		
			
				|  |  | -  "github.com/v2ray/v2ray-core/log"
 | 
	
		
			
				|  |  | +	"encoding/json"
 | 
	
		
			
				|  |  | +	"io/ioutil"
 | 
	
		
			
				|  |  | +	"path/filepath"
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	"github.com/v2ray/v2ray-core"
 | 
	
		
			
				|  |  | +	"github.com/v2ray/v2ray-core/log"
 | 
	
		
			
				|  |  |  )
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  type ConnectionConfig struct {
 | 
	
		
			
				|  |  |  	ProtocolString string `json:"protocol"`
 | 
	
		
			
				|  |  | -	File     string `json:"file"`
 | 
	
		
			
				|  |  | +	File           string `json:"file"`
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  func (config *ConnectionConfig) Protocol() string {
 | 
	
		
			
				|  |  | -  return config.ProtocolString
 | 
	
		
			
				|  |  | +	return config.ProtocolString
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  func (config *ConnectionConfig) Content() []byte {
 | 
	
		
			
				|  |  | -  if len(config.File) == 0 {
 | 
	
		
			
				|  |  | -    return nil
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -  content, err := ioutil.ReadFile(config.File)
 | 
	
		
			
				|  |  | -  if err != nil {
 | 
	
		
			
				|  |  | -    panic(log.Error("Failed to read config file (%s): %v", config.File, err))
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -  return content
 | 
	
		
			
				|  |  | +	if len(config.File) == 0 {
 | 
	
		
			
				|  |  | +		return nil
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	content, err := ioutil.ReadFile(config.File)
 | 
	
		
			
				|  |  | +	if err != nil {
 | 
	
		
			
				|  |  | +		panic(log.Error("Failed to read config file (%s): %v", config.File, err))
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	return content
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  // Config is the config for Point server.
 | 
	
		
			
				|  |  |  type Config struct {
 | 
	
		
			
				|  |  | -	PortValue           uint16           `json:"port"` // Port of this Point server.
 | 
	
		
			
				|  |  | +	PortValue           uint16            `json:"port"` // Port of this Point server.
 | 
	
		
			
				|  |  |  	InboundConfigValue  *ConnectionConfig `json:"inbound"`
 | 
	
		
			
				|  |  |  	OutboundConfigValue *ConnectionConfig `json:"outbound"`
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  func (config *Config) Port() uint16 {
 | 
	
		
			
				|  |  | -  return config.PortValue
 | 
	
		
			
				|  |  | +	return config.PortValue
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  func (config *Config) InboundConfig() core.ConnectionConfig {
 | 
	
		
			
				|  |  | -  return config.InboundConfigValue
 | 
	
		
			
				|  |  | +	return config.InboundConfigValue
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  func (config *Config) OutboundConfig() core.ConnectionConfig {
 | 
	
		
			
				|  |  | -  return config.OutboundConfigValue
 | 
	
		
			
				|  |  | +	return config.OutboundConfigValue
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  func LoadConfig(file string) (*Config, error) {
 | 
	
		
			
				|  |  | -  rawConfig, err := ioutil.ReadFile(file)
 | 
	
		
			
				|  |  | -  if err != nil {
 | 
	
		
			
				|  |  | -    log.Error("Failed to read point config file (%s): %v", file, err)
 | 
	
		
			
				|  |  | -    return nil, err
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -  
 | 
	
		
			
				|  |  | +	rawConfig, err := ioutil.ReadFile(file)
 | 
	
		
			
				|  |  | +	if err != nil {
 | 
	
		
			
				|  |  | +		log.Error("Failed to read point config file (%s): %v", file, err)
 | 
	
		
			
				|  |  | +		return nil, err
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	config := &Config{}
 | 
	
		
			
				|  |  |  	err = json.Unmarshal(rawConfig, config)
 | 
	
		
			
				|  |  | -  
 | 
	
		
			
				|  |  | -  if !filepath.IsAbs(config.InboundConfigValue.File) && len(config.InboundConfigValue.File) > 0 {
 | 
	
		
			
				|  |  | -    config.InboundConfigValue.File = filepath.Join(filepath.Dir(file), config.InboundConfigValue.File)
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -  
 | 
	
		
			
				|  |  | -  if !filepath.IsAbs(config.OutboundConfigValue.File) && len(config.OutboundConfigValue.File) > 0 {
 | 
	
		
			
				|  |  | -    config.OutboundConfigValue.File = filepath.Join(filepath.Dir(file), config.OutboundConfigValue.File)
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -  
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if !filepath.IsAbs(config.InboundConfigValue.File) && len(config.InboundConfigValue.File) > 0 {
 | 
	
		
			
				|  |  | +		config.InboundConfigValue.File = filepath.Join(filepath.Dir(file), config.InboundConfigValue.File)
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if !filepath.IsAbs(config.OutboundConfigValue.File) && len(config.OutboundConfigValue.File) > 0 {
 | 
	
		
			
				|  |  | +		config.OutboundConfigValue.File = filepath.Join(filepath.Dir(file), config.OutboundConfigValue.File)
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	return config, err
 | 
	
		
			
				|  |  |  }
 |