Fixed: global mode and update log level

This commit is contained in:
gVisor bot 2018-08-04 23:04:16 +08:00
parent 1e7b5abbe2
commit ab8181de1b
4 changed files with 24 additions and 7 deletions

View file

@ -94,6 +94,12 @@ func (c *Config) SetMode(mode Mode) {
c.event <- &Event{Type: "mode", Payload: mode}
}
// SetLogLevel change log level of clash
func (c *Config) SetLogLevel(level C.LogLevel) {
c.general.LogLevel = level
c.event <- &Event{Type: "log-level", Payload: level}
}
// General return clash general config
func (c *Config) General() General {
return *c.general
@ -225,6 +231,7 @@ func (c *Config) parseProxies(cfg *ini.File) error {
}
// init proxy
proxies["GLOBAL"], _ = adapters.NewSelector("GLOBAL", proxies)
proxies["DIRECT"] = adapters.NewDirect()
proxies["REJECT"] = adapters.NewReject()

View file

@ -25,6 +25,7 @@ type General struct {
AllowLan *bool `json:"allow-lan,omitempty"`
Port *int `json:"port,omitempty"`
SocksPort *int `json:"socks-port,omitempty"`
LogLevel *string `json:"log-level,omitempty"`
}
func init() {

View file

@ -50,7 +50,7 @@ func updateConfigs(w http.ResponseWriter, r *http.Request) {
}
// update errors
var proxyErr, modeErr error
var proxyErr, modeErr, logLevelErr error
// update proxy
listener := proxy.Instance()
@ -70,9 +70,20 @@ func updateConfigs(w http.ResponseWriter, r *http.Request) {
}
}
// update log-level
if general.LogLevel != nil {
level, ok := C.LogLevelMapping[*general.LogLevel]
if !ok {
logLevelErr = fmt.Errorf("Log Level error")
} else {
cfg.SetLogLevel(level)
}
}
hasError, errors := formatErrors(map[string]error{
"proxy": proxyErr,
"mode": modeErr,
"proxy": proxyErr,
"mode": modeErr,
"log-level": logLevelErr,
})
if hasError {

View file

@ -5,7 +5,6 @@ import (
"time"
LocalAdapter "github.com/Dreamacro/clash/adapters/local"
RemoteAdapter "github.com/Dreamacro/clash/adapters/remote"
cfg "github.com/Dreamacro/clash/config"
C "github.com/Dreamacro/clash/constant"
"github.com/Dreamacro/clash/observable"
@ -27,8 +26,7 @@ type Tunnel struct {
traffic *C.Traffic
// Outbound Rule
mode cfg.Mode
selector *RemoteAdapter.Selector
mode cfg.Mode
// Log
logCh chan interface{}
@ -93,7 +91,7 @@ func (t *Tunnel) handleConn(localConn C.ServerAdapter) {
case cfg.Direct:
proxy = t.proxies["DIRECT"]
case cfg.Global:
proxy = t.selector
proxy = t.proxies["GLOBAL"]
// Rule
default:
proxy = t.match(addr)