mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-21 23:28:44 +05:00
Updated DNSAgent
This commit is contained in:
committed by
Dan Christian Bogos
parent
dce8636c30
commit
ec539b5994
@@ -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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user