diff --git a/cmd/frpc/main.go b/cmd/frpc/main.go index 4f816a9..dcbc3a5 100644 --- a/cmd/frpc/main.go +++ b/cmd/frpc/main.go @@ -106,7 +106,7 @@ func main() { } } - pxyCfgs, err := config.LoadProxyConfFromFile(conf) + pxyCfgs, err := config.LoadProxyConfFromFile(config.ClientCommonCfg.User, conf, config.ClientCommonCfg.Start) if err != nil { fmt.Println(err) os.Exit(1) diff --git a/conf/frpc_full.ini b/conf/frpc_full.ini index ff99241..f6b6b8a 100644 --- a/conf/frpc_full.ini +++ b/conf/frpc_full.ini @@ -32,6 +32,10 @@ user = your_name # default is true login_fail_exit = true +# proxy names you want to start divided by ',' +# default is empty, means all proxies +# start = ssh,dns + # heartbeat configure, it's not recommended to modify the default value # the default value of heartbeat_interval is 10 and heartbeat_timeout is 90 # heartbeat_interval = 30 diff --git a/models/config/client_common.go b/models/config/client_common.go index c1b622a..449103a 100644 --- a/models/config/client_common.go +++ b/models/config/client_common.go @@ -18,6 +18,7 @@ import ( "fmt" "os" "strconv" + "strings" ini "github.com/vaughan0/go-ini" ) @@ -39,6 +40,7 @@ type ClientCommonConf struct { TcpMux bool User string LoginFailExit bool + Start map[string]struct{} HeartBeatInterval int64 HeartBeatTimeout int64 } @@ -58,6 +60,7 @@ func GetDeaultClientCommonConf() *ClientCommonConf { TcpMux: true, User: "", LoginFailExit: true, + Start: make(map[string]struct{}), HeartBeatInterval: 30, HeartBeatTimeout: 90, } @@ -136,6 +139,14 @@ func LoadClientCommonConf(conf ini.File) (cfg *ClientCommonConf, err error) { cfg.User = tmpStr } + tmpStr, ok = conf.Get("common", "start") + if ok { + proxyNames := strings.Split(tmpStr, ",") + for _, name := range proxyNames { + cfg.Start[name] = struct{}{} + } + } + tmpStr, ok = conf.Get("common", "login_fail_exit") if ok && tmpStr == "false" { cfg.LoginFailExit = false diff --git a/models/config/proxy.go b/models/config/proxy.go index 71fb67b..27fd3f6 100644 --- a/models/config/proxy.go +++ b/models/config/proxy.go @@ -466,14 +466,21 @@ func (cfg *HttpsProxyConf) Check() (err error) { return } -func LoadProxyConfFromFile(conf ini.File) (proxyConfs map[string]ProxyConf, err error) { - var prefix string - if ClientCommonCfg.User != "" { - prefix = ClientCommonCfg.User + "." +// if len(startProxy) is 0, start all +// otherwise just start proxies in startProxy map +func LoadProxyConfFromFile(prefix string, conf ini.File, startProxy map[string]struct{}) (proxyConfs map[string]ProxyConf, err error) { + if prefix != "" { + prefix += "." + } + + startAll := true + if len(startProxy) > 0 { + startAll = false } proxyConfs = make(map[string]ProxyConf) for name, section := range conf { - if name != "common" { + _, shouldStart := startProxy[name] + if name != "common" && (startAll || shouldStart) { cfg, err := NewProxyConfFromFile(name, section) if err != nil { return proxyConfs, err diff --git a/utils/version/version.go b/utils/version/version.go index d12097b..f12b387 100644 --- a/utils/version/version.go +++ b/utils/version/version.go @@ -19,7 +19,7 @@ import ( "strings" ) -var version string = "0.10.0" +var version string = "0.11.0" func Full() string { return version @@ -54,8 +54,8 @@ func Minor(v string) int64 { // add every case there if server will not accept client's protocol and return false func Compat(client string) (ok bool, msg string) { - if LessThan(client, version) { - return false, "Please upgrade your frpc version to 0.10.0" + if LessThan(client, "0.10.0") { + return false, "Please upgrade your frpc version to at least 0.10.0" } return true, "" }