From 18da92b2006d9953af5c39eb825e4b0f9b397b72 Mon Sep 17 00:00:00 2001 From: Trial97 Date: Mon, 2 Nov 2020 12:22:29 +0200 Subject: [PATCH] Added cause field as a fallback for DisconnectCause in AsteriskAgent --- agents/asterisk_event.go | 21 +++++++++++++-------- agents/asterisk_event_test.go | 11 +++++++++++ 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/agents/asterisk_event.go b/agents/asterisk_event.go index 17934480c..a160dbc43 100644 --- a/agents/asterisk_event.go +++ b/agents/asterisk_event.go @@ -21,6 +21,7 @@ package agents import ( "fmt" "strings" + "time" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/sessions" @@ -29,10 +30,11 @@ import ( func NewSMAsteriskEvent(ariEv map[string]interface{}, asteriskIP, asteriskAlias string) *SMAsteriskEvent { smsmaEv := &SMAsteriskEvent{ - ariEv: ariEv, - asteriskIP: asteriskIP, - cachedFields: make(map[string]string), - opts: make(map[string]interface{}), + ariEv: ariEv, + asteriskIP: asteriskIP, + asteriskAlias: asteriskAlias, + cachedFields: make(map[string]string), + opts: make(map[string]interface{}), } smsmaEv.parseStasisArgs() // Populate appArgs return smsmaEv @@ -178,6 +180,9 @@ func (smaEv *SMAsteriskEvent) DisconnectCause() string { cachedVal, hasIt := smaEv.cachedFields[cachedKey] if !hasIt { cachedVal, _ = smaEv.ariEv["cause_txt"].(string) + if len(cachedVal) == 0 { + cachedVal = utils.IfaceAsString(smaEv.ariEv["cause"]) + } smaEv.cachedFields[cachedKey] = cachedVal } return cachedVal @@ -266,9 +271,9 @@ func (smaEv *SMAsteriskEvent) AsMapStringInterface() (mp map[string]interface{}) // AsCGREvent converts AsteriskEvent into CGREvent func (smaEv *SMAsteriskEvent) AsCGREvent(timezone string) (cgrEv *utils.CGREvent, err error) { - setupTime, err := utils.ParseTimeDetectLayout( - smaEv.Timestamp(), timezone) - if err != nil { + var setupTime time.Time + if setupTime, err = utils.ParseTimeDetectLayout( + smaEv.Timestamp(), timezone); err != nil { return } cgrEv = &utils.CGREvent{ @@ -278,7 +283,7 @@ func (smaEv *SMAsteriskEvent) AsCGREvent(timezone string) (cgrEv *utils.CGREvent Time: &setupTime, Event: smaEv.AsMapStringInterface(), } - return cgrEv, nil + return } func (smaEv *SMAsteriskEvent) V1AuthorizeArgs() (args *sessions.V1AuthorizeArgs) { diff --git a/agents/asterisk_event_test.go b/agents/asterisk_event_test.go index 3b508f9ed..723e2fe4a 100644 --- a/agents/asterisk_event_test.go +++ b/agents/asterisk_event_test.go @@ -310,6 +310,17 @@ func TestSMAEventDisconnectCause(t *testing.T) { if smaEv.DisconnectCause() != "NORMAL_DISCONNECT" { t.Error("Received:", smaEv.DisconnectCause()) } + + ev = map[string]interface{}{"cause": 16} // Clear previous data + smaEv = NewSMAsteriskEvent(ev, "127.0.0.1", "") + if smaEv.DisconnectCause() != "16" { + t.Error("Received:", smaEv.DisconnectCause()) + } + ev = map[string]interface{}{"cause_txt": "NORMAL_DISCONNECT"} // Clear previous data + smaEv = NewSMAsteriskEvent(ev, "127.0.0.1", "") + if smaEv.DisconnectCause() != "NORMAL_DISCONNECT" { + t.Error("Received:", smaEv.DisconnectCause()) + } } func TestSMAEventExtraParameters(t *testing.T) {