add web api

This commit is contained in:
ginuerzh
2022-02-08 23:46:54 +08:00
parent 0fba6d2500
commit f1eaef8d69
22 changed files with 1209 additions and 33 deletions

View File

@ -30,19 +30,28 @@ func (r *bypassRegistry) Unregister(name string) {
r.m.Delete(name)
}
func (r *bypassRegistry) IsRegistered(name string) bool {
_, ok := r.m.Load(name)
return ok
}
func (r *bypassRegistry) Get(name string) bypass.Bypass {
if _, ok := r.m.Load(name); !ok {
return nil
}
return &bypassWrapper{name: name}
}
func (r *bypassRegistry) get(name string) bypass.Bypass {
if v, ok := r.m.Load(name); ok {
return v.(bypass.Bypass)
}
return nil
}
type bypassWrapper struct {
name string
}
func (w *bypassWrapper) Contains(addr string) bool {
bp := bypassReg.Get(w.name)
bp := bypassReg.get(w.name)
if bp == nil {
return false
}

View File

@ -30,19 +30,28 @@ func (r *chainRegistry) Unregister(name string) {
r.m.Delete(name)
}
func (r *chainRegistry) IsRegistered(name string) bool {
_, ok := r.m.Load(name)
return ok
}
func (r *chainRegistry) Get(name string) chain.Chainer {
if _, ok := r.m.Load(name); !ok {
return nil
}
return &chainWrapper{name: name}
}
func (r *chainRegistry) get(name string) chain.Chainer {
if v, ok := r.m.Load(name); ok {
return v.(chain.Chainer)
}
return nil
}
type chainWrapper struct {
name string
}
func (w *chainWrapper) Route(network, address string) *chain.Route {
v := Chain().Get(w.name)
v := Chain().get(w.name)
if v == nil {
return nil
}

View File

@ -31,19 +31,28 @@ func (r *hostsRegistry) Unregister(name string) {
r.m.Delete(name)
}
func (r *hostsRegistry) IsRegistered(name string) bool {
_, ok := r.m.Load(name)
return ok
}
func (r *hostsRegistry) Get(name string) hosts.HostMapper {
if _, ok := r.m.Load(name); !ok {
return nil
}
return &hostsWrapper{name: name}
}
func (r *hostsRegistry) get(name string) hosts.HostMapper {
if v, ok := r.m.Load(name); ok {
return v.(hosts.HostMapper)
}
return nil
}
type hostsWrapper struct {
name string
}
func (w *hostsWrapper) Lookup(network, host string) ([]net.IP, bool) {
v := Hosts().Get(w.name)
v := Hosts().get(w.name)
if v == nil {
return nil, false
}

View File

@ -11,8 +11,7 @@ import (
)
var (
ErrDup = errors.New("registry: duplicate instance")
ErrNotFound = errors.New("registry: instance not found")
ErrDup = errors.New("registry: duplicate instance")
)
type NewListener func(opts ...listener.Option) listener.Listener

View File

@ -32,21 +32,30 @@ func (r *resolverRegistry) Unregister(name string) {
r.m.Delete(name)
}
func (r *resolverRegistry) IsRegistered(name string) bool {
_, ok := r.m.Load(name)
return ok
}
func (r *resolverRegistry) Get(name string) resolver.Resolver {
if _, ok := r.m.Load(name); !ok {
return nil
}
return &resolverWrapper{name: name}
}
func (r *resolverRegistry) get(name string) resolver.Resolver {
if v, ok := r.m.Load(name); ok {
return v.(resolver.Resolver)
}
return nil
}
type resolverWrapper struct {
name string
}
func (w *resolverWrapper) Resolve(ctx context.Context, network, host string) ([]net.IP, error) {
r := Resolver().Get(w.name)
r := Resolver().get(w.name)
if r == nil {
return nil, ErrNotFound
return nil, resolver.ErrInvalid
}
return r.Resolve(ctx, network, host)
}

View File

@ -30,6 +30,11 @@ func (r *serviceRegistry) Unregister(name string) {
r.m.Delete(name)
}
func (r *serviceRegistry) IsRegistered(name string) bool {
_, ok := r.m.Load(name)
return ok
}
func (r *serviceRegistry) Get(name string) *service.Service {
v, ok := r.m.Load(name)
if !ok {