101 lines
2.6 KiB
Go
101 lines
2.6 KiB
Go
// SPDX-License-Identifier: 0BSD
|
|
// Copyright (c) 2024-2026 Sudo-Ivan / Quad4.io
|
|
package common
|
|
|
|
import (
|
|
"fmt"
|
|
)
|
|
|
|
const (
|
|
DEFAULT_SHARED_INSTANCE_PORT = 37428
|
|
DEFAULT_INSTANCE_CONTROL_PORT = 37429
|
|
DEFAULT_LOG_LEVEL = 20
|
|
)
|
|
|
|
// ConfigProvider interface for accessing configuration
|
|
type ConfigProvider interface {
|
|
GetConfigPath() string
|
|
GetLogLevel() int
|
|
GetInterfaces() map[string]InterfaceConfig
|
|
}
|
|
|
|
// InterfaceConfig represents interface configuration
|
|
type InterfaceConfig struct {
|
|
Name string
|
|
Type string
|
|
Enabled bool
|
|
Address string
|
|
Port int
|
|
TargetHost string
|
|
TargetPort int
|
|
TargetAddress string
|
|
Interface string
|
|
KISSFraming bool
|
|
I2PTunneled bool
|
|
PreferIPv6 bool
|
|
MaxReconnTries int
|
|
Bitrate int64
|
|
MTU int
|
|
GroupID string
|
|
DiscoveryScope string
|
|
DiscoveryPort int
|
|
DataPort int
|
|
Frequency uint32
|
|
Bandwidth uint32
|
|
SF uint8
|
|
CR uint8
|
|
TXPower uint8
|
|
}
|
|
|
|
// ReticulumConfig represents the main configuration structure
|
|
type ReticulumConfig struct {
|
|
ConfigPath string
|
|
EnableTransport bool
|
|
ShareInstance bool
|
|
SharedInstancePort int
|
|
InstanceControlPort int
|
|
PanicOnInterfaceErr bool
|
|
LogLevel int
|
|
Interfaces map[string]*InterfaceConfig
|
|
AppName string
|
|
AppAspect string
|
|
}
|
|
|
|
// NewReticulumConfig creates a new ReticulumConfig with default values
|
|
func NewReticulumConfig() *ReticulumConfig {
|
|
return &ReticulumConfig{
|
|
EnableTransport: true,
|
|
ShareInstance: false,
|
|
SharedInstancePort: DEFAULT_SHARED_INSTANCE_PORT,
|
|
InstanceControlPort: DEFAULT_INSTANCE_CONTROL_PORT,
|
|
PanicOnInterfaceErr: false,
|
|
LogLevel: DEFAULT_LOG_LEVEL,
|
|
Interfaces: make(map[string]*InterfaceConfig),
|
|
}
|
|
}
|
|
|
|
// Validate checks if the configuration is valid
|
|
func (c *ReticulumConfig) Validate() error {
|
|
if c.SharedInstancePort < 1 || c.SharedInstancePort > 65535 {
|
|
return fmt.Errorf("invalid shared instance port: %d", c.SharedInstancePort)
|
|
}
|
|
if c.InstanceControlPort < 1 || c.InstanceControlPort > 65535 {
|
|
return fmt.Errorf("invalid instance control port: %d", c.InstanceControlPort)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func DefaultConfig() *ReticulumConfig {
|
|
return &ReticulumConfig{
|
|
EnableTransport: true,
|
|
ShareInstance: false,
|
|
SharedInstancePort: DEFAULT_SHARED_INSTANCE_PORT,
|
|
InstanceControlPort: DEFAULT_INSTANCE_CONTROL_PORT,
|
|
PanicOnInterfaceErr: false,
|
|
LogLevel: DEFAULT_LOG_LEVEL,
|
|
Interfaces: make(map[string]*InterfaceConfig),
|
|
AppName: "Go Client",
|
|
AppAspect: "node",
|
|
}
|
|
}
|