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.
This commit is contained in:
Niko Marmeladkov 2026-06-30 15:08:41 +03:00
parent 73f09c29ab
commit 69990d7661
2 changed files with 11 additions and 0 deletions

View file

@ -8,6 +8,7 @@ import (
"github.com/apernet/quic-go" "github.com/apernet/quic-go"
"go.uber.org/zap" "go.uber.org/zap"
"github.com/niko/qcc/internal/identity"
"github.com/niko/qcc/internal/protocol" "github.com/niko/qcc/internal/protocol"
"github.com/niko/qcc/pkg/types" "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") sendError(sess, types.ErrInvalidRequest, "empty target number")
return return
} }
targetNumber = identity.NormalizeNumber(targetNumber)
fromNumber := sess.Number() fromNumber := sess.Number()
if fromNumber == targetNumber { if fromNumber == targetNumber {

View file

@ -25,6 +25,15 @@ func NormalizeNumber(s string) string {
if len(parts) == 4 && strings.HasPrefix(parts[0], "+") { if len(parts) == 4 && strings.HasPrefix(parts[0], "+") {
return fmt.Sprintf("%s %s %s %s", parts[0], parts[1], parts[2], parts[3]) 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 return s
} }