diff --git a/agents/dmtagent.go b/agents/dmtagent.go index c1d4dff5a..9aa43a31f 100644 --- a/agents/dmtagent.go +++ b/agents/dmtagent.go @@ -94,6 +94,9 @@ func (self DiameterAgent) processCCR(ccr *CCR, reqProcessor *config.DARequestPro utils.Logger.Err(fmt.Sprintf(" Processing message: %+v AsSMGenericEvent, error: %s", ccr.diamMessage, err)) return cca } + if len(reqProcessor.Flags) != 0 { + smgEv[utils.CGRFlags] = reqProcessor.Flags.String() // Populate CGRFlags automatically + } if reqProcessor.PublishEvent && self.pubsubs != nil { evt, err := smgEv.AsMapStringString() if err != nil { diff --git a/engine/responder.go b/engine/responder.go index ee6cc8843..a37c222f8 100644 --- a/engine/responder.go +++ b/engine/responder.go @@ -445,6 +445,7 @@ func (rs *Responder) GetSessionRuns(ev *CDR, sRuns *[]*SessionRun) error { }) return errors.New("Error parsing answer event end time") } + extraFields := ev.GetExtraFields() cd := &CallDescriptor{ CgrID: ev.GetCgrId(rs.Timezone), RunID: ev.RunID, @@ -457,7 +458,13 @@ func (rs *Responder) GetSessionRuns(ev *CDR, sRuns *[]*SessionRun) error { Destination: ev.GetDestination(dc.DestinationField), TimeStart: startTime, TimeEnd: endTime, - ExtraFields: ev.GetExtraFields()} + ExtraFields: extraFields} + if flagsStr, hasFlags := extraFields[utils.CGRFlags]; hasFlags { // Force duration from extra fields + flags := utils.StringMapFromSlice(strings.Split(flagsStr, utils.INFIELD_SEP)) + if _, hasFD := flags[utils.FlagForceDuration]; hasFD { + cd.ForceDuration = true + } + } sesRuns = append(sesRuns, &SessionRun{DerivedCharger: dc, CallDescriptor: cd}) } *sRuns = sesRuns diff --git a/utils/consts.go b/utils/consts.go index 904c177a4..579583ba8 100644 --- a/utils/consts.go +++ b/utils/consts.go @@ -229,6 +229,7 @@ const ( CGR_DISCONNECT_CAUSE = "cgr_disconnectcause" CGR_COMPUTELCR = "cgr_computelcr" CGR_SUPPLIERS = "cgr_suppliers" + CGRFlags = "cgr_flags" KAM_FLATSTORE = "kamailio_flatstore" OSIPS_FLATSTORE = "opensips_flatstore" MAX_DEBIT_CACHE_PREFIX = "MAX_DEBIT_" @@ -270,6 +271,7 @@ const ( CreatedAt = "CreatedAt" UpdatedAt = "UpdatedAt" HandlerArgSep = "|" + FlagForceDuration = "fd" ) var (