| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 | // +build jsonpackage internetimport (	"crypto/tls"	"encoding/json"	"errors"	"strings"	v2net "v2ray.com/core/common/net")func (this *TLSSettings) UnmarshalJSON(data []byte) error {	type JSONCertConfig struct {		CertFile string `json:"certificateFile"`		KeyFile  string `json:"keyFile"`	}	type JSONConfig struct {		Insecure bool              `json:"allowInsecure"`		Certs    []*JSONCertConfig `json:"certificates"`	}	jsonConfig := new(JSONConfig)	if err := json.Unmarshal(data, jsonConfig); err != nil {		return err	}	this.Certs = make([]tls.Certificate, len(jsonConfig.Certs))	for idx, certConf := range jsonConfig.Certs {		cert, err := tls.LoadX509KeyPair(certConf.CertFile, certConf.KeyFile)		if err != nil {			return errors.New("Internet|TLS: Failed to load certificate file: " + err.Error())		}		this.Certs[idx] = cert	}	this.AllowInsecure = jsonConfig.Insecure	return nil}func (this *StreamSettings) UnmarshalJSON(data []byte) error {	type JSONConfig struct {		Network     v2net.NetworkList `json:"network"`		Security    string            `json:"security"`		TLSSettings *TLSSettings      `json:"tlsSettings"`	}	this.Type = StreamConnectionTypeRawTCP	jsonConfig := new(JSONConfig)	if err := json.Unmarshal(data, jsonConfig); err != nil {		return err	}	if jsonConfig.Network.HasNetwork(v2net.KCPNetwork) {		this.Type |= StreamConnectionTypeKCP	}	if jsonConfig.Network.HasNetwork(v2net.WSNetwork) {		this.Type |= StreamConnectionTypeWebSocket	}	if jsonConfig.Network.HasNetwork(v2net.TCPNetwork) {		this.Type |= StreamConnectionTypeTCP	}	this.Security = StreamSecurityTypeNone	if strings.ToLower(jsonConfig.Security) == "tls" {		this.Security = StreamSecurityTypeTLS	}	if jsonConfig.TLSSettings != nil {		this.TLSSettings = jsonConfig.TLSSettings	}	return nil}
 |