inetmock/internal/endpoint/server_builder.go
Peter Kurfer 3c7810c32a
All checks were successful
concourse-ci/lint/protobuf Lint protobufs
concourse-ci/test/integration integration tests
concourse-ci/lint/golangci-lint Lint Go files
Add network monitoring through eBPF
- introduce netmon details to be emitted whenever a packet is observed not handled by InetMock
- rework cache configuration to re-use the same cache instance for all DNS handlers
- add an API to enable network monitoring per network interface including whitelists for IPs and ports
2022-12-21 21:15:05 +01:00

67 lines
1.3 KiB
Go

package endpoint
import (
"crypto/tls"
"errors"
"sync"
"inetmock.icb4dc0.de/inetmock/pkg/logging"
)
var (
ErrUnknownHandlerRef = errors.New("no handler for given key registered")
ErrNoEndpoints = errors.New("no endpoints configured in ListenerGroup")
)
func NewServerBuilder(
tlsConfig *tls.Config,
registry HandlerRegistry,
logger logging.Logger,
) *ServerBuilder {
return &ServerBuilder{
registry: registry,
server: NewServer(logger, tlsConfig),
}
}
type ServerBuilder struct {
server *Server
lock sync.Mutex
registry HandlerRegistry
}
func (e *ServerBuilder) Server() *Server {
return e.server
}
func (e *ServerBuilder) ConfigureGroup(spec ListenerSpec) (err error) {
e.lock.Lock()
defer e.lock.Unlock()
if len(spec.Endpoints) < 1 {
return ErrNoEndpoints
}
var grp *ListenerGroup
if grp, err = NewListenerGroup(spec); err != nil {
return err
}
for name, s := range spec.Endpoints {
if handler, registered := e.registry.HandlerForName(s.HandlerRef); registered {
grp.ConfigureEndpoint(name, NewListenerEndpoint(s, handler))
} else {
return ErrUnknownHandlerRef
}
}
e.server.ConfigureGroup(grp)
return nil
}
func (e *ServerBuilder) ConfiguredGroups() []GroupInfo {
e.lock.Lock()
defer e.lock.Unlock()
return e.server.ConfiguredGroups()
}