Updated DNSAgent

This commit is contained in:
Trial97
2021-09-29 17:55:57 +03:00
committed by Dan Christian Bogos
parent dce8636c30
commit ec539b5994
26 changed files with 1123 additions and 953 deletions

View File

@@ -696,6 +696,8 @@ const (
MetaSIPURIMethod = "*sipuri_method"
MetaSIPURIHost = "*sipuri_host"
MetaSIPURIUser = "*sipuri_user"
E164DomainConverter = "*e164Domain"
E164Converter = "*e164"
MetaReload = "*reload"
MetaLoad = "*load"
MetaFloat64 = "*float64"
@@ -713,7 +715,6 @@ const (
DNSAgent = "DNSAgent"
TLSNoCaps = "tls"
UsageID = "UsageID"
Rcode = "Rcode"
Replacement = "Replacement"
Regexp = "Regexp"
Order = "Order"
@@ -853,6 +854,26 @@ const (
BalanceIDs = "BalanceIDs"
MetaCostIncrement = "*costIncrement"
Length = "Length"
// dns
Rcode = "Rcode"
Id = "Id"
Response = "Response"
Opcode = "Opcode"
Authoritative = "Authoritative"
Truncated = "Truncated"
RecursionDesired = "RecursionDesired"
RecursionAvailable = "RecursionAvailable"
Zero = "Zero"
AuthenticatedData = "AuthenticatedData"
CheckingDisabled = "CheckingDisabled"
Question = "Question"
Answer = "Answer"
Ns = "Ns"
Extra = "Extra"
Name = "Name"
Qtype = "Qtype"
Qclass = "Qclass"
)
// Migrator Action

View File

@@ -21,6 +21,7 @@ package utils
import (
"encoding/hex"
"encoding/json"
"errors"
"fmt"
"math/rand"
"net"
@@ -94,6 +95,10 @@ func NewDataConverter(params string) (conv DataConverter, err error) {
return new(SliceConverter), nil
case params == MetaFloat64:
return new(Float64Converter), nil
case params == E164DomainConverter:
return new(e164DomainConverter), nil
case params == E164Converter:
return new(e164Converter), nil
case strings.HasPrefix(params, MetaLibPhoneNumber):
if len(params) == len(MetaLibPhoneNumber) {
return NewPhoneNumberConverter(EmptyString)
@@ -547,3 +552,27 @@ type Float64Converter struct{}
func (Float64Converter) Convert(in interface{}) (interface{}, error) {
return IfaceAsFloat64(in)
}
// e164DomainConverter extracts the domain part out of a NAPTR name record
type e164DomainConverter struct{}
func (e164DomainConverter) Convert(in interface{}) (interface{}, error) {
name := IfaceAsString(in)
if i := strings.Index(name, ".e164."); i != -1 {
name = name[i:]
}
return strings.Trim(name, "."), nil
}
// e164Converter extracts the E164 address out of a NAPTR name record
type e164Converter struct{}
func (e164Converter) Convert(in interface{}) (interface{}, error) {
name := IfaceAsString(in)
i := strings.Index(name, ".e164.")
if i == -1 {
return nil, errors.New("unknown format")
}
return ReverseString(
strings.Replace(name[:i], ".", "", -1)), nil
}

View File

@@ -1181,3 +1181,45 @@ func TestSliceConverter(t *testing.T) {
t.Errorf("Expecting: %+v, received: %+v", expected, rcv)
}
}
func TestE164FromNAPTRConverter(t *testing.T) {
exp := new(e164Converter)
cnv, err := NewDataConverter(E164Converter)
if err != nil {
t.Fatal(err)
}
if !reflect.DeepEqual(exp, cnv) {
t.Errorf("Expecting: %+v, received: %+v", exp, cnv)
}
if e164, err := cnv.Convert("8.7.6.5.4.3.2.1.0.1.6.e164.arpa."); err != nil {
t.Error(err)
} else if e164 != "61012345678" {
t.Errorf("received: <%s>", e164)
}
}
func TestDomainNameFromNAPTRConverter(t *testing.T) {
exp := new(e164DomainConverter)
cnv, err := NewDataConverter(E164DomainConverter)
if err != nil {
t.Fatal(err)
}
if !reflect.DeepEqual(exp, cnv) {
t.Errorf("Expecting: %+v, received: %+v", exp, cnv)
}
if dName, err := cnv.Convert("8.7.6.5.4.3.2.1.0.1.6.e164.arpa."); err != nil {
t.Fatal(err)
} else if dName != "e164.arpa" {
t.Errorf("received: <%s>", dName)
}
if dName, err := cnv.Convert("8.7.6.5.4.3.2.1.0.1.6.e164.itsyscom.com."); err != nil {
t.Fatal(err)
} else if dName != "e164.itsyscom.com" {
t.Errorf("received: <%s>", dName)
}
if dName, err := cnv.Convert("8.7.6.5.4.3.2.1.0.1.6.itsyscom.com."); err != nil {
t.Fatal(err)
} else if dName != "8.7.6.5.4.3.2.1.0.1.6.itsyscom.com" {
t.Errorf("received: <%s>", dName)
}
}