| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 | package externalimport (	"io"	"os"	"strings"	"v2ray.com/core/common/buf"	"v2ray.com/core/common/platform/ctlcmd"	"v2ray.com/core/main/confloader")//go:generate go run $GOPATH/src/v2ray.com/core/common/errors/errorgen/main.go -pkg external -path Main,ConfLoader,Externaltype ClosableMultiBuffer struct {	buf.MultiBuffer}func (c *ClosableMultiBuffer) Close() error {	c.MultiBuffer.Release()	return nil}func loadConfigFile(configFile string) (io.ReadCloser, error) {	if configFile == "stdin:" {		return os.Stdin, nil	}	if strings.HasPrefix(configFile, "http://") || strings.HasPrefix(configFile, "https://") {		content, err := ctlcmd.Run([]string{"fetch", configFile}, nil)		if err != nil {			return nil, err		}		return &ClosableMultiBuffer{content}, nil	}	fixedFile := os.ExpandEnv(configFile)	file, err := os.Open(fixedFile)	if err != nil {		return nil, newError("config file not readable").Base(err)	}	defer file.Close()	content, err := buf.ReadAllToMultiBuffer(file)	if err != nil {		return nil, newError("failed to load config file: ", fixedFile).Base(err).AtWarning()	}	return &ClosableMultiBuffer{content}, nil}func init() {	confloader.EffectiveConfigFileLoader = loadConfigFile}
 |