diff --git a/agents/asterisk_event.go b/agents/asterisk_event.go index c0f8fdcbe..98e59ab70 100644 --- a/agents/asterisk_event.go +++ b/agents/asterisk_event.go @@ -291,10 +291,9 @@ func (smaEv *SMAsteriskEvent) V1AuthorizeArgs() (args *sessions.V1AuthorizeArgs) args.ProcessThresholds = strings.Index(smaEv.Subsystems(), utils.MetaThresholds) != -1 args.ProcessStats = strings.Index(smaEv.Subsystems(), utils.MetaStats) != -1 - args.ArgDispatcher = cgrEv.ConsumeArgDispatcher() - if strings.Index(smaEv.Subsystems(), utils.MetaDispatchers) != -1 && args.ArgDispatcher == nil { - args.ArgDispatcher = new(utils.ArgDispatcher) - } + cgrArgs := cgrEv.ConsumeArgs(strings.Index(smaEv.Subsystems(), utils.MetaDispatchers) != -1, true) + args.ArgDispatcher = cgrArgs.ArgDispatcher + args.Paginator = *cgrArgs.SupplierPaginator return } diff --git a/agents/diamagent.go b/agents/diamagent.go index ae6e5d0f1..f9a381e52 100644 --- a/agents/diamagent.go +++ b/agents/diamagent.go @@ -254,11 +254,6 @@ func (da *DiameterAgent) processRequest(reqProcessor *config.RequestProcessor, return } cgrEv := agReq.CGRRequest.AsCGREvent(agReq.tenant, utils.NestingSep) - argDisp := cgrEv.ConsumeArgDispatcher() - if reqProcessor.Flags.HasKey(utils.MetaDispatchers) && argDisp == nil { - argDisp = new(utils.ArgDispatcher) - } - supplierPaginator := cgrEv.ConsumeSupplierPaginator() var reqType string for _, typ := range []string{ utils.MetaDryRun, utils.MetaAuth, @@ -270,6 +265,7 @@ func (da *DiameterAgent) processRequest(reqProcessor *config.RequestProcessor, break } } + cgrArgs := cgrEv.ConsumeArgs(reqProcessor.Flags.HasKey(utils.MetaDispatchers), reqType == utils.MetaAuth || reqType == utils.MetaEvent) if reqProcessor.Flags.HasKey(utils.MetaLog) { utils.Logger.Info( fmt.Sprintf("<%s> LOG, processorID: %s, diameter message: %s", @@ -293,7 +289,7 @@ func (da *DiameterAgent) processRequest(reqProcessor *config.RequestProcessor, reqProcessor.Flags.HasKey(utils.MetaSuppliers), reqProcessor.Flags.HasKey(utils.MetaSuppliersIgnoreErrors), reqProcessor.Flags.HasKey(utils.MetaSuppliersEventCost), - *cgrEv, argDisp, supplierPaginator) + *cgrEv, cgrArgs.ArgDispatcher, *cgrArgs.SupplierPaginator) var authReply sessions.V1AuthorizeReply err = da.sS.Call(utils.SessionSv1AuthorizeEvent, authArgs, &authReply) @@ -307,7 +303,7 @@ func (da *DiameterAgent) processRequest(reqProcessor *config.RequestProcessor, reqProcessor.Flags.HasKey(utils.MetaAccounts), reqProcessor.Flags.HasKey(utils.MetaThresholds), reqProcessor.Flags.HasKey(utils.MetaStats), - *cgrEv, argDisp) + *cgrEv, cgrArgs.ArgDispatcher) var initReply sessions.V1InitSessionReply err = da.sS.Call(utils.SessionSv1InitiateSession, initArgs, &initReply) @@ -318,7 +314,7 @@ func (da *DiameterAgent) processRequest(reqProcessor *config.RequestProcessor, updateArgs := sessions.NewV1UpdateSessionArgs( reqProcessor.Flags.HasKey(utils.MetaAttributes), reqProcessor.Flags.HasKey(utils.MetaAccounts), - *cgrEv, argDisp) + *cgrEv, cgrArgs.ArgDispatcher) var updateReply sessions.V1UpdateSessionReply err = da.sS.Call(utils.SessionSv1UpdateSession, updateArgs, &updateReply) @@ -331,7 +327,7 @@ func (da *DiameterAgent) processRequest(reqProcessor *config.RequestProcessor, reqProcessor.Flags.HasKey(utils.MetaResources), reqProcessor.Flags.HasKey(utils.MetaThresholds), reqProcessor.Flags.HasKey(utils.MetaStats), - *cgrEv, argDisp) + *cgrEv, cgrArgs.ArgDispatcher) var tRply string err = da.sS.Call(utils.SessionSv1TerminateSession, terminateArgs, &tRply) @@ -348,7 +344,7 @@ func (da *DiameterAgent) processRequest(reqProcessor *config.RequestProcessor, reqProcessor.Flags.HasKey(utils.MetaSuppliers), reqProcessor.Flags.HasKey(utils.MetaSuppliersIgnoreErrors), reqProcessor.Flags.HasKey(utils.MetaSuppliersEventCost), - *cgrEv, argDisp, supplierPaginator) + *cgrEv, cgrArgs.ArgDispatcher, *cgrArgs.SupplierPaginator) var eventRply sessions.V1ProcessEventReply err = da.sS.Call(utils.SessionSv1ProcessEvent, evArgs, &eventRply) @@ -368,7 +364,7 @@ func (da *DiameterAgent) processRequest(reqProcessor *config.RequestProcessor, var rplyCDRs string if err = da.sS.Call(utils.SessionSv1ProcessCDR, &utils.CGREventWithArgDispatcher{CGREvent: cgrEv, - ArgDispatcher: argDisp}, &rplyCDRs); err != nil { + ArgDispatcher: cgrArgs.ArgDispatcher}, &rplyCDRs); err != nil { agReq.CGRReply.Set([]string{utils.Error}, err.Error(), false, false) } } diff --git a/agents/dnsagent.go b/agents/dnsagent.go index d39404dbc..b47c73124 100644 --- a/agents/dnsagent.go +++ b/agents/dnsagent.go @@ -154,8 +154,6 @@ func (da *DNSAgent) processRequest(reqProcessor *config.RequestProcessor, return } cgrEv := agReq.CGRRequest.AsCGREvent(agReq.tenant, utils.NestingSep) - argDisp := cgrEv.ConsumeArgDispatcher() - supplierPaginator := cgrEv.ConsumeSupplierPaginator() var reqType string for _, typ := range []string{ utils.MetaDryRun, utils.MetaAuth, @@ -167,6 +165,7 @@ func (da *DNSAgent) processRequest(reqProcessor *config.RequestProcessor, break } } + cgrArgs := cgrEv.ConsumeArgs(reqProcessor.Flags.HasKey(utils.MetaDispatchers), reqType == utils.MetaAuth || reqType == utils.MetaEvent) if reqProcessor.Flags.HasKey(utils.MetaLog) { utils.Logger.Info( fmt.Sprintf("<%s> LOG, processorID: <%s>, message: %s", @@ -190,7 +189,7 @@ func (da *DNSAgent) processRequest(reqProcessor *config.RequestProcessor, reqProcessor.Flags.HasKey(utils.MetaSuppliers), reqProcessor.Flags.HasKey(utils.MetaSuppliersIgnoreErrors), reqProcessor.Flags.HasKey(utils.MetaSuppliersEventCost), - *cgrEv, argDisp, supplierPaginator) + *cgrEv, cgrArgs.ArgDispatcher, *cgrArgs.SupplierPaginator) var authReply sessions.V1AuthorizeReply err = da.sS.Call(utils.SessionSv1AuthorizeEvent, authArgs, &authReply) @@ -204,7 +203,7 @@ func (da *DNSAgent) processRequest(reqProcessor *config.RequestProcessor, reqProcessor.Flags.HasKey(utils.MetaAccounts), reqProcessor.Flags.HasKey(utils.MetaThresholds), reqProcessor.Flags.HasKey(utils.MetaStats), - *cgrEv, argDisp) + *cgrEv, cgrArgs.ArgDispatcher) var initReply sessions.V1InitSessionReply err = da.sS.Call(utils.SessionSv1InitiateSession, initArgs, &initReply) @@ -215,7 +214,7 @@ func (da *DNSAgent) processRequest(reqProcessor *config.RequestProcessor, updateArgs := sessions.NewV1UpdateSessionArgs( reqProcessor.Flags.HasKey(utils.MetaAttributes), reqProcessor.Flags.HasKey(utils.MetaAccounts), - *cgrEv, argDisp) + *cgrEv, cgrArgs.ArgDispatcher) var updateReply sessions.V1UpdateSessionReply err = da.sS.Call(utils.SessionSv1UpdateSession, updateArgs, &updateReply) @@ -228,7 +227,7 @@ func (da *DNSAgent) processRequest(reqProcessor *config.RequestProcessor, reqProcessor.Flags.HasKey(utils.MetaResources), reqProcessor.Flags.HasKey(utils.MetaThresholds), reqProcessor.Flags.HasKey(utils.MetaStats), - *cgrEv, argDisp) + *cgrEv, cgrArgs.ArgDispatcher) var tRply string err = da.sS.Call(utils.SessionSv1TerminateSession, terminateArgs, &tRply) @@ -245,7 +244,7 @@ func (da *DNSAgent) processRequest(reqProcessor *config.RequestProcessor, reqProcessor.Flags.HasKey(utils.MetaSuppliers), reqProcessor.Flags.HasKey(utils.MetaSuppliersIgnoreErrors), reqProcessor.Flags.HasKey(utils.MetaSuppliersEventCost), - *cgrEv, argDisp, supplierPaginator) + *cgrEv, cgrArgs.ArgDispatcher, *cgrArgs.SupplierPaginator) var eventRply sessions.V1ProcessEventReply err = da.sS.Call(utils.SessionSv1ProcessEvent, evArgs, &eventRply) @@ -265,7 +264,7 @@ func (da *DNSAgent) processRequest(reqProcessor *config.RequestProcessor, var rplyCDRs string if err = da.sS.Call(utils.SessionSv1ProcessCDR, &utils.CGREventWithArgDispatcher{CGREvent: cgrEv, - ArgDispatcher: argDisp}, &rplyCDRs); err != nil { + ArgDispatcher: cgrArgs.ArgDispatcher}, &rplyCDRs); err != nil { agReq.CGRReply.Set([]string{utils.Error}, err.Error(), false, false) } } diff --git a/agents/fsagent.go b/agents/fsagent.go index d0094676e..cf5d8e88d 100644 --- a/agents/fsagent.go +++ b/agents/fsagent.go @@ -269,12 +269,9 @@ func (sm *FSsessions) onChannelHangupComplete(fsev FSEvent, connId string) { if err != nil { return } - argsDisp := cgrEv.ConsumeArgDispatcher() - if strings.Index(fsev[VarCGRSubsystems], utils.MetaDispatchers) != -1 && argsDisp == nil { - argsDisp = new(utils.ArgDispatcher) - } + cgrArgs := cgrEv.ConsumeArgs(strings.Index(fsev[VarCGRSubsystems], utils.MetaDispatchers) != -1, false) if err := sm.sS.Call(utils.SessionSv1ProcessCDR, - &utils.CGREventWithArgDispatcher{CGREvent: cgrEv, ArgDispatcher: argsDisp}, &reply); err != nil { + &utils.CGREventWithArgDispatcher{CGREvent: cgrEv, ArgDispatcher: cgrArgs.ArgDispatcher}, &reply); err != nil { utils.Logger.Err(fmt.Sprintf("<%s> Failed processing CGREvent: %s, error: <%s>", utils.FreeSWITCHAgent, utils.ToJSON(cgrEv), err.Error())) } diff --git a/agents/fsevent.go b/agents/fsevent.go index cef0d466e..f8b7e1209 100644 --- a/agents/fsevent.go +++ b/agents/fsevent.go @@ -424,10 +424,9 @@ func (fsev FSEvent) V1AuthorizeArgs() (args *sessions.V1AuthorizeArgs) { args.GetAttributes = strings.Index(subsystems, utils.MetaAttributes) != -1 args.ProcessThresholds = strings.Index(subsystems, utils.MetaThresholds) != -1 args.ProcessStats = strings.Index(subsystems, utils.MetaStats) != -1 - args.ArgDispatcher = cgrEv.ConsumeArgDispatcher() - if strings.Index(subsystems, utils.MetaDispatchers) != -1 && args.ArgDispatcher == nil { - args.ArgDispatcher = new(utils.ArgDispatcher) - } + cgrArgs := cgrEv.ConsumeArgs(strings.Index(subsystems, utils.MetaDispatchers) != -1, true) + args.ArgDispatcher = cgrArgs.ArgDispatcher + args.Paginator = *cgrArgs.SupplierPaginator return } @@ -450,10 +449,8 @@ func (fsev FSEvent) V1InitSessionArgs() (args *sessions.V1InitSessionArgs) { args.GetAttributes = strings.Index(subsystems, utils.MetaAttributes) != -1 args.ProcessThresholds = strings.Index(subsystems, utils.MetaThresholds) != -1 args.ProcessStats = strings.Index(subsystems, utils.MetaStats) != -1 - args.ArgDispatcher = cgrEv.ConsumeArgDispatcher() - if strings.Index(subsystems, utils.MetaDispatchers) != -1 && args.ArgDispatcher == nil { - args.ArgDispatcher = new(utils.ArgDispatcher) - } + cgrArgs := cgrEv.ConsumeArgs(strings.Index(subsystems, utils.MetaDispatchers) != -1, false) + args.ArgDispatcher = cgrArgs.ArgDispatcher return } @@ -475,10 +472,8 @@ func (fsev FSEvent) V1TerminateSessionArgs() (args *sessions.V1TerminateSessionA args.ReleaseResources = strings.Index(subsystems, utils.MetaResources) != -1 args.ProcessThresholds = strings.Index(subsystems, utils.MetaThresholds) != -1 args.ProcessStats = strings.Index(subsystems, utils.MetaStats) != -1 - args.ArgDispatcher = cgrEv.ConsumeArgDispatcher() - if strings.Index(subsystems, utils.MetaDispatchers) != -1 && args.ArgDispatcher == nil { - args.ArgDispatcher = new(utils.ArgDispatcher) - } + cgrArgs := cgrEv.ConsumeArgs(strings.Index(subsystems, utils.MetaDispatchers) != -1, false) + args.ArgDispatcher = cgrArgs.ArgDispatcher return } diff --git a/agents/httpagent.go b/agents/httpagent.go index 8bbb6a05f..cc1a82768 100644 --- a/agents/httpagent.go +++ b/agents/httpagent.go @@ -104,11 +104,6 @@ func (ha *HTTPAgent) processRequest(reqProcessor *config.RequestProcessor, return } cgrEv := agReq.CGRRequest.AsCGREvent(agReq.tenant, utils.NestingSep) - argDisp := cgrEv.ConsumeArgDispatcher() - if reqProcessor.Flags.HasKey(utils.MetaDispatchers) && argDisp == nil { - argDisp = new(utils.ArgDispatcher) - } - suppliersPaginator := cgrEv.ConsumeSupplierPaginator() var reqType string for _, typ := range []string{ utils.MetaDryRun, utils.MetaAuth, @@ -120,6 +115,7 @@ func (ha *HTTPAgent) processRequest(reqProcessor *config.RequestProcessor, break } } + cgrArgs := cgrEv.ConsumeArgs(reqProcessor.Flags.HasKey(utils.MetaDispatchers), reqType == utils.MetaAuth || reqType == utils.MetaEvent) if reqProcessor.Flags.HasKey(utils.MetaLog) { utils.Logger.Info( fmt.Sprintf("<%s> LOG, processorID: %s, http message: %s", @@ -142,7 +138,7 @@ func (ha *HTTPAgent) processRequest(reqProcessor *config.RequestProcessor, reqProcessor.Flags.HasKey(utils.MetaSuppliers), reqProcessor.Flags.HasKey(utils.MetaSuppliersIgnoreErrors), reqProcessor.Flags.HasKey(utils.MetaSuppliersEventCost), - *cgrEv, argDisp, suppliersPaginator) + *cgrEv, cgrArgs.ArgDispatcher, *cgrArgs.SupplierPaginator) var authReply sessions.V1AuthorizeReply err = ha.sessionS.Call(utils.SessionSv1AuthorizeEvent, authArgs, &authReply) @@ -156,7 +152,7 @@ func (ha *HTTPAgent) processRequest(reqProcessor *config.RequestProcessor, reqProcessor.Flags.HasKey(utils.MetaAccounts), reqProcessor.Flags.HasKey(utils.MetaThresholds), reqProcessor.Flags.HasKey(utils.MetaStats), - *cgrEv, argDisp) + *cgrEv, cgrArgs.ArgDispatcher) var initReply sessions.V1InitSessionReply err = ha.sessionS.Call(utils.SessionSv1InitiateSession, initArgs, &initReply) @@ -167,7 +163,7 @@ func (ha *HTTPAgent) processRequest(reqProcessor *config.RequestProcessor, updateArgs := sessions.NewV1UpdateSessionArgs( reqProcessor.Flags.HasKey(utils.MetaAttributes), reqProcessor.Flags.HasKey(utils.MetaAccounts), - *cgrEv, argDisp) + *cgrEv, cgrArgs.ArgDispatcher) var updateReply sessions.V1UpdateSessionReply err = ha.sessionS.Call(utils.SessionSv1UpdateSession, updateArgs, &updateReply) @@ -180,7 +176,7 @@ func (ha *HTTPAgent) processRequest(reqProcessor *config.RequestProcessor, reqProcessor.Flags.HasKey(utils.MetaResources), reqProcessor.Flags.HasKey(utils.MetaThresholds), reqProcessor.Flags.HasKey(utils.MetaStats), - *cgrEv, argDisp) + *cgrEv, cgrArgs.ArgDispatcher) var tRply string err = ha.sessionS.Call(utils.SessionSv1TerminateSession, terminateArgs, &tRply) @@ -197,7 +193,7 @@ func (ha *HTTPAgent) processRequest(reqProcessor *config.RequestProcessor, reqProcessor.Flags.HasKey(utils.MetaSuppliers), reqProcessor.Flags.HasKey(utils.MetaSuppliersIgnoreErrors), reqProcessor.Flags.HasKey(utils.MetaSuppliersEventCost), - *cgrEv, argDisp, suppliersPaginator) + *cgrEv, cgrArgs.ArgDispatcher, *cgrArgs.SupplierPaginator) var eventRply sessions.V1ProcessEventReply err = ha.sessionS.Call(utils.SessionSv1ProcessEvent, evArgs, &eventRply) @@ -216,7 +212,7 @@ func (ha *HTTPAgent) processRequest(reqProcessor *config.RequestProcessor, !reqProcessor.Flags.HasKey(utils.MetaDryRun) { var rplyCDRs string if err = ha.sessionS.Call(utils.SessionSv1ProcessCDR, - &utils.CGREventWithArgDispatcher{CGREvent: cgrEv, ArgDispatcher: argDisp}, &rplyCDRs); err != nil { + &utils.CGREventWithArgDispatcher{CGREvent: cgrEv, ArgDispatcher: cgrArgs.ArgDispatcher}, &rplyCDRs); err != nil { agReq.CGRReply.Set([]string{utils.Error}, err.Error(), false, false) } } diff --git a/agents/kamagent.go b/agents/kamagent.go index 6201721a8..5d535a2ec 100644 --- a/agents/kamagent.go +++ b/agents/kamagent.go @@ -210,12 +210,9 @@ func (ka *KamailioAgent) onCallEnd(evData []byte, connID string) { return } cgrEv.Event[utils.OriginHost] = ka.conns[connID].RemoteAddr().String() - argsDisp := cgrEv.ConsumeArgDispatcher() - if strings.Index(kev[utils.CGRSubsystems], utils.MetaDispatchers) != -1 && argsDisp == nil { - argsDisp = new(utils.ArgDispatcher) - } + cgrArgs := cgrEv.ConsumeArgs(strings.Index(kev[utils.CGRSubsystems], utils.MetaDispatchers) != -1, false) if err := ka.sessionS.Call(utils.SessionSv1ProcessCDR, - &utils.CGREventWithArgDispatcher{CGREvent: cgrEv, ArgDispatcher: argsDisp}, &reply); err != nil { + &utils.CGREventWithArgDispatcher{CGREvent: cgrEv, ArgDispatcher: cgrArgs.ArgDispatcher}, &reply); err != nil { utils.Logger.Err(fmt.Sprintf("%s> failed processing CGREvent: %s, error: %s", utils.KamailioAgent, utils.ToJSON(cgrEv), err.Error())) } diff --git a/agents/kamevent.go b/agents/kamevent.go index 0c1e3fdfb..30832fd42 100644 --- a/agents/kamevent.go +++ b/agents/kamevent.go @@ -191,10 +191,9 @@ func (kev KamEvent) V1AuthorizeArgs() (args *sessions.V1AuthorizeArgs) { args.GetAttributes = strings.Index(subsystems, utils.MetaAttributes) != -1 args.ProcessThresholds = strings.Index(subsystems, utils.MetaThresholds) != -1 args.ProcessStats = strings.Index(subsystems, utils.MetaStats) != -1 - args.ArgDispatcher = cgrEv.ConsumeArgDispatcher() - if strings.Index(subsystems, utils.MetaDispatchers) != -1 && args.ArgDispatcher == nil { - args.ArgDispatcher = new(utils.ArgDispatcher) - } + cgrArgs := cgrEv.ConsumeArgs(strings.Index(subsystems, utils.MetaDispatchers) != -1, true) + args.ArgDispatcher = cgrArgs.ArgDispatcher + args.Paginator = *cgrArgs.SupplierPaginator return } @@ -258,10 +257,8 @@ func (kev KamEvent) V1InitSessionArgs() (args *sessions.V1InitSessionArgs) { args.GetAttributes = strings.Index(subsystems, utils.MetaAttributes) != -1 args.ProcessThresholds = strings.Index(subsystems, utils.MetaThresholds) != -1 args.ProcessStats = strings.Index(subsystems, utils.MetaStats) != -1 - args.ArgDispatcher = cgrEv.ConsumeArgDispatcher() - if strings.Index(subsystems, utils.MetaDispatchers) != -1 && args.ArgDispatcher == nil { - args.ArgDispatcher = new(utils.ArgDispatcher) - } + cgrArgs := cgrEv.ConsumeArgs(strings.Index(subsystems, utils.MetaDispatchers) != -1, false) + args.ArgDispatcher = cgrArgs.ArgDispatcher return } @@ -283,10 +280,8 @@ func (kev KamEvent) V1TerminateSessionArgs() (args *sessions.V1TerminateSessionA args.ReleaseResources = strings.Index(subsystems, utils.MetaResources) != -1 args.ProcessThresholds = strings.Index(subsystems, utils.MetaThresholds) != -1 args.ProcessStats = strings.Index(subsystems, utils.MetaStats) != -1 - args.ArgDispatcher = cgrEv.ConsumeArgDispatcher() - if strings.Index(subsystems, utils.MetaDispatchers) != -1 && args.ArgDispatcher == nil { - args.ArgDispatcher = new(utils.ArgDispatcher) - } + cgrArgs := cgrEv.ConsumeArgs(strings.Index(subsystems, utils.MetaDispatchers) != -1, false) + args.ArgDispatcher = cgrArgs.ArgDispatcher return } diff --git a/agents/radagent.go b/agents/radagent.go index a3f37bc70..b375b4d32 100644 --- a/agents/radagent.go +++ b/agents/radagent.go @@ -148,11 +148,6 @@ func (ra *RadiusAgent) processRequest(reqProcessor *config.RequestProcessor, return } cgrEv := agReq.CGRRequest.AsCGREvent(agReq.tenant, utils.NestingSep) - argDisp := cgrEv.ConsumeArgDispatcher() - if reqProcessor.Flags.HasKey(utils.MetaDispatchers) && argDisp == nil { - argDisp = new(utils.ArgDispatcher) - } - suppliersPaginator := cgrEv.ConsumeSupplierPaginator() var reqType string for _, typ := range []string{ utils.MetaDryRun, utils.MetaAuth, @@ -164,6 +159,7 @@ func (ra *RadiusAgent) processRequest(reqProcessor *config.RequestProcessor, break } } + cgrArgs := cgrEv.ConsumeArgs(reqProcessor.Flags.HasKey(utils.MetaDispatchers), reqType == utils.MetaAuth || reqType == utils.MetaEvent) if reqProcessor.Flags.HasKey(utils.MetaLog) { utils.Logger.Info( fmt.Sprintf("<%s> LOG, processorID: %s, radius message: %s", @@ -186,7 +182,7 @@ func (ra *RadiusAgent) processRequest(reqProcessor *config.RequestProcessor, reqProcessor.Flags.HasKey(utils.MetaSuppliers), reqProcessor.Flags.HasKey(utils.MetaSuppliersIgnoreErrors), reqProcessor.Flags.HasKey(utils.MetaSuppliersEventCost), - *cgrEv, argDisp, suppliersPaginator) + *cgrEv, cgrArgs.ArgDispatcher, *cgrArgs.SupplierPaginator) var authReply sessions.V1AuthorizeReply err = ra.sessionS.Call(utils.SessionSv1AuthorizeEvent, authArgs, &authReply) @@ -200,7 +196,7 @@ func (ra *RadiusAgent) processRequest(reqProcessor *config.RequestProcessor, reqProcessor.Flags.HasKey(utils.MetaAccounts), reqProcessor.Flags.HasKey(utils.MetaThresholds), reqProcessor.Flags.HasKey(utils.MetaStats), - *cgrEv, argDisp) + *cgrEv, cgrArgs.ArgDispatcher) var initReply sessions.V1InitSessionReply err = ra.sessionS.Call(utils.SessionSv1InitiateSession, initArgs, &initReply) @@ -211,7 +207,7 @@ func (ra *RadiusAgent) processRequest(reqProcessor *config.RequestProcessor, updateArgs := sessions.NewV1UpdateSessionArgs( reqProcessor.Flags.HasKey(utils.MetaAttributes), reqProcessor.Flags.HasKey(utils.MetaAccounts), - *cgrEv, argDisp) + *cgrEv, cgrArgs.ArgDispatcher) var updateReply sessions.V1UpdateSessionReply err = ra.sessionS.Call(utils.SessionSv1UpdateSession, updateArgs, &updateReply) @@ -224,7 +220,7 @@ func (ra *RadiusAgent) processRequest(reqProcessor *config.RequestProcessor, reqProcessor.Flags.HasKey(utils.MetaResources), reqProcessor.Flags.HasKey(utils.MetaThresholds), reqProcessor.Flags.HasKey(utils.MetaStats), - *cgrEv, argDisp) + *cgrEv, cgrArgs.ArgDispatcher) var tRply string err = ra.sessionS.Call(utils.SessionSv1TerminateSession, terminateArgs, &tRply) @@ -241,7 +237,7 @@ func (ra *RadiusAgent) processRequest(reqProcessor *config.RequestProcessor, reqProcessor.Flags.HasKey(utils.MetaSuppliers), reqProcessor.Flags.HasKey(utils.MetaSuppliersIgnoreErrors), reqProcessor.Flags.HasKey(utils.MetaSuppliersEventCost), - *cgrEv, argDisp, suppliersPaginator) + *cgrEv, cgrArgs.ArgDispatcher, *cgrArgs.SupplierPaginator) var eventRply sessions.V1ProcessEventReply err = ra.sessionS.Call(utils.SessionSv1ProcessEvent, evArgs, &eventRply) @@ -259,7 +255,7 @@ func (ra *RadiusAgent) processRequest(reqProcessor *config.RequestProcessor, if reqProcessor.Flags.HasKey(utils.MetaCDRs) { var rplyCDRs string if err = ra.sessionS.Call(utils.SessionSv1ProcessCDR, - &utils.CGREventWithArgDispatcher{CGREvent: cgrEv, ArgDispatcher: argDisp}, &rplyCDRs); err != nil { + &utils.CGREventWithArgDispatcher{CGREvent: cgrEv, ArgDispatcher: cgrArgs.ArgDispatcher}, &rplyCDRs); err != nil { agReq.CGRReply.Set([]string{utils.Error}, err.Error(), false, false) } } diff --git a/sessions/sessions_test.go b/sessions/sessions_test.go index 68a5f96a0..1aa6e75d9 100644 --- a/sessions/sessions_test.go +++ b/sessions/sessions_test.go @@ -1262,8 +1262,8 @@ func TestSessionSNewV1AuthorizeArgsWithArgDispatcher(t *testing.T) { RouteID: utils.StringPointer("testrouteid"), }, } - argDisp := cgrEv.ConsumeArgDispatcher() - rply := NewV1AuthorizeArgs(true, true, false, false, false, false, false, false, cgrEv, argDisp, utils.Paginator{}) + cgrArgs := cgrEv.ConsumeArgs(true, true) + rply := NewV1AuthorizeArgs(true, true, false, false, false, false, false, false, cgrEv, cgrArgs.ArgDispatcher, *cgrArgs.SupplierPaginator) if !reflect.DeepEqual(expected, rply) { t.Errorf("Expecting %+v, received: %+v", utils.ToJSON(expected), utils.ToJSON(rply)) } @@ -1282,7 +1282,7 @@ func TestSessionSNewV1AuthorizeArgsWithArgDispatcher(t *testing.T) { RouteID: utils.StringPointer("testrouteid"), }, } - rply = NewV1AuthorizeArgs(true, false, true, false, true, false, true, true, cgrEv, argDisp, utils.Paginator{}) + rply = NewV1AuthorizeArgs(true, false, true, false, true, false, true, true, cgrEv, cgrArgs.ArgDispatcher, *cgrArgs.SupplierPaginator) if !reflect.DeepEqual(expected, rply) { t.Errorf("Expecting %+v, received: %+v", utils.ToJSON(expected), utils.ToJSON(rply)) } @@ -1306,8 +1306,8 @@ func TestSessionSNewV1AuthorizeArgsWithArgDispatcher2(t *testing.T) { RouteID: utils.StringPointer("testrouteid"), }, } - argDisp := cgrEv.ConsumeArgDispatcher() - rply := NewV1AuthorizeArgs(true, true, false, false, false, false, false, false, cgrEv, argDisp, utils.Paginator{}) + cgrArgs := cgrEv.ConsumeArgs(true, true) + rply := NewV1AuthorizeArgs(true, true, false, false, false, false, false, false, cgrEv, cgrArgs.ArgDispatcher, *cgrArgs.SupplierPaginator) if !reflect.DeepEqual(expected, rply) { t.Errorf("Expecting %+v, received: %+v", utils.ToJSON(expected), utils.ToJSON(rply)) } @@ -1325,7 +1325,7 @@ func TestSessionSNewV1AuthorizeArgsWithArgDispatcher2(t *testing.T) { RouteID: utils.StringPointer("testrouteid"), }, } - rply = NewV1AuthorizeArgs(true, false, true, false, true, false, true, true, cgrEv, argDisp, utils.Paginator{}) + rply = NewV1AuthorizeArgs(true, false, true, false, true, false, true, true, cgrEv, cgrArgs.ArgDispatcher, *cgrArgs.SupplierPaginator) if !reflect.DeepEqual(expected, rply) { t.Errorf("Expecting %+v, received: %+v", utils.ToJSON(expected), utils.ToJSON(rply)) } diff --git a/utils/cgrevent.go b/utils/cgrevent.go index 7a8160c89..ad34e9bc2 100644 --- a/utils/cgrevent.go +++ b/utils/cgrevent.go @@ -138,7 +138,7 @@ func (ev *CGREvent) RemFldsWithPrefix(prfx string) { } // RemFldsWithPrefix will remove fields starting with prefix from event -func (ev *CGREvent) ConsumeArgDispatcher() (arg *ArgDispatcher) { +func (ev *CGREvent) consumeArgDispatcher() (arg *ArgDispatcher) { if ev == nil { return } @@ -166,7 +166,8 @@ func (ev *CGREvent) ConsumeArgDispatcher() (arg *ArgDispatcher) { } // ConsumeSupplierPaginator will consume supplierPaginator if presented -func (ev *CGREvent) ConsumeSupplierPaginator() (args Paginator) { +func (ev *CGREvent) consumeSupplierPaginator() (args *Paginator) { + args = new(Paginator) if ev == nil { return } @@ -179,7 +180,7 @@ func (ev *CGREvent) ConsumeSupplierPaginator() (args Paginator) { Logger.Err(err.Error()) return } - args = Paginator{ + args = &Paginator{ Limit: IntPointer(int(limit)), } } @@ -193,14 +194,31 @@ func (ev *CGREvent) ConsumeSupplierPaginator() (args Paginator) { return } if !hasSuppliersLimit { //in case we don't have limit, but we have offset we need to initialize the struct - args = Paginator{ + args = &Paginator{ Offset: IntPointer(int(offset)), } } else { args.Offset = IntPointer(int(offset)) } } + return +} +type ConsumeArgs struct { + ArgDispatcher *ArgDispatcher + SupplierPaginator *Paginator +} + +func (ev *CGREvent) ConsumeArgs(dispatcherFlag, consumeSupplierPaginator bool) (ca ConsumeArgs) { + ca = ConsumeArgs{ + ArgDispatcher: ev.consumeArgDispatcher(), + } + if dispatcherFlag && ca.ArgDispatcher == nil { + ca.ArgDispatcher = new(ArgDispatcher) + } + if consumeSupplierPaginator { + ca.SupplierPaginator = ev.consumeSupplierPaginator() + } return }