feat: Initial project structure with TUI, SSH, SIP parser, and capture modules

This commit is contained in:
Jose Luis Montañes Ojados
2026-01-19 13:46:27 +01:00
commit 3e5742d353
9 changed files with 932 additions and 0 deletions

View File

@@ -0,0 +1,62 @@
package config
// NodeType represents the type of network node
type NodeType string
const (
NodeTypePBX NodeType = "PBX"
NodeTypeProxy NodeType = "Proxy"
NodeTypeMediaServer NodeType = "MediaServer"
NodeTypeGateway NodeType = "Gateway"
NodeTypeEndpoint NodeType = "Endpoint"
NodeTypeUnknown NodeType = "Unknown"
)
// NetworkNode represents a network entity in the SIP infrastructure
type NetworkNode struct {
Name string `json:"name"`
IP string `json:"ip"`
Type NodeType `json:"type"`
Aliases []string `json:"aliases,omitempty"` // Alternative IPs or hostnames
Description string `json:"description,omitempty"`
}
// NetworkMap holds the configured network topology
type NetworkMap struct {
Nodes []NetworkNode `json:"nodes"`
}
// NewNetworkMap creates an empty network map
func NewNetworkMap() *NetworkMap {
return &NetworkMap{
Nodes: make([]NetworkNode, 0),
}
}
// AddNode adds a new node to the network map
func (nm *NetworkMap) AddNode(node NetworkNode) {
nm.Nodes = append(nm.Nodes, node)
}
// FindByIP looks up a node by IP address
func (nm *NetworkMap) FindByIP(ip string) *NetworkNode {
for i := range nm.Nodes {
if nm.Nodes[i].IP == ip {
return &nm.Nodes[i]
}
for _, alias := range nm.Nodes[i].Aliases {
if alias == ip {
return &nm.Nodes[i]
}
}
}
return nil
}
// LabelForIP returns a human-readable label for an IP, or the IP itself if unknown
func (nm *NetworkMap) LabelForIP(ip string) string {
if node := nm.FindByIP(ip); node != nil {
return node.Name + " (" + string(node.Type) + ")"
}
return ip
}