From 69990d7661d52deecabe46e7e3f1ea7f81c6d9bf Mon Sep 17 00:00:00 2001 From: Niko Marmeladkov Date: Tue, 30 Jun 2026 15:08:41 +0300 Subject: [PATCH] Fix target offline: normalize number in HandleDial Clients may send dial target without spaces (+07491552819 vs +0 749 155 2819). Normalize both formats in HandleDial and extend NormalizeNumber. --- internal/call/signaling.go | 2 ++ internal/identity/number.go | 9 +++++++++ 2 files changed, 11 insertions(+) diff --git a/internal/call/signaling.go b/internal/call/signaling.go index 3fad6b9..60ae05f 100644 --- a/internal/call/signaling.go +++ b/internal/call/signaling.go @@ -8,6 +8,7 @@ import ( "github.com/apernet/quic-go" "go.uber.org/zap" + "github.com/niko/qcc/internal/identity" "github.com/niko/qcc/internal/protocol" "github.com/niko/qcc/pkg/types" ) @@ -129,6 +130,7 @@ func (m *Manager) HandleDial(sess CallSession, payload []byte) { sendError(sess, types.ErrInvalidRequest, "empty target number") return } + targetNumber = identity.NormalizeNumber(targetNumber) fromNumber := sess.Number() if fromNumber == targetNumber { diff --git a/internal/identity/number.go b/internal/identity/number.go index 126e194..c139e6d 100644 --- a/internal/identity/number.go +++ b/internal/identity/number.go @@ -25,6 +25,15 @@ func NormalizeNumber(s string) string { if len(parts) == 4 && strings.HasPrefix(parts[0], "+") { return fmt.Sprintf("%s %s %s %s", parts[0], parts[1], parts[2], parts[3]) } + if len(parts) == 1 && len(parts[0]) > 2 && parts[0][0] == '+' { + // "+07491552819" → "+0 749 155 2819" + raw := parts[0] + prefix := raw[:2] + rest := raw[2:] + if len(rest) == 9 { + return fmt.Sprintf("%s %s %s %s", prefix, rest[:3], rest[3:6], rest[6:]) + } + } return s }