This commit is contained in:
Sudo-Ivan
2024-12-30 02:43:35 -06:00
parent bfc75a2290
commit a2476c9551
4 changed files with 42 additions and 16 deletions

View File

@@ -55,11 +55,11 @@ func (c *Client) Start() error {
var iface common.NetworkInterface var iface common.NetworkInterface
switch ifaceConfig.Type { switch ifaceConfig.Type {
case "tcp": case "TCPClientInterface":
client, err := interfaces.NewTCPClient( client, err := interfaces.NewTCPClient(
ifaceConfig.Name, ifaceConfig.Name,
ifaceConfig.Address, ifaceConfig.TargetHost,
ifaceConfig.Port, ifaceConfig.TargetPort,
ifaceConfig.KISSFraming, ifaceConfig.KISSFraming,
ifaceConfig.I2PTunneled, ifaceConfig.I2PTunneled,
) )
@@ -74,9 +74,8 @@ func (c *Client) Start() error {
client.SetPacketCallback(callback) client.SetPacketCallback(callback)
iface = client iface = client
case "udp": case "UDPInterface":
addr := fmt.Sprintf("%s:%d", ifaceConfig.Address, ifaceConfig.Port) addr := fmt.Sprintf("%s:%d", ifaceConfig.Address, ifaceConfig.Port)
udp, err := interfaces.NewUDPInterface( udp, err := interfaces.NewUDPInterface(
ifaceConfig.Name, ifaceConfig.Name,
addr, addr,
@@ -93,12 +92,18 @@ func (c *Client) Start() error {
udp.SetPacketCallback(callback) udp.SetPacketCallback(callback)
iface = udp iface = udp
case "AutoInterface":
log.Printf("AutoInterface type not yet implemented")
continue
default: default:
log.Printf("Unknown interface type: %s", ifaceConfig.Type) log.Printf("Unknown interface type: %s", ifaceConfig.Type)
continue continue
} }
c.interfaces = append(c.interfaces, iface) if iface != nil {
c.interfaces = append(c.interfaces, iface)
}
} }
return nil return nil

View File

@@ -1,6 +1,7 @@
package main package main
import ( import (
"fmt"
"log" "log"
"os" "os"
"os/signal" "os/signal"
@@ -15,6 +16,7 @@ import (
type Reticulum struct { type Reticulum struct {
config *common.ReticulumConfig config *common.ReticulumConfig
transport *transport.Transport transport *transport.Transport
interfaces []interfaces.Interface
} }
func NewReticulum(cfg *common.ReticulumConfig) (*Reticulum, error) { func NewReticulum(cfg *common.ReticulumConfig) (*Reticulum, error) {
@@ -35,16 +37,15 @@ func NewReticulum(cfg *common.ReticulumConfig) (*Reticulum, error) {
} }
func (r *Reticulum) Start() error { func (r *Reticulum) Start() error {
// Initialize interfaces based on config
for _, ifaceConfig := range r.config.Interfaces { for _, ifaceConfig := range r.config.Interfaces {
var iface interfaces.Interface var iface interfaces.Interface
switch ifaceConfig.Type { switch ifaceConfig.Type {
case "tcp": case "TCPClientInterface":
client, err := interfaces.NewTCPClient( client, err := interfaces.NewTCPClient(
ifaceConfig.Name, ifaceConfig.Name,
ifaceConfig.Address, ifaceConfig.TargetHost,
ifaceConfig.Port, ifaceConfig.TargetPort,
ifaceConfig.KISSFraming, ifaceConfig.KISSFraming,
ifaceConfig.I2PTunneled, ifaceConfig.I2PTunneled,
) )
@@ -54,7 +55,7 @@ func (r *Reticulum) Start() error {
} }
iface = client iface = client
case "tcpserver": case "TCPServerInterface":
server, err := interfaces.NewTCPServer( server, err := interfaces.NewTCPServer(
ifaceConfig.Name, ifaceConfig.Name,
ifaceConfig.Address, ifaceConfig.Address,
@@ -68,13 +69,33 @@ func (r *Reticulum) Start() error {
} }
iface = server iface = server
case "UDPInterface":
addr := fmt.Sprintf("%s:%d", ifaceConfig.Address, ifaceConfig.Port)
udp, err := interfaces.NewUDPInterface(
ifaceConfig.Name,
addr,
"", // No target address for server initially
)
if err != nil {
log.Printf("Failed to create UDP interface %s: %v", ifaceConfig.Name, err)
continue
}
iface = udp
case "AutoInterface":
log.Printf("AutoInterface type not yet implemented")
continue
default: default:
log.Printf("Unknown interface type: %s", ifaceConfig.Type) log.Printf("Unknown interface type: %s", ifaceConfig.Type)
continue continue
} }
// Set packet callback to transport if iface != nil {
iface.SetPacketCallback(r.transport.HandlePacket) // Set packet callback to transport
iface.SetPacketCallback(r.transport.HandlePacket)
r.interfaces = append(r.interfaces, iface)
}
} }
log.Printf("Reticulum initialized with config at: %s", r.config.ConfigPath) log.Printf("Reticulum initialized with config at: %s", r.config.ConfigPath)

View File

@@ -31,7 +31,7 @@ func GetConfigPath() (string, error) {
if err != nil { if err != nil {
return "", err return "", err
} }
return filepath.Join(homeDir, ".reticulum", "config"), nil return filepath.Join(homeDir, ".reticulum-go", "config"), nil
} }
func EnsureConfigDir() error { func EnsureConfigDir() error {
@@ -40,7 +40,7 @@ func EnsureConfigDir() error {
return err return err
} }
configDir := filepath.Join(homeDir, ".reticulum") configDir := filepath.Join(homeDir, ".reticulum-go")
return os.MkdirAll(configDir, 0755) return os.MkdirAll(configDir, 0755)
} }

View File

@@ -286,7 +286,7 @@ func Recall(hash []byte) (*Identity, error) {
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to get home directory: %w", err) return nil, fmt.Errorf("failed to get home directory: %w", err)
} }
configDir = filepath.Join(homeDir, ".reticulum") configDir = filepath.Join(homeDir, ".reticulum-go")
} }
// Create identities directory if it doesn't exist // Create identities directory if it doesn't exist