Skip to content

Commit 2c07fee

Browse files
Adding debug logs to match trunk
1 parent 9d3e62e commit 2c07fee

1 file changed

Lines changed: 86 additions & 3 deletions

File tree

sip/sip.go

Lines changed: 86 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -486,6 +486,8 @@ func MatchTrunk(trunks []*livekit.SIPInboundTrunkInfo, call *rpc.SIPCall, opts .
486486
// MatchTrunkDetailed is like MatchTrunkIter but returns detailed match information
487487
func MatchTrunkDetailed(it iters.Iter[*livekit.SIPInboundTrunkInfo], call *rpc.SIPCall, opts ...MatchTrunkOpt) (*TrunkMatchResult, error) {
488488
defer it.Close()
489+
log := logger.GetLogger()
490+
489491
var opt matchTrunkOpts
490492
for _, fnc := range opts {
491493
fnc(&opt)
@@ -503,39 +505,96 @@ func MatchTrunkDetailed(it iters.Iter[*livekit.SIPInboundTrunkInfo], call *rpc.S
503505
sawAnyTrunk bool
504506
)
505507
calledNorm := NormalizeNumber(call.To.User)
508+
log.Debugw("MatchTrunkDetailed: starting trunk matching",
509+
"calledNumber", call.To.User,
510+
"calledNumberNormalized", calledNorm,
511+
"callingNumber", call.From.User,
512+
"sourceIp", call.SourceIp,
513+
"fromHost", call.From.Host)
514+
515+
trunkIndex := 0
506516
for {
507517
tr, err := it.Next()
508518
if err == io.EOF {
509519
break
510520
} else if err != nil {
511521
return nil, err
512522
}
523+
trunkIndex++
513524
if !sawAnyTrunk {
514525
sawAnyTrunk = true
515526
result.MatchType = TrunkMatchNone // We have trunks but haven't matched any yet
516527
}
517528
tr = opt.Replace(tr)
529+
530+
log.Debugw("MatchTrunkDetailed: evaluating trunk",
531+
"trunkIndex", trunkIndex,
532+
"trunkID", tr.SipTrunkId,
533+
"trunkName", tr.Name,
534+
"trunkNumbers", tr.Numbers,
535+
"trunkNumbersCount", len(tr.Numbers),
536+
"allowedNumbers", tr.AllowedNumbers,
537+
"allowedAddresses", tr.AllowedAddresses)
538+
518539
// Do not consider it if number doesn't match.
519-
if !matchNumbers(call.From.User, tr.AllowedNumbers) {
540+
fromMatches := matchNumbers(call.From.User, tr.AllowedNumbers)
541+
if !fromMatches {
542+
log.Debugw("MatchTrunkDetailed: trunk filtered - calling number not allowed",
543+
"trunkID", tr.SipTrunkId,
544+
"callingNumber", call.From.User,
545+
"allowedNumbers", tr.AllowedNumbers)
520546
if !opt.Filtered(tr, TrunkFilteredCallingNumberDisallowed) {
521547
continue
522548
}
523549
}
524-
if !matchAddrMasks(call.SourceIp, call.From.Host, tr.AllowedAddresses) {
550+
551+
addrMatches := matchAddrMasks(call.SourceIp, call.From.Host, tr.AllowedAddresses)
552+
if !addrMatches {
553+
log.Debugw("MatchTrunkDetailed: trunk filtered - source address not allowed",
554+
"trunkID", tr.SipTrunkId,
555+
"sourceIp", call.SourceIp,
556+
"fromHost", call.From.Host,
557+
"allowedAddresses", tr.AllowedAddresses)
525558
if !opt.Filtered(tr, TrunkFilteredSourceAddressDisallowed) {
526559
continue
527560
}
528561
}
562+
529563
if len(tr.Numbers) == 0 {
530564
// Default/wildcard trunk.
565+
log.Debugw("MatchTrunkDetailed: trunk is default/wildcard (no specific numbers)",
566+
"trunkID", tr.SipTrunkId)
531567
defaultTrunkPrev = defaultTrunk
532568
defaultTrunk = tr
533569
result.DefaultTrunkCount++
534570
} else {
535571
for _, num := range tr.Numbers {
536-
if num == call.To.User || NormalizeNumber(num) == calledNorm {
572+
numNorm := NormalizeNumber(num)
573+
directMatch := num == call.To.User
574+
normalizedMatch := numNorm == calledNorm
575+
matches := directMatch || normalizedMatch
576+
577+
log.Debugw("MatchTrunkDetailed: checking trunk number",
578+
"trunkID", tr.SipTrunkId,
579+
"trunkNumber", num,
580+
"trunkNumberNormalized", numNorm,
581+
"calledNumber", call.To.User,
582+
"calledNumberNormalized", calledNorm,
583+
"directMatch", directMatch,
584+
"normalizedMatch", normalizedMatch,
585+
"matches", matches)
586+
587+
if matches {
537588
// Trunk specific to the number.
589+
log.Debugw("MatchTrunkDetailed: trunk number matched!",
590+
"trunkID", tr.SipTrunkId,
591+
"trunkNumber", num,
592+
"calledNumber", call.To.User)
538593
if selectedTrunk != nil {
594+
log.Debugw("MatchTrunkDetailed: multiple trunks matched, conflict detected",
595+
"previousTrunkID", selectedTrunk.SipTrunkId,
596+
"newTrunkID", tr.SipTrunkId,
597+
"calledNumber", call.To.User)
539598
opt.Conflict(selectedTrunk, tr, TrunkConflictCalledNumber)
540599
if opt.AllowConflicts {
541600
// This path is unreachable, since we pick the first trunk. Kept for completeness.
@@ -548,10 +607,16 @@ func MatchTrunkDetailed(it iters.Iter[*livekit.SIPInboundTrunkInfo], call *rpc.S
548607
// Pick the first match as soon as it's found. We don't care about conflicts.
549608
result.Trunk = selectedTrunk
550609
result.MatchType = TrunkMatchSpecific
610+
log.Debugw("MatchTrunkDetailed: returning matched trunk (allow conflicts)",
611+
"trunkID", selectedTrunk.SipTrunkId)
551612
return result, nil
552613
}
553614
// Keep searching! We want to know if there are any conflicting Trunk definitions.
554615
} else {
616+
log.Debugw("MatchTrunkDetailed: trunk number did not match",
617+
"trunkID", tr.SipTrunkId,
618+
"trunkNumber", num,
619+
"calledNumber", call.To.User)
555620
opt.Filtered(tr, TrunkFilteredCalledNumberDisallowed)
556621
}
557622
}
@@ -561,9 +626,16 @@ func MatchTrunkDetailed(it iters.Iter[*livekit.SIPInboundTrunkInfo], call *rpc.S
561626
if selectedTrunk != nil {
562627
result.Trunk = selectedTrunk
563628
result.MatchType = TrunkMatchSpecific
629+
log.Debugw("MatchTrunkDetailed: returning specific matched trunk",
630+
"trunkID", selectedTrunk.SipTrunkId,
631+
"calledNumber", call.To.User,
632+
"matchType", result.MatchType)
564633
return result, nil
565634
}
566635
if result.DefaultTrunkCount > 1 {
636+
log.Debugw("MatchTrunkDetailed: multiple default trunks found, conflict detected",
637+
"defaultTrunkCount", result.DefaultTrunkCount,
638+
"calledNumber", call.To.User)
567639
opt.Conflict(defaultTrunk, defaultTrunkPrev, TrunkConflictDefault)
568640
if !opt.AllowConflicts {
569641
return nil, twirp.NewErrorf(twirp.FailedPrecondition, "Multiple default SIP Trunks matched for %q", call.To.User)
@@ -572,7 +644,18 @@ func MatchTrunkDetailed(it iters.Iter[*livekit.SIPInboundTrunkInfo], call *rpc.S
572644
if defaultTrunk != nil {
573645
result.Trunk = defaultTrunk
574646
result.MatchType = TrunkMatchDefault
647+
log.Debugw("MatchTrunkDetailed: returning default trunk",
648+
"trunkID", defaultTrunk.SipTrunkId,
649+
"calledNumber", call.To.User,
650+
"matchType", result.MatchType)
651+
return result, nil
575652
}
653+
654+
log.Debugw("MatchTrunkDetailed: no trunk matched",
655+
"calledNumber", call.To.User,
656+
"trunksEvaluated", trunkIndex,
657+
"matchType", result.MatchType,
658+
"defaultTrunkCount", result.DefaultTrunkCount)
576659
return result, nil
577660
}
578661

0 commit comments

Comments
 (0)