From 1344b730aff4953364ed5fb4f76dff1414b68c37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Monta=C3=B1es=20Ojados?= Date: Mon, 19 Jan 2026 16:17:28 +0100 Subject: [PATCH] fix: Increase scanner buffer size to 5MB and add error logging to prevent silent capture failures --- internal/capture/capturer.go | 11 +++++++++++ internal/capture/local.go | 12 ++++++++++++ 2 files changed, 23 insertions(+) diff --git a/internal/capture/capturer.go b/internal/capture/capturer.go index efa52d4..8efa0c5 100644 --- a/internal/capture/capturer.go +++ b/internal/capture/capturer.go @@ -103,6 +103,11 @@ func (c *Capturer) IsRunning() bool { func (c *Capturer) processStream(r io.Reader) { scanner := bufio.NewScanner(r) + // Increase buffer size to handle large packets + const maxCapacity = 5 * 1024 * 1024 // 5MB + buf := make([]byte, 0, 64*1024) + scanner.Buffer(buf, maxCapacity) + var buffer strings.Builder inSIPMessage := false var msgNetInfo *NetInfo @@ -159,6 +164,12 @@ func (c *Capturer) processStream(r io.Reader) { if buffer.Len() > 0 { c.parseAndEmit(buffer.String(), msgNetInfo) } + + if err := scanner.Err(); err != nil { + if c.OnError != nil { + c.OnError(fmt.Errorf("scanner error: %w", err)) + } + } } func (c *Capturer) processErrors(r io.Reader) { diff --git a/internal/capture/local.go b/internal/capture/local.go index cf1671a..fdcc90c 100644 --- a/internal/capture/local.go +++ b/internal/capture/local.go @@ -125,6 +125,11 @@ func (c *LocalCapturer) Close() error { func (c *LocalCapturer) processStream(r io.Reader) { scanner := bufio.NewScanner(r) + // Increase buffer size to handle large packets (default is 64KB) + const maxCapacity = 5 * 1024 * 1024 // 5MB + buf := make([]byte, 0, 64*1024) + scanner.Buffer(buf, maxCapacity) + var buffer strings.Builder inSIPMessage := false var msgNetInfo *NetInfo @@ -199,6 +204,13 @@ func (c *LocalCapturer) processStream(r io.Reader) { if buffer.Len() > 0 { c.parseAndEmit(buffer.String(), msgNetInfo) } + + if err := scanner.Err(); err != nil { + logger.Error("Scanner error: %v", err) + if c.OnError != nil { + c.OnError(fmt.Errorf("scanner error: %w", err)) + } + } } func (c *LocalCapturer) processErrors(r io.Reader) {