add chain.Chainable interface

This commit is contained in:
ginuerzh
2021-11-23 21:44:32 +08:00
parent ece51cb0b8
commit 7beb5bf6d7
18 changed files with 125 additions and 63 deletions

View File

@ -53,8 +53,8 @@ func buildService(cfg *config.Config) (services []*service.Service) {
listener.LoggerOption(listenerLogger),
)
if chainable, ok := ln.(listener.Chainable); ok {
chainable.Chain(chains[svc.Chain])
if chainable, ok := ln.(chain.Chainable); ok {
chainable.WithChain(chains[svc.Chain])
}
if err := ln.Init(metadata.MapMetadata(svc.Listener.Metadata)); err != nil {
@ -67,11 +67,14 @@ func buildService(cfg *config.Config) (services []*service.Service) {
})
h := registry.GetHandler(svc.Handler.Type)(
handler.ChainOption(chains[svc.Chain]),
handler.BypassOption(bypasses[svc.Bypass]),
handler.LoggerOption(handlerLogger),
)
if chainable, ok := h.(chain.Chainable); ok {
chainable.WithChain(chains[svc.Chain])
}
if forwarder, ok := h.(handler.Forwarder); ok {
forwarder.Forward(forwarderFromConfig(svc.Forwarder))
}
@ -162,6 +165,8 @@ func logFromConfig(cfg *config.LogConfig) logger.Logger {
var out io.Writer = os.Stderr
switch cfg.Output {
case "none":
return logger.Nop()
case "stdout", "":
out = os.Stdout
case "stderr":

View File

@ -1,5 +1,5 @@
log:
output: stderr # stderr, stdout, /path/to/file
output: stderr # none, stderr, stdout, /path/to/file
level: debug # debug, info, warn, error, fatal
format: json # text, json

View File

@ -1,47 +1,40 @@
services:
- name: service-0
url: tcp://:8080/:8081?abc=def&true=true&n=123
addr: :8080
url: ss://abc:123@:18338/:18338
addr: :18338
chain: chain-0
listener:
type: tcp
metadata:
abc: def
"n": "123"
"true": "true"
users:
- abc:123
handler:
type: tcp
metadata:
abc: def
"n": "123"
"true": "true"
users:
- abc:123
forwarder:
targets:
- :8081
- :18338
chains:
- name: chain-0
hops:
- name: hop-0
nodes:
- name: node-0
url: auto://:1081?n=123t
addr: :1081
url: socks://abc:123@:11080?type=abc&key=value
addr: :11080
dialer:
type: auto
type: tcp
metadata:
"n": 123t
key: value
type: abc
user:
- abc:123
connector:
type: auto
type: socks
metadata:
"n": 123t
- name: hop-1
nodes:
- name: node-0
url: auto://:1082
addr: :1082
dialer:
type: auto
metadata: {}
connector:
type: auto
metadata: {}
key: value
type: abc
user:
- abc:123