diff --git a/client/proxy/proxy.go b/client/proxy/proxy.go index 070fff1c..ad7814c3 100644 --- a/client/proxy/proxy.go +++ b/client/proxy/proxy.go @@ -261,7 +261,7 @@ func (pxy *XtcpProxy) InWorkConn(conn frpNet.Conn, m *msg.StartWorkConn) { Sid: natHoleSidMsg.Sid, } - raddr, _ := net.ResolveUDPAddr("udp", newAddress(pxy.clientCfg.ServerAddr, pxy.clientCfg.ServerUdpPort)) + raddr, _ := net.ResolveUDPAddr("udp", newAddress(pxy.clientCfg.ServerAddr, pxy.serverUDPPort)) clientConn, err := net.DialUDP("udp", nil, raddr) defer clientConn.Close() diff --git a/client/service.go b/client/service.go index f8fabff8..211a4204 100644 --- a/client/service.go +++ b/client/service.go @@ -86,7 +86,7 @@ func NewService(cfg config.ClientCommonConf, pxyCfgs map[string]config.ProxyConf pxyCfgs: pxyCfgs, visitorCfgs: visitorCfgs, exit: 0, - closedCh: make(chan int), + closedCh: make(chan bool), } return } @@ -126,7 +126,7 @@ func (svr *Service) Run(isCmd bool) error { if svr.cfg.AdminPort != 0 { // Init admin server assets - err := assets.Load(svr.cfg.AssetsDir) + err := assets.Load(svr.cfg.AssetsDir, assets.Frpc) if err != nil { return fmt.Errorf("Load assets error: %v", err) } diff --git a/client/visitor.go b/client/visitor.go index 8c5df453..5c96f5da 100644 --- a/client/visitor.go +++ b/client/visitor.go @@ -196,7 +196,7 @@ func (sv *XtcpVisitor) handleConn(userConn frpNet.Conn) { return } - raddr, err := net.ResolveUDPAddr("udp", newAddress(sv.ctl.clientCfg.ServerAddr, sv.ctl.ServerUdpPort)) + raddr, err := net.ResolveUDPAddr("udp", newAddress(sv.ctl.clientCfg.ServerAddr, sv.ctl.serverUDPPort)) if err != nil { sv.Error("resolve server UDP addr error") return diff --git a/cmd/frpc/sub/root.go b/cmd/frpc/sub/root.go index d29aeff6..f66bbfb3 100644 --- a/cmd/frpc/sub/root.go +++ b/cmd/frpc/sub/root.go @@ -123,6 +123,26 @@ func NewService(cfgFilePath string) (ser *client.Service, err error) { return returnClient(cfgFilePath, false) } +func returnClient(cfgFilePath string, run bool) (svr *client.Service, err error) { + var content string + content, err = config.GetRenderedConfFromFile(cfgFilePath) + if err != nil { + return + } + + cfg, err := parseClientCommonCfg(CfgFileTypeIni, content) + if err != nil { + return + } + + pxyCfgs, visitorCfgs, err := config.LoadAllConfFromIni(cfg.User, content, cfg.Start) + if err != nil { + return nil, err + } + + return returnService(cfg, pxyCfgs, visitorCfgs, cfgFile) +} + func StopFrp() (err error) { if service == nil { return fmt.Errorf("frp not start") @@ -262,10 +282,10 @@ func startService(cfg config.ClientCommonConf, pxyCfgs map[string]config.ProxyCo return } -func returnService(pxyCfgs map[string]config.ProxyConf, visitorCfgs map[string]config.VisitorConf) (svr *client.Service, err error) { - log.InitLog(g.GlbClientCfg.LogWay, g.GlbClientCfg.LogFile, g.GlbClientCfg.LogLevel, g.GlbClientCfg.LogMaxDays) - if g.GlbClientCfg.DnsServer != "" { - s := g.GlbClientCfg.DnsServer +func returnService(cfg config.ClientCommonConf, pxyCfgs map[string]config.ProxyConf, visitorCfgs map[string]config.VisitorConf, cfgFile string) (svr *client.Service, err error) { + log.InitLog(cfg.LogWay, cfg.LogFile, cfg.LogLevel, cfg.LogMaxDays, cfg.DisableLogColor) + if cfg.DnsServer != "" { + s := cfg.DnsServer if !strings.Contains(s, ":") { s += ":53" } @@ -277,14 +297,14 @@ func returnService(pxyCfgs map[string]config.ProxyConf, visitorCfgs map[string]c }, } } - svr, errRet := client.NewService(pxyCfgs, visitorCfgs) + svr, errRet := client.NewService(cfg, pxyCfgs, visitorCfgs, cfgFile) if errRet != nil { err = errRet return } // Capture the exit signal if we use kcp. - if g.GlbClientCfg.Protocol == "kcp" { + if cfg.Protocol == "kcp" { go handleSignal(svr) } diff --git a/cmd/frps/frps/root.go b/cmd/frps/frps/root.go index bc8b6af6..7f72bc02 100644 --- a/cmd/frps/frps/root.go +++ b/cmd/frps/frps/root.go @@ -20,7 +20,6 @@ import ( "github.com/spf13/cobra" - "github.com/fatedier/frp/g" "github.com/fatedier/frp/models/config" "github.com/fatedier/frp/server" "github.com/fatedier/frp/utils/log" @@ -53,6 +52,7 @@ var ( logFile string logLevel string logMaxDays int64 + disableLogColor bool token string subDomainHost string tcpMux bool @@ -62,7 +62,7 @@ var ( ) func init() { - rootCmd.PersistentFlags().StringVarP(&cfgFile, "", "c", "", "config file of frps") + rootCmd.PersistentFlags().StringVarP(&cfgFile, "config", "c", "", "config file of frps") rootCmd.PersistentFlags().BoolVarP(&showVersion, "version", "v", false, "version of frpc") rootCmd.PersistentFlags().StringVarP(&bindAddr, "bind_addr", "", "0.0.0.0", "bind address") @@ -79,7 +79,9 @@ func init() { rootCmd.PersistentFlags().StringVarP(&dashboardPwd, "dashboard_pwd", "", "admin", "dashboard password") rootCmd.PersistentFlags().StringVarP(&logFile, "log_file", "", "console", "log file") rootCmd.PersistentFlags().StringVarP(&logLevel, "log_level", "", "info", "log level") - rootCmd.PersistentFlags().Int64VarP(&logMaxDays, "log_max_days", "", 3, "log_max_days") + rootCmd.PersistentFlags().Int64VarP(&logMaxDays, "log_max_days", "", 3, "log max days") + rootCmd.PersistentFlags().BoolVarP(&disableLogColor, "disable_log_color", "", false, "disable log color in console") + rootCmd.PersistentFlags().StringVarP(&token, "token", "t", "", "auth token") rootCmd.PersistentFlags().StringVarP(&subDomainHost, "subdomain_host", "", "", "subdomain host") rootCmd.PersistentFlags().StringVarP(&allowPorts, "allow_ports", "", "", "allow ports") @@ -95,6 +97,7 @@ var rootCmd = &cobra.Command{ return nil } + var cfg config.ServerCommonConf var err error if cfgFile != "" { var content string @@ -102,16 +105,15 @@ var rootCmd = &cobra.Command{ if err != nil { return err } - g.GlbServerCfg.CfgFile = cfgFile - err = parseServerCommonCfg(CfgFileTypeIni, content) + cfg, err = parseServerCommonCfg(CfgFileTypeIni, content) } else { - err = parseServerCommonCfg(CfgFileTypeCmd, "") + cfg, err = parseServerCommonCfg(CfgFileTypeCmd, "") } if err != nil { return err } - err = runServer() + err = runServer(cfg) if err != nil { fmt.Println(err) os.Exit(1) @@ -126,52 +128,51 @@ func Execute() { } } -func parseServerCommonCfg(fileType int, content string) (err error) { +func parseServerCommonCfg(fileType int, content string) (cfg config.ServerCommonConf, err error) { if fileType == CfgFileTypeIni { - err = parseServerCommonCfgFromIni(content) + cfg, err = parseServerCommonCfgFromIni(content) } else if fileType == CfgFileTypeCmd { - err = parseServerCommonCfgFromCmd() + cfg, err = parseServerCommonCfgFromCmd() } if err != nil { return } - err = g.GlbServerCfg.ServerCommonConf.Check() + err = cfg.Check() if err != nil { return } - - config.InitServerCfg(&g.GlbServerCfg.ServerCommonConf) return } -func parseServerCommonCfgFromIni(content string) (err error) { - cfg, err := config.UnmarshalServerConfFromIni(&g.GlbServerCfg.ServerCommonConf, content) +func parseServerCommonCfgFromIni(content string) (config.ServerCommonConf, error) { + cfg, err := config.UnmarshalServerConfFromIni(content) if err != nil { - return err + return config.ServerCommonConf{}, err } - g.GlbServerCfg.ServerCommonConf = *cfg - return + return cfg, nil } -func parseServerCommonCfgFromCmd() (err error) { - g.GlbServerCfg.BindAddr = bindAddr - g.GlbServerCfg.BindPort = bindPort - g.GlbServerCfg.BindUdpPort = bindUdpPort - g.GlbServerCfg.KcpBindPort = kcpBindPort - g.GlbServerCfg.ProxyBindAddr = proxyBindAddr - g.GlbServerCfg.VhostHttpPort = vhostHttpPort - g.GlbServerCfg.VhostHttpsPort = vhostHttpsPort - g.GlbServerCfg.VhostHttpTimeout = vhostHttpTimeout - g.GlbServerCfg.DashboardAddr = dashboardAddr - g.GlbServerCfg.DashboardPort = dashboardPort - g.GlbServerCfg.DashboardUser = dashboardUser - g.GlbServerCfg.DashboardPwd = dashboardPwd - g.GlbServerCfg.LogFile = logFile - g.GlbServerCfg.LogLevel = logLevel - g.GlbServerCfg.LogMaxDays = logMaxDays - g.GlbServerCfg.Token = token - g.GlbServerCfg.SubDomainHost = subDomainHost +func parseServerCommonCfgFromCmd() (cfg config.ServerCommonConf, err error) { + cfg = config.GetDefaultServerConf() + + cfg.BindAddr = bindAddr + cfg.BindPort = bindPort + cfg.BindUdpPort = bindUdpPort + cfg.KcpBindPort = kcpBindPort + cfg.ProxyBindAddr = proxyBindAddr + cfg.VhostHttpPort = vhostHttpPort + cfg.VhostHttpsPort = vhostHttpsPort + cfg.VhostHttpTimeout = vhostHttpTimeout + cfg.DashboardAddr = dashboardAddr + cfg.DashboardPort = dashboardPort + cfg.DashboardUser = dashboardUser + cfg.DashboardPwd = dashboardPwd + cfg.LogFile = logFile + cfg.LogLevel = logLevel + cfg.LogMaxDays = logMaxDays + cfg.Token = token + cfg.SubDomainHost = subDomainHost if len(allowPorts) > 0 { // e.g. 1000-2000,2001,2002,3000-4000 ports, errRet := util.ParseRangeNumbers(allowPorts) @@ -181,28 +182,27 @@ func parseServerCommonCfgFromCmd() (err error) { } for _, port := range ports { - g.GlbServerCfg.AllowPorts[int(port)] = struct{}{} + cfg.AllowPorts[int(port)] = struct{}{} } } - g.GlbServerCfg.MaxPortsPerClient = maxPortsPerClient + cfg.MaxPortsPerClient = maxPortsPerClient if logFile == "console" { - g.GlbClientCfg.LogWay = "console" + cfg.LogWay = "console" } else { - g.GlbClientCfg.LogWay = "file" + cfg.LogWay = "file" } + cfg.DisableLogColor = disableLogColor return } -func runServer() (err error) { - log.InitLog(g.GlbServerCfg.LogWay, g.GlbServerCfg.LogFile, g.GlbServerCfg.LogLevel, - g.GlbServerCfg.LogMaxDays) - svr, err := server.NewService() +func runServer(cfg config.ServerCommonConf) (err error) { + log.InitLog(cfg.LogWay, cfg.LogFile, cfg.LogLevel, cfg.LogMaxDays, cfg.DisableLogColor) + svr, err := server.NewService(cfg) if err != nil { return err } log.Info("Start frps success") - server.ServerService = svr svr.Run() return } @@ -216,35 +216,33 @@ func RunFrps(cfgFile string) error { } var err error + var cfg config.ServerCommonConf if cfgFile != "" { var content string content, err = config.GetRenderedConfFromFile(cfgFile) if err != nil { return err } - g.GlbServerCfg.CfgFile = cfgFile - err = parseServerCommonCfg(CfgFileTypeIni, content) + cfg, err = parseServerCommonCfg(CfgFileTypeIni, content) } else { - err = parseServerCommonCfg(CfgFileTypeCmd, "") + cfg, err = parseServerCommonCfg(CfgFileTypeCmd, "") } if err != nil { return err } - err = runBackgroundServer() + err = runBackgroundServer(cfg) fmt.Println(err) return err } -func runBackgroundServer() (err error) { - log.InitLog(g.GlbServerCfg.LogWay, g.GlbServerCfg.LogFile, g.GlbServerCfg.LogLevel, - g.GlbServerCfg.LogMaxDays) - svr, err := server.NewService() +func runBackgroundServer(cfg config.ServerCommonConf) (err error) { + log.InitLog(cfg.LogWay, cfg.LogFile, cfg.LogLevel, cfg.LogMaxDays, cfg.DisableLogColor) + svr, err := server.NewService(cfg) if err != nil { return err } log.Info("Start frps success") - server.ServerService = svr service = svr go svr.Run() return diff --git a/server/service.go b/server/service.go index a858a5ed..f895d753 100644 --- a/server/service.go +++ b/server/service.go @@ -242,7 +242,7 @@ func NewService(cfg config.ServerCommonConf) (svr *Service, err error) { // Create dashboard web server. if cfg.DashboardPort > 0 { // Init dashboard assets - err = assets.Load(cfg.AssetsDir) + err = assets.Load(cfg.AssetsDir, assets.Frps) if err != nil { err = fmt.Errorf("Load assets error: %v", err) return