Adding search/replace regexp rules for FreeSWITCH extra fields

This commit is contained in:
DanB
2014-03-15 19:17:40 +01:00
parent 47700a924f
commit db433a760f
2 changed files with 24 additions and 6 deletions

View File

@@ -116,10 +116,12 @@ func (fsCdr FSCdr) GetReqType() string {
func (fsCdr FSCdr) GetExtraFields() map[string]string {
extraFields := make(map[string]string, len(cfg.CDRSExtraFields))
for _, field := range cfg.CDRSExtraFields {
if extraValue, found := fsCdr.vars[field]; found {
extraFields[field] = extraValue
} else {
extraFields[field] = fsCdr.searchExtraField(field, fsCdr.body)
origFieldVal, foundInVars := fsCdr.vars[field.Id]
if !foundInVars {
origFieldVal = fsCdr.searchExtraField(field.Id, fsCdr.body)
}
if len(origFieldVal) != 0 { // Found a value, parse it
extraFields[field.Id] = field.ParseValue(origFieldVal)
}
}
return extraFields

View File

@@ -20,6 +20,7 @@ package cdrs
import (
"reflect"
"regexp"
"testing"
"time"
@@ -89,7 +90,7 @@ func TestCDRFields(t *testing.T) {
if fsCdr.GetDuration() != 4000000000 {
t.Error("Error parsing cdr: ", fsCdr)
}
cfg.CDRSExtraFields = []string{"sip_user_agent", "read_codec", "write_codec"}
cfg.CDRSExtraFields = []*utils.RSRField{&utils.RSRField{Id: "sip_user_agent"}, &utils.RSRField{Id: "read_codec"}, &utils.RSRField{Id: "write_codec"}}
extraFields := fsCdr.GetExtraFields()
if len(extraFields) != 3 {
t.Error("Error parsing extra fields: ", extraFields)
@@ -150,7 +151,7 @@ func TestSearchExtraFieldLast(t *testing.T) {
func TestSearchExtraField(t *testing.T) {
fsCdr, _ := new(FSCdr).New(body)
cfg.CDRSExtraFields = []string{"caller_id_name"}
cfg.CDRSExtraFields = []*utils.RSRField{&utils.RSRField{Id: "caller_id_name"}}
extraFields := fsCdr.GetExtraFields()
if len(extraFields) != 1 || extraFields["caller_id_name"] != "dan" {
t.Error("Error parsing extra fields: ", extraFields)
@@ -164,3 +165,18 @@ func TestSearchExtraFieldInSlice(t *testing.T) {
t.Error("Error finding extra field: ", value)
}
}
func TestSearchReplaceInExtraFields(t *testing.T) {
cfg, _ = config.NewDefaultCGRConfig()
cfg.CDRSExtraFields = []*utils.RSRField{&utils.RSRField{Id: "read_codec"},
&utils.RSRField{Id: "sip_user_agent", RSRule: &utils.ReSearchReplace{regexp.MustCompile(`([A-Za-z]*).+`), "$1"}},
&utils.RSRField{Id: "write_codec"}}
fsCdr, _ := new(FSCdr).New(body)
extraFields := fsCdr.GetExtraFields()
if len(extraFields) != 3 {
t.Error("Error parsing extra fields: ", extraFields)
}
if extraFields["sip_user_agent"] != "Jitsi" {
t.Error("Error parsing extra fields: ", extraFields)
}
}