From efb50ffc8e51e465962620cbc145c1cb131d851c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Monta=C3=B1es=20Ojados?= Date: Mon, 19 Jan 2026 14:28:56 +0100 Subject: [PATCH] feat: Add pcap import, file browser, logging, local capture, and stable call ordering --- cmd/inspector/main.go | 12 + data/calls.pcap | Bin 0 -> 18247 bytes data/test.pcapng | Bin 0 -> 6664 bytes data/test2.pcap | Bin 0 -> 6096 bytes go.mod | 4 + go.sum | 28 ++ inspector.exe | Bin 4668928 -> 10655744 bytes internal/capture/local.go | 180 ++++++++ internal/capture/pcap_reader.go | 243 ++++++++++ internal/config/loader.go | 72 +++ internal/logger/logger.go | 113 +++++ internal/sip/callflow.go | 199 ++++++++ internal/tui/file_browser.go | 256 +++++++++++ internal/tui/model.go | 778 ++++++++++++++++++++++++++++++-- internal/tui/ssh_config.go | 180 ++++++++ logs/2026-01-19_14-18-33.log | 52 +++ logs/2026-01-19_14-23-22.log | 237 ++++++++++ logs/2026-01-19_14-25-30.log | 176 ++++++++ logs/2026-01-19_14-28-08.log | 175 +++++++ 19 files changed, 2660 insertions(+), 45 deletions(-) create mode 100644 data/calls.pcap create mode 100644 data/test.pcapng create mode 100644 data/test2.pcap create mode 100644 internal/capture/local.go create mode 100644 internal/capture/pcap_reader.go create mode 100644 internal/config/loader.go create mode 100644 internal/logger/logger.go create mode 100644 internal/sip/callflow.go create mode 100644 internal/tui/file_browser.go create mode 100644 internal/tui/ssh_config.go create mode 100644 logs/2026-01-19_14-18-33.log create mode 100644 logs/2026-01-19_14-23-22.log create mode 100644 logs/2026-01-19_14-25-30.log create mode 100644 logs/2026-01-19_14-28-08.log diff --git a/cmd/inspector/main.go b/cmd/inspector/main.go index 9c42abb..f65d8dd 100644 --- a/cmd/inspector/main.go +++ b/cmd/inspector/main.go @@ -4,15 +4,27 @@ import ( "fmt" "os" + "telephony-inspector/internal/logger" "telephony-inspector/internal/tui" tea "github.com/charmbracelet/bubbletea" ) func main() { + // Initialize logger + if err := logger.Init(); err != nil { + fmt.Fprintf(os.Stderr, "Warning: Could not initialize logger: %v\n", err) + } + defer logger.Close() + + logger.Info("Starting Telephony Inspector") + p := tea.NewProgram(tui.NewModel(), tea.WithAltScreen()) if _, err := p.Run(); err != nil { + logger.Error("Program error: %v", err) fmt.Fprintf(os.Stderr, "Error: %v\n", err) os.Exit(1) } + + logger.Info("Telephony Inspector exited normally") } diff --git a/data/calls.pcap b/data/calls.pcap new file mode 100644 index 0000000000000000000000000000000000000000..de13ccf1a73c15ce994d15cab83a08070f87258a GIT binary patch literal 18247 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 N$3t}^e4FW;{11n`Rf$5bw$^e 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

p`d+{y9RO`X@oCu)qHiLgmJJI<`Qj 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