add reload and plugin support for hop
This commit is contained in:
@ -11,10 +11,11 @@ import (
|
||||
"github.com/go-gost/core/chain"
|
||||
"github.com/go-gost/core/common/bufpool"
|
||||
"github.com/go-gost/core/handler"
|
||||
"github.com/go-gost/core/hop"
|
||||
"github.com/go-gost/core/hosts"
|
||||
"github.com/go-gost/core/logger"
|
||||
md "github.com/go-gost/core/metadata"
|
||||
xchain "github.com/go-gost/x/chain"
|
||||
xhop "github.com/go-gost/x/hop"
|
||||
resolver_util "github.com/go-gost/x/internal/util/resolver"
|
||||
"github.com/go-gost/x/registry"
|
||||
"github.com/go-gost/x/resolver/exchanger"
|
||||
@ -30,7 +31,7 @@ func init() {
|
||||
}
|
||||
|
||||
type dnsHandler struct {
|
||||
hop chain.Hop
|
||||
hop hop.Hop
|
||||
exchangers map[string]exchanger.Exchanger
|
||||
cache *resolver_util.Cache
|
||||
router *chain.Router
|
||||
@ -70,10 +71,14 @@ func (h *dnsHandler) Init(md md.Metadata) (err error) {
|
||||
for i, addr := range h.md.dns {
|
||||
nodes = append(nodes, chain.NewNode(fmt.Sprintf("target-%d", i), addr))
|
||||
}
|
||||
h.hop = xchain.NewChainHop(nodes)
|
||||
h.hop = xhop.NewHop(xhop.NodeOption(nodes...))
|
||||
}
|
||||
|
||||
for _, node := range h.hop.Nodes() {
|
||||
var nodes []*chain.Node
|
||||
if nl, ok := h.hop.(hop.NodeList); ok {
|
||||
nodes = nl.Nodes()
|
||||
}
|
||||
for _, node := range nodes {
|
||||
addr := strings.TrimSpace(node.Addr)
|
||||
if addr == "" {
|
||||
continue
|
||||
@ -109,7 +114,7 @@ func (h *dnsHandler) Init(md md.Metadata) (err error) {
|
||||
}
|
||||
|
||||
// Forward implements handler.Forwarder.
|
||||
func (h *dnsHandler) Forward(hop chain.Hop) {
|
||||
func (h *dnsHandler) Forward(hop hop.Hop) {
|
||||
h.hop = hop
|
||||
}
|
||||
|
||||
@ -325,7 +330,7 @@ func (h *dnsHandler) selectExchanger(ctx context.Context, addr string) exchanger
|
||||
if h.hop == nil {
|
||||
return nil
|
||||
}
|
||||
node := h.hop.Select(ctx, chain.AddrSelectOption(addr))
|
||||
node := h.hop.Select(ctx, hop.AddrSelectOption(addr))
|
||||
if node == nil {
|
||||
return nil
|
||||
}
|
||||
|
@ -15,6 +15,7 @@ import (
|
||||
|
||||
"github.com/go-gost/core/chain"
|
||||
"github.com/go-gost/core/handler"
|
||||
"github.com/go-gost/core/hop"
|
||||
"github.com/go-gost/core/logger"
|
||||
md "github.com/go-gost/core/metadata"
|
||||
xnet "github.com/go-gost/x/internal/net"
|
||||
@ -30,7 +31,7 @@ func init() {
|
||||
}
|
||||
|
||||
type forwardHandler struct {
|
||||
hop chain.Hop
|
||||
hop hop.Hop
|
||||
router *chain.Router
|
||||
md metadata
|
||||
options handler.Options
|
||||
@ -61,7 +62,7 @@ func (h *forwardHandler) Init(md md.Metadata) (err error) {
|
||||
}
|
||||
|
||||
// Forward implements handler.Forwarder.
|
||||
func (h *forwardHandler) Forward(hop chain.Hop) {
|
||||
func (h *forwardHandler) Forward(hop hop.Hop) {
|
||||
h.hop = hop
|
||||
}
|
||||
|
||||
@ -123,8 +124,8 @@ func (h *forwardHandler) Handle(ctx context.Context, conn net.Conn, opts ...hand
|
||||
}
|
||||
if h.hop != nil {
|
||||
target = h.hop.Select(ctx,
|
||||
chain.HostSelectOption(host),
|
||||
chain.ProtocolSelectOption(protocol),
|
||||
hop.HostSelectOption(host),
|
||||
hop.ProtocolSelectOption(protocol),
|
||||
)
|
||||
}
|
||||
if target == nil {
|
||||
@ -192,8 +193,8 @@ func (h *forwardHandler) handleHTTP(ctx context.Context, rw io.ReadWriter, log l
|
||||
}
|
||||
if h.hop != nil {
|
||||
target = h.hop.Select(ctx,
|
||||
chain.HostSelectOption(req.Host),
|
||||
chain.ProtocolSelectOption(forward.ProtoHTTP),
|
||||
hop.HostSelectOption(req.Host),
|
||||
hop.ProtocolSelectOption(forward.ProtoHTTP),
|
||||
)
|
||||
}
|
||||
if target == nil {
|
||||
|
@ -15,6 +15,7 @@ import (
|
||||
|
||||
"github.com/go-gost/core/chain"
|
||||
"github.com/go-gost/core/handler"
|
||||
"github.com/go-gost/core/hop"
|
||||
"github.com/go-gost/core/logger"
|
||||
mdata "github.com/go-gost/core/metadata"
|
||||
mdutil "github.com/go-gost/core/metadata/util"
|
||||
@ -30,7 +31,7 @@ func init() {
|
||||
}
|
||||
|
||||
type forwardHandler struct {
|
||||
hop chain.Hop
|
||||
hop hop.Hop
|
||||
router *chain.Router
|
||||
md metadata
|
||||
options handler.Options
|
||||
@ -61,7 +62,7 @@ func (h *forwardHandler) Init(md mdata.Metadata) (err error) {
|
||||
}
|
||||
|
||||
// Forward implements handler.Forwarder.
|
||||
func (h *forwardHandler) Forward(hop chain.Hop) {
|
||||
func (h *forwardHandler) Forward(hop hop.Hop) {
|
||||
h.hop = hop
|
||||
}
|
||||
|
||||
@ -123,8 +124,8 @@ func (h *forwardHandler) Handle(ctx context.Context, conn net.Conn, opts ...hand
|
||||
}
|
||||
if h.hop != nil {
|
||||
target = h.hop.Select(ctx,
|
||||
chain.HostSelectOption(host),
|
||||
chain.ProtocolSelectOption(protocol),
|
||||
hop.HostSelectOption(host),
|
||||
hop.ProtocolSelectOption(protocol),
|
||||
)
|
||||
}
|
||||
if target == nil {
|
||||
@ -189,8 +190,8 @@ func (h *forwardHandler) handleHTTP(ctx context.Context, rw io.ReadWriter, log l
|
||||
}
|
||||
if h.hop != nil {
|
||||
target = h.hop.Select(ctx,
|
||||
chain.HostSelectOption(req.Host),
|
||||
chain.ProtocolSelectOption(forward.ProtoHTTP),
|
||||
hop.HostSelectOption(req.Host),
|
||||
hop.ProtocolSelectOption(forward.ProtoHTTP),
|
||||
)
|
||||
}
|
||||
if target == nil {
|
||||
|
@ -10,6 +10,7 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/go-gost/core/chain"
|
||||
"github.com/go-gost/core/hop"
|
||||
"github.com/go-gost/core/handler"
|
||||
"github.com/go-gost/core/logger"
|
||||
md "github.com/go-gost/core/metadata"
|
||||
@ -22,7 +23,7 @@ func init() {
|
||||
}
|
||||
|
||||
type http3Handler struct {
|
||||
hop chain.Hop
|
||||
hop hop.Hop
|
||||
router *chain.Router
|
||||
md metadata
|
||||
options handler.Options
|
||||
@ -53,7 +54,7 @@ func (h *http3Handler) Init(md md.Metadata) error {
|
||||
}
|
||||
|
||||
// Forward implements handler.Forwarder.
|
||||
func (h *http3Handler) Forward(hop chain.Hop) {
|
||||
func (h *http3Handler) Forward(hop hop.Hop) {
|
||||
h.hop = hop
|
||||
}
|
||||
|
||||
@ -118,7 +119,7 @@ func (h *http3Handler) roundTrip(ctx context.Context, w http.ResponseWriter, req
|
||||
|
||||
var target *chain.Node
|
||||
if h.hop != nil {
|
||||
target = h.hop.Select(ctx, chain.HostSelectOption(addr))
|
||||
target = h.hop.Select(ctx, hop.HostSelectOption(addr))
|
||||
}
|
||||
if target == nil {
|
||||
err := errors.New("target not available")
|
||||
|
@ -10,6 +10,7 @@ import (
|
||||
|
||||
"github.com/go-gost/core/chain"
|
||||
"github.com/go-gost/core/handler"
|
||||
"github.com/go-gost/core/hop"
|
||||
"github.com/go-gost/core/listener"
|
||||
md "github.com/go-gost/core/metadata"
|
||||
"github.com/go-gost/core/service"
|
||||
@ -32,7 +33,7 @@ func init() {
|
||||
}
|
||||
|
||||
type relayHandler struct {
|
||||
hop chain.Hop
|
||||
hop hop.Hop
|
||||
router *chain.Router
|
||||
md metadata
|
||||
options handler.Options
|
||||
@ -124,7 +125,7 @@ func (h *relayHandler) initEntryPoint() (err error) {
|
||||
}
|
||||
|
||||
// Forward implements handler.Forwarder.
|
||||
func (h *relayHandler) Forward(hop chain.Hop) {
|
||||
func (h *relayHandler) Forward(hop hop.Hop) {
|
||||
h.hop = hop
|
||||
}
|
||||
|
||||
|
@ -9,6 +9,7 @@ import (
|
||||
|
||||
"github.com/go-gost/core/chain"
|
||||
"github.com/go-gost/core/handler"
|
||||
"github.com/go-gost/core/hop"
|
||||
"github.com/go-gost/core/logger"
|
||||
md "github.com/go-gost/core/metadata"
|
||||
"github.com/go-gost/core/recorder"
|
||||
@ -24,7 +25,7 @@ func init() {
|
||||
}
|
||||
|
||||
type serialHandler struct {
|
||||
hop chain.Hop
|
||||
hop hop.Hop
|
||||
router *chain.Router
|
||||
md metadata
|
||||
options handler.Options
|
||||
@ -64,7 +65,7 @@ func (h *serialHandler) Init(md md.Metadata) (err error) {
|
||||
}
|
||||
|
||||
// Forward implements handler.Forwarder.
|
||||
func (h *serialHandler) Forward(hop chain.Hop) {
|
||||
func (h *serialHandler) Forward(hop hop.Hop) {
|
||||
h.hop = hop
|
||||
}
|
||||
|
||||
|
@ -13,6 +13,7 @@ import (
|
||||
"github.com/go-gost/core/chain"
|
||||
"github.com/go-gost/core/common/bufpool"
|
||||
"github.com/go-gost/core/handler"
|
||||
"github.com/go-gost/core/hop"
|
||||
"github.com/go-gost/core/logger"
|
||||
md "github.com/go-gost/core/metadata"
|
||||
"github.com/go-gost/x/internal/util/ss"
|
||||
@ -28,7 +29,7 @@ func init() {
|
||||
}
|
||||
|
||||
type tapHandler struct {
|
||||
hop chain.Hop
|
||||
hop hop.Hop
|
||||
routes sync.Map
|
||||
exit chan struct{}
|
||||
cipher core.Cipher
|
||||
@ -72,7 +73,7 @@ func (h *tapHandler) Init(md md.Metadata) (err error) {
|
||||
}
|
||||
|
||||
// Forward implements handler.Forwarder.
|
||||
func (h *tapHandler) Forward(hop chain.Hop) {
|
||||
func (h *tapHandler) Forward(hop hop.Hop) {
|
||||
h.hop = hop
|
||||
}
|
||||
|
||||
|
@ -9,6 +9,7 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/go-gost/core/chain"
|
||||
"github.com/go-gost/core/hop"
|
||||
"github.com/go-gost/core/handler"
|
||||
md "github.com/go-gost/core/metadata"
|
||||
tun_util "github.com/go-gost/x/internal/util/tun"
|
||||
@ -26,7 +27,7 @@ func init() {
|
||||
}
|
||||
|
||||
type tunHandler struct {
|
||||
hop chain.Hop
|
||||
hop hop.Hop
|
||||
routes sync.Map
|
||||
router *chain.Router
|
||||
md metadata
|
||||
@ -58,7 +59,7 @@ func (h *tunHandler) Init(md md.Metadata) (err error) {
|
||||
}
|
||||
|
||||
// Forward implements handler.Forwarder.
|
||||
func (h *tunHandler) Forward(hop chain.Hop) {
|
||||
func (h *tunHandler) Forward(hop hop.Hop) {
|
||||
h.hop = hop
|
||||
}
|
||||
|
||||
|
@ -8,6 +8,7 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/go-gost/core/chain"
|
||||
"github.com/go-gost/core/hop"
|
||||
"github.com/go-gost/core/handler"
|
||||
"github.com/go-gost/core/logger"
|
||||
md "github.com/go-gost/core/metadata"
|
||||
@ -20,7 +21,7 @@ func init() {
|
||||
}
|
||||
|
||||
type unixHandler struct {
|
||||
hop chain.Hop
|
||||
hop hop.Hop
|
||||
router *chain.Router
|
||||
md metadata
|
||||
options handler.Options
|
||||
@ -51,7 +52,7 @@ func (h *unixHandler) Init(md md.Metadata) (err error) {
|
||||
}
|
||||
|
||||
// Forward implements handler.Forwarder.
|
||||
func (h *unixHandler) Forward(hop chain.Hop) {
|
||||
func (h *unixHandler) Forward(hop hop.Hop) {
|
||||
h.hop = hop
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user