dns/labels.go

51 lines
1.2 KiB
Go
Raw Normal View History

2012-01-11 01:55:52 +11:00
package dns
// Holds a bunch of helper functions for dealing with labels.
// SplitLabels splits a domainname string into its labels.
func SplitLabels(s string) []string {
last := byte('.')
k := 0
labels := make([]string, 0)
s = Fqdn(s) // Make fully qualified
for i := 0; i < len(s); i++ {
if s[i] == '.' {
if last == '\\' {
// do nothing
break
}
labels = append(labels,s[k:i])
k = i + 1 // + dot
}
last = s[i]
}
return labels
}
// CompareLabels compares the strings s1 and s2 and
2012-01-11 02:04:32 +11:00
// returns how many labels they have in common starting from the right.
// The comparison stops at the first inequality
//
2012-01-11 01:55:52 +11:00
// www.miek.nl and miek.nl have two labels in common: miek and nl
// www.miek.nl and www.bla.nl have one label in common: nl
func CompareLabels(s1, s2 string) (n int) {
l1 := SplitLabels(s1)
l2 := SplitLabels(s2)
x1 := len(l1)-1
x2 := len(l2)-1
for {
if x1 < 0 || x2 < 0 {
break
}
if l1[x1] == l2[x2] {
n++
} else {
break
}
x1--
x2--
}
return
}