From 7032bea919d3bb8f5e253eb8baf2a816d0f6aab8 Mon Sep 17 00:00:00 2001 From: DanB Date: Tue, 12 Dec 2017 12:38:58 +0100 Subject: [PATCH] CallDescriptor.UpdateFromCGREvent --- engine/calldesc.go | 51 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/engine/calldesc.go b/engine/calldesc.go index 74acb0fc3..eae5080ad 100755 --- a/engine/calldesc.go +++ b/engine/calldesc.go @@ -184,6 +184,57 @@ func (cd *CallDescriptor) AsCGREvent() *utils.CGREvent { return cgrEv } +// UpdateFromCGREvent will update CallDescriptor with fields from CGREvent +// cgrEv contains both fields and their values +// fields represent fields needing update +func (cd *CallDescriptor) UpdateFromCGREvent(cgrEv *utils.CGREvent, fields []string) (err error) { + for _, fldName := range fields { + switch fldName { + case utils.TOR: + if cd.TOR, err = cgrEv.FieldAsString(fldName); err != nil { + return + } + case utils.TENANT: + if cd.Tenant, err = cgrEv.FieldAsString(fldName); err != nil { + return + } + case utils.CATEGORY: + if cd.Category, err = cgrEv.FieldAsString(fldName); err != nil { + return + } + case utils.ACCOUNT: + if cd.Account, err = cgrEv.FieldAsString(fldName); err != nil { + return + } + case utils.SUBJECT: + if cd.Subject, err = cgrEv.FieldAsString(fldName); err != nil { + return + } + case utils.DESTINATION: + if cd.Destination, err = cgrEv.FieldAsString(fldName); err != nil { + return + } + case utils.ANSWER_TIME: + if cd.TimeStart, err = cgrEv.FieldAsTime(fldName, config.CgrConfig().DefaultTimezone); err != nil { + return + } + case utils.USAGE: + usage, err := cgrEv.FieldAsDuration(fldName) + if err != nil { + return err + } + cd.TimeEnd = cd.TimeStart.Add(usage) + default: + fldVal, err := cgrEv.FieldAsString(fldName) + if err != nil { + return err + } + cd.ExtraFields[fldName] = fldVal + } + } + return +} + func (cd *CallDescriptor) ValidateCallData() error { if cd.TimeStart.After(cd.TimeEnd) || cd.TimeStart.Equal(cd.TimeEnd) { return errors.New("TimeStart must be strctly before TimeEnd")