safing-portmaster/service/core/base/module.go

63 lines
1,017 B
Go

package base
import (
"errors"
"sync/atomic"
"github.com/safing/portmaster/service/mgr"
)
// Base is the base module.
type Base struct {
mgr *mgr.Manager
instance instance
}
// Manager returns the module manager.
func (b *Base) Manager() *mgr.Manager {
return b.mgr
}
// Start starts the module.
func (b *Base) Start() error {
startProfiling()
registerLogCleaner()
return nil
}
// Stop stops the module.
func (b *Base) Stop() error {
return nil
}
var (
module *Base
shimLoaded atomic.Bool
)
// New returns a new Base module.
func New(instance instance) (*Base, error) {
if !shimLoaded.CompareAndSwap(false, true) {
return nil, errors.New("only one instance allowed")
}
m := mgr.New("Base")
module = &Base{
mgr: m,
instance: instance,
}
if err := prep(instance); err != nil {
return nil, err
}
if err := registerDatabases(); err != nil {
return nil, err
}
return module, nil
}
type instance interface {
DataDir() string
SetCmdLineOperation(f func() error)
}