mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-11 18:16:24 +05:00
Added ArgDispatcher to all Calls to SessionS
This commit is contained in:
committed by
Dan Christian Bogos
parent
3862573adc
commit
3a3996b896
@@ -57,8 +57,11 @@ const (
|
||||
|
||||
func NewAsteriskAgent(cgrCfg *config.CGRConfig, astConnIdx int,
|
||||
smgConn *utils.BiRPCInternalClient) (*AsteriskAgent, error) {
|
||||
sma := &AsteriskAgent{cgrCfg: cgrCfg, smg: smgConn,
|
||||
eventsCache: make(map[string]*utils.CGREvent)}
|
||||
sma := &AsteriskAgent{
|
||||
cgrCfg: cgrCfg,
|
||||
smg: smgConn,
|
||||
eventsCache: make(map[string]*utils.CGREventWithArgDispatcher),
|
||||
}
|
||||
sma.smg.SetClientConn(sma) // pass the connection to SMA back into smg so we can receive the disconnects
|
||||
return sma, nil
|
||||
}
|
||||
@@ -70,8 +73,8 @@ type AsteriskAgent struct {
|
||||
astConn *aringo.ARInGO
|
||||
astEvChan chan map[string]interface{}
|
||||
astErrChan chan error
|
||||
eventsCache map[string]*utils.CGREvent // used to gather information about events during various phases
|
||||
evCacheMux sync.RWMutex // Protect eventsCache
|
||||
eventsCache map[string]*utils.CGREventWithArgDispatcher // used to gather information about events during various phases
|
||||
evCacheMux sync.RWMutex // Protect eventsCache
|
||||
}
|
||||
|
||||
func (sma *AsteriskAgent) connectAsterisk() (err error) {
|
||||
@@ -226,7 +229,10 @@ func (sma *AsteriskAgent) handleStasisStart(ev *SMAsteriskEvent) {
|
||||
}
|
||||
// Done with processing event, cache it for later use
|
||||
sma.evCacheMux.Lock()
|
||||
sma.eventsCache[ev.ChannelID()] = &authArgs.CGREvent
|
||||
sma.eventsCache[ev.ChannelID()] = &utils.CGREventWithArgDispatcher{
|
||||
CGREvent: &authArgs.CGREvent,
|
||||
ArgDispatcher: authArgs.ArgDispatcher,
|
||||
}
|
||||
sma.evCacheMux.Unlock()
|
||||
}
|
||||
|
||||
@@ -236,13 +242,13 @@ func (sma *AsteriskAgent) handleChannelStateChange(ev *SMAsteriskEvent) {
|
||||
return
|
||||
}
|
||||
sma.evCacheMux.RLock()
|
||||
cgrEv, hasIt := sma.eventsCache[ev.ChannelID()]
|
||||
cgrEvDisp, hasIt := sma.eventsCache[ev.ChannelID()]
|
||||
sma.evCacheMux.RUnlock()
|
||||
if !hasIt { // Not handled by us
|
||||
return
|
||||
}
|
||||
sma.evCacheMux.Lock()
|
||||
err := ev.UpdateCGREvent(cgrEv) // Updates the event directly in the cache
|
||||
err := ev.UpdateCGREvent(cgrEvDisp.CGREvent) // Updates the event directly in the cache
|
||||
sma.evCacheMux.Unlock()
|
||||
if err != nil {
|
||||
sma.hangupChannel(ev.ChannelID(),
|
||||
@@ -251,7 +257,7 @@ func (sma *AsteriskAgent) handleChannelStateChange(ev *SMAsteriskEvent) {
|
||||
return
|
||||
}
|
||||
// populate init session args
|
||||
initSessionArgs := ev.V1InitSessionArgs(*cgrEv)
|
||||
initSessionArgs := ev.V1InitSessionArgs(*cgrEvDisp)
|
||||
if initSessionArgs == nil {
|
||||
utils.Logger.Err(fmt.Sprintf("<%s> event: %s cannot generate init session arguments",
|
||||
utils.AsteriskAgent, ev.ChannelID()))
|
||||
@@ -275,13 +281,13 @@ func (sma *AsteriskAgent) handleChannelStateChange(ev *SMAsteriskEvent) {
|
||||
// Channel disconnect
|
||||
func (sma *AsteriskAgent) handleChannelDestroyed(ev *SMAsteriskEvent) {
|
||||
sma.evCacheMux.RLock()
|
||||
cgrEv, hasIt := sma.eventsCache[ev.ChannelID()]
|
||||
cgrEvDisp, hasIt := sma.eventsCache[ev.ChannelID()]
|
||||
sma.evCacheMux.RUnlock()
|
||||
if !hasIt { // Not handled by us
|
||||
return
|
||||
}
|
||||
sma.evCacheMux.Lock()
|
||||
err := ev.UpdateCGREvent(cgrEv) // Updates the event directly in the cache
|
||||
err := ev.UpdateCGREvent(cgrEvDisp.CGREvent) // Updates the event directly in the cache
|
||||
sma.evCacheMux.Unlock()
|
||||
if err != nil {
|
||||
utils.Logger.Warning(
|
||||
@@ -290,7 +296,7 @@ func (sma *AsteriskAgent) handleChannelDestroyed(ev *SMAsteriskEvent) {
|
||||
return
|
||||
}
|
||||
// populate terminate session args
|
||||
tsArgs := ev.V1TerminateSessionArgs(*cgrEv)
|
||||
tsArgs := ev.V1TerminateSessionArgs(*cgrEvDisp)
|
||||
if tsArgs == nil {
|
||||
utils.Logger.Err(fmt.Sprintf("<%s> event: %s cannot generate terminate session arguments",
|
||||
utils.AsteriskAgent, ev.ChannelID()))
|
||||
@@ -305,7 +311,7 @@ func (sma *AsteriskAgent) handleChannelDestroyed(ev *SMAsteriskEvent) {
|
||||
}
|
||||
if sma.cgrCfg.AsteriskAgentCfg().CreateCDR {
|
||||
if err := sma.smg.Call(utils.SessionSv1ProcessCDR,
|
||||
&utils.CGREventWithArgDispatcher{CGREvent: cgrEv}, &reply); err != nil {
|
||||
cgrEvDisp, &reply); err != nil {
|
||||
utils.Logger.Err(fmt.Sprintf("<%s> Error: %s when attempting to process CDR for channelID: %s",
|
||||
utils.AsteriskAgent, err.Error(), ev.ChannelID()))
|
||||
}
|
||||
|
||||
@@ -290,36 +290,20 @@ func (smaEv *SMAsteriskEvent) V1AuthorizeArgs() (args *sessions.V1AuthorizeArgs)
|
||||
args.GetAttributes = strings.Index(smaEv.Subsystems(), utils.MetaAttributes) != -1
|
||||
args.ProcessThresholds = strings.Index(smaEv.Subsystems(), utils.MetaThresholds) != -1
|
||||
args.ProcessStats = strings.Index(smaEv.Subsystems(), utils.MetaStats) != -1
|
||||
//check if we have APIKey in event and in case it has add it in ArgDispatcher
|
||||
apiKeyIface, hasApiKey := cgrEv.Event[utils.MetaApiKey]
|
||||
if hasApiKey {
|
||||
args.ArgDispatcher = &utils.ArgDispatcher{
|
||||
APIKey: utils.StringPointer(apiKeyIface.(string)),
|
||||
}
|
||||
}
|
||||
//check if we have RouteID in event and in case it has add it in ArgDispatcher
|
||||
routeIDIface, hasRouteID := cgrEv.Event[utils.MetaRouteID]
|
||||
if hasRouteID {
|
||||
if !hasApiKey { //in case we don't have APIKey, but we have RouteID we need to initialize the struct
|
||||
args.ArgDispatcher = &utils.ArgDispatcher{
|
||||
RouteID: utils.StringPointer(routeIDIface.(string)),
|
||||
}
|
||||
} else {
|
||||
args.ArgDispatcher.RouteID = utils.StringPointer(routeIDIface.(string))
|
||||
}
|
||||
}
|
||||
|
||||
args.ArgDispatcher = cgrEv.ConsumeArgDispatcher()
|
||||
return
|
||||
}
|
||||
|
||||
func (smaEv *SMAsteriskEvent) V1InitSessionArgs(cgrEv utils.CGREvent) (args *sessions.V1InitSessionArgs) {
|
||||
func (smaEv *SMAsteriskEvent) V1InitSessionArgs(cgrEvDisp utils.CGREventWithArgDispatcher) (args *sessions.V1InitSessionArgs) {
|
||||
args = &sessions.V1InitSessionArgs{ // defaults
|
||||
InitSession: true,
|
||||
CGREvent: cgrEv,
|
||||
CGREvent: *cgrEvDisp.CGREvent,
|
||||
}
|
||||
subsystems, err := cgrEv.FieldAsString(utils.CGRSubsystems)
|
||||
subsystems, err := cgrEvDisp.CGREvent.FieldAsString(utils.CGRSubsystems)
|
||||
if err != nil {
|
||||
utils.Logger.Err(fmt.Sprintf("<%s> event: %s don't have cgr_subsystems variable",
|
||||
utils.AsteriskAgent, utils.ToJSON(cgrEv)))
|
||||
utils.AsteriskAgent, utils.ToJSON(cgrEvDisp.CGREvent)))
|
||||
return
|
||||
}
|
||||
args.InitSession = strings.Index(subsystems, utils.MetaAccounts) != -1
|
||||
@@ -327,59 +311,25 @@ func (smaEv *SMAsteriskEvent) V1InitSessionArgs(cgrEv utils.CGREvent) (args *ses
|
||||
args.GetAttributes = strings.Index(subsystems, utils.MetaAttributes) != -1
|
||||
args.ProcessThresholds = strings.Index(subsystems, utils.MetaThresholds) != -1
|
||||
args.ProcessStats = strings.Index(subsystems, utils.MetaStats) != -1
|
||||
//check if we have APIKey in event and in case it has add it in ArgDispatcher
|
||||
apiKeyIface, hasApiKey := cgrEv.Event[utils.MetaApiKey]
|
||||
if hasApiKey {
|
||||
args.ArgDispatcher = &utils.ArgDispatcher{
|
||||
APIKey: utils.StringPointer(apiKeyIface.(string)),
|
||||
}
|
||||
}
|
||||
//check if we have RouteID in event and in case it has add it in ArgDispatcher
|
||||
routeIDIface, hasRouteID := cgrEv.Event[utils.MetaRouteID]
|
||||
if hasRouteID {
|
||||
if !hasApiKey { //in case we don't have APIKey, but we have RouteID we need to initialize the struct
|
||||
args.ArgDispatcher = &utils.ArgDispatcher{
|
||||
RouteID: utils.StringPointer(routeIDIface.(string)),
|
||||
}
|
||||
} else {
|
||||
args.ArgDispatcher.RouteID = utils.StringPointer(routeIDIface.(string))
|
||||
}
|
||||
}
|
||||
args.ArgDispatcher = cgrEvDisp.ArgDispatcher
|
||||
return
|
||||
}
|
||||
|
||||
func (smaEv *SMAsteriskEvent) V1TerminateSessionArgs(cgrEv utils.CGREvent) (args *sessions.V1TerminateSessionArgs) {
|
||||
func (smaEv *SMAsteriskEvent) V1TerminateSessionArgs(cgrEvDisp utils.CGREventWithArgDispatcher) (args *sessions.V1TerminateSessionArgs) {
|
||||
args = &sessions.V1TerminateSessionArgs{ // defaults
|
||||
TerminateSession: true,
|
||||
CGREvent: cgrEv,
|
||||
CGREvent: *cgrEvDisp.CGREvent,
|
||||
}
|
||||
subsystems, err := cgrEv.FieldAsString(utils.CGRSubsystems)
|
||||
subsystems, err := cgrEvDisp.CGREvent.FieldAsString(utils.CGRSubsystems)
|
||||
if err != nil {
|
||||
utils.Logger.Err(fmt.Sprintf("<%s> event: %s don't have cgr_subsystems variable",
|
||||
utils.AsteriskAgent, utils.ToJSON(cgrEv)))
|
||||
utils.AsteriskAgent, utils.ToJSON(cgrEvDisp.CGREvent)))
|
||||
return
|
||||
}
|
||||
args.TerminateSession = strings.Index(subsystems, utils.MetaAccounts) != -1
|
||||
args.ReleaseResources = strings.Index(subsystems, utils.MetaResources) != -1
|
||||
args.ProcessThresholds = strings.Index(subsystems, utils.MetaThresholds) != -1
|
||||
args.ProcessStats = strings.Index(subsystems, utils.MetaStats) != -1
|
||||
//check if we have APIKey in event and in case it has add it in ArgDispatcher
|
||||
apiKeyIface, hasApiKey := cgrEv.Event[utils.MetaApiKey]
|
||||
if hasApiKey {
|
||||
args.ArgDispatcher = &utils.ArgDispatcher{
|
||||
APIKey: utils.StringPointer(apiKeyIface.(string)),
|
||||
}
|
||||
}
|
||||
//check if we have RouteID in event and in case it has add it in ArgDispatcher
|
||||
routeIDIface, hasRouteID := cgrEv.Event[utils.MetaRouteID]
|
||||
if hasRouteID {
|
||||
if !hasApiKey { //in case we don't have APIKey, but we have RouteID we need to initialize the struct
|
||||
args.ArgDispatcher = &utils.ArgDispatcher{
|
||||
RouteID: utils.StringPointer(routeIDIface.(string)),
|
||||
}
|
||||
} else {
|
||||
args.ArgDispatcher.RouteID = utils.StringPointer(routeIDIface.(string))
|
||||
}
|
||||
}
|
||||
args.ArgDispatcher = cgrEvDisp.ArgDispatcher
|
||||
return
|
||||
}
|
||||
|
||||
@@ -400,7 +400,7 @@ func TestSMAEventV1InitSessionArgs(t *testing.T) {
|
||||
t.Error(err)
|
||||
}
|
||||
smaEv := NewSMAsteriskEvent(ev, "127.0.0.1")
|
||||
if rcv := smaEv.V1InitSessionArgs(cgrEv); !reflect.DeepEqual(exp, rcv) {
|
||||
if rcv := smaEv.V1InitSessionArgs(utils.CGREventWithArgDispatcher{CGREvent: &cgrEv}); !reflect.DeepEqual(exp, rcv) {
|
||||
t.Errorf("Expecting: %+v, received: %+v", utils.ToJSON(exp), utils.ToJSON(rcv))
|
||||
}
|
||||
|
||||
@@ -411,7 +411,7 @@ func TestSMAEventV1InitSessionArgs(t *testing.T) {
|
||||
CGREvent: cgrEv,
|
||||
}
|
||||
cgrEv.Event[utils.CGRSubsystems] = "*resources*accounts*attributes"
|
||||
if rcv := smaEv.V1InitSessionArgs(cgrEv); !reflect.DeepEqual(exp2, rcv) {
|
||||
if rcv := smaEv.V1InitSessionArgs(utils.CGREventWithArgDispatcher{CGREvent: &cgrEv}); !reflect.DeepEqual(exp2, rcv) {
|
||||
t.Errorf("Expecting: %+v, received: %+v", utils.ToJSON(exp2), utils.ToJSON(rcv))
|
||||
}
|
||||
}
|
||||
@@ -433,7 +433,7 @@ func TestSMAEventV1TerminateSessionArgs(t *testing.T) {
|
||||
t.Error(err)
|
||||
}
|
||||
smaEv := NewSMAsteriskEvent(ev, "127.0.0.1")
|
||||
if rcv := smaEv.V1TerminateSessionArgs(cgrEv); !reflect.DeepEqual(exp, rcv) {
|
||||
if rcv := smaEv.V1TerminateSessionArgs(utils.CGREventWithArgDispatcher{CGREvent: &cgrEv}); !reflect.DeepEqual(exp, rcv) {
|
||||
t.Errorf("Expecting: %+v, received: %+v", utils.ToJSON(exp), utils.ToJSON(rcv))
|
||||
}
|
||||
|
||||
@@ -444,7 +444,7 @@ func TestSMAEventV1TerminateSessionArgs(t *testing.T) {
|
||||
CGREvent: cgrEv,
|
||||
}
|
||||
cgrEv.Event[utils.CGRSubsystems] = "*resources*accounts*stats"
|
||||
if rcv := smaEv.V1TerminateSessionArgs(cgrEv); !reflect.DeepEqual(exp2, rcv) {
|
||||
if rcv := smaEv.V1TerminateSessionArgs(utils.CGREventWithArgDispatcher{CGREvent: &cgrEv}); !reflect.DeepEqual(exp2, rcv) {
|
||||
t.Errorf("Expecting: %+v, received: %+v", utils.ToJSON(exp2), utils.ToJSON(rcv))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -255,6 +255,7 @@ func (da *DiameterAgent) processRequest(reqProcessor *config.DARequestProcessor,
|
||||
return
|
||||
}
|
||||
cgrEv := agReq.CGRRequest.AsCGREvent(agReq.tenant, utils.NestingSep)
|
||||
argDisp := cgrEv.ConsumeArgDispatcher()
|
||||
var reqType string
|
||||
for _, typ := range []string{
|
||||
utils.MetaDryRun, utils.MetaAuth,
|
||||
@@ -289,7 +290,7 @@ func (da *DiameterAgent) processRequest(reqProcessor *config.DARequestProcessor,
|
||||
reqProcessor.Flags.HasKey(utils.MetaSuppliers),
|
||||
reqProcessor.Flags.HasKey(utils.MetaSuppliersIgnoreErrors),
|
||||
reqProcessor.Flags.HasKey(utils.MetaSuppliersEventCost),
|
||||
*cgrEv)
|
||||
*cgrEv, argDisp)
|
||||
var authReply sessions.V1AuthorizeReply
|
||||
err = da.sS.Call(utils.SessionSv1AuthorizeEvent,
|
||||
authArgs, &authReply)
|
||||
@@ -302,7 +303,8 @@ func (da *DiameterAgent) processRequest(reqProcessor *config.DARequestProcessor,
|
||||
reqProcessor.Flags.HasKey(utils.MetaResources),
|
||||
reqProcessor.Flags.HasKey(utils.MetaAccounts),
|
||||
reqProcessor.Flags.HasKey(utils.MetaThresholds),
|
||||
reqProcessor.Flags.HasKey(utils.MetaStats), *cgrEv)
|
||||
reqProcessor.Flags.HasKey(utils.MetaStats),
|
||||
*cgrEv, argDisp)
|
||||
var initReply sessions.V1InitSessionReply
|
||||
err = da.sS.Call(utils.SessionSv1InitiateSession,
|
||||
initArgs, &initReply)
|
||||
@@ -312,7 +314,8 @@ func (da *DiameterAgent) processRequest(reqProcessor *config.DARequestProcessor,
|
||||
case utils.MetaUpdate:
|
||||
updateArgs := sessions.NewV1UpdateSessionArgs(
|
||||
reqProcessor.Flags.HasKey(utils.MetaAttributes),
|
||||
reqProcessor.Flags.HasKey(utils.MetaAccounts), *cgrEv)
|
||||
reqProcessor.Flags.HasKey(utils.MetaAccounts),
|
||||
*cgrEv, argDisp)
|
||||
var updateReply sessions.V1UpdateSessionReply
|
||||
err = da.sS.Call(utils.SessionSv1UpdateSession,
|
||||
updateArgs, &updateReply)
|
||||
@@ -324,7 +327,8 @@ func (da *DiameterAgent) processRequest(reqProcessor *config.DARequestProcessor,
|
||||
reqProcessor.Flags.HasKey(utils.MetaAccounts),
|
||||
reqProcessor.Flags.HasKey(utils.MetaResources),
|
||||
reqProcessor.Flags.HasKey(utils.MetaThresholds),
|
||||
reqProcessor.Flags.HasKey(utils.MetaStats), *cgrEv)
|
||||
reqProcessor.Flags.HasKey(utils.MetaStats),
|
||||
*cgrEv, argDisp)
|
||||
var tRply string
|
||||
err = da.sS.Call(utils.SessionSv1TerminateSession,
|
||||
terminateArgs, &tRply)
|
||||
@@ -338,7 +342,7 @@ func (da *DiameterAgent) processRequest(reqProcessor *config.DARequestProcessor,
|
||||
reqProcessor.Flags.HasKey(utils.MetaAttributes),
|
||||
reqProcessor.Flags.HasKey(utils.MetaThresholds),
|
||||
reqProcessor.Flags.HasKey(utils.MetaStats),
|
||||
*cgrEv)
|
||||
*cgrEv, argDisp)
|
||||
var eventRply sessions.V1ProcessEventReply
|
||||
err = da.sS.Call(utils.SessionSv1ProcessEvent,
|
||||
evArgs, &eventRply)
|
||||
@@ -356,30 +360,8 @@ func (da *DiameterAgent) processRequest(reqProcessor *config.DARequestProcessor,
|
||||
if reqProcessor.Flags.HasKey(utils.MetaCDRs) &&
|
||||
!reqProcessor.Flags.HasKey(utils.MetaDryRun) {
|
||||
var rplyCDRs string
|
||||
//compose the arguments for SessionSv1ProcessCDR
|
||||
argProcessCDR := &utils.CGREventWithArgDispatcher{
|
||||
CGREvent: cgrEv,
|
||||
}
|
||||
//check if we have APIKey in event and in case it has add it in ArgDispatcher
|
||||
apiKeyIface, hasApiKey := cgrEv.Event[utils.MetaApiKey]
|
||||
if hasApiKey {
|
||||
argProcessCDR.ArgDispatcher = &utils.ArgDispatcher{
|
||||
APIKey: utils.StringPointer(apiKeyIface.(string)),
|
||||
}
|
||||
}
|
||||
//check if we have RouteID in event and in case it has add it in ArgDispatcher
|
||||
routeIDIface, hasRouteID := cgrEv.Event[utils.MetaRouteID]
|
||||
if hasRouteID {
|
||||
if !hasApiKey { //in case we don't have APIKey, but we have RouteID we need to initialize the struct
|
||||
argProcessCDR.ArgDispatcher = &utils.ArgDispatcher{
|
||||
RouteID: utils.StringPointer(routeIDIface.(string)),
|
||||
}
|
||||
} else {
|
||||
argProcessCDR.ArgDispatcher.RouteID = utils.StringPointer(routeIDIface.(string))
|
||||
}
|
||||
}
|
||||
if err = da.sS.Call(utils.SessionSv1ProcessCDR,
|
||||
argProcessCDR, &rplyCDRs); err != nil {
|
||||
utils.CGREventWithArgDispatcher{CGREvent: cgrEv, ArgDispatcher: argDisp}, &rplyCDRs); err != nil {
|
||||
agReq.CGRReply.Set([]string{utils.Error}, err.Error(), false, false)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -266,7 +266,7 @@ func (sm *FSsessions) onChannelHangupComplete(fsev FSEvent, connId string) {
|
||||
return
|
||||
}
|
||||
if err := sm.sS.Call(utils.SessionSv1ProcessCDR,
|
||||
&utils.CGREventWithArgDispatcher{CGREvent: cgrEv}, &reply); err != nil {
|
||||
&utils.CGREventWithArgDispatcher{CGREvent: cgrEv, ArgDispatcher: cgrEv.ConsumeArgDispatcher()}, &reply); err != nil {
|
||||
utils.Logger.Err(fmt.Sprintf("<%s> Failed processing CGREvent: %s, error: <%s>",
|
||||
utils.FreeSWITCHAgent, utils.ToJSON(cgrEv), err.Error()))
|
||||
}
|
||||
|
||||
@@ -424,24 +424,7 @@ 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
|
||||
//check if we have APIKey in event and in case it has add it in ArgDispatcher
|
||||
apiKeyIface, hasApiKey := cgrEv.Event[utils.MetaApiKey]
|
||||
if hasApiKey {
|
||||
args.ArgDispatcher = &utils.ArgDispatcher{
|
||||
APIKey: utils.StringPointer(apiKeyIface.(string)),
|
||||
}
|
||||
}
|
||||
//check if we have RouteID in event and in case it has add it in ArgDispatcher
|
||||
routeIDIface, hasRouteID := cgrEv.Event[utils.MetaRouteID]
|
||||
if hasRouteID {
|
||||
if !hasApiKey { //in case we don't have APIKey, but we have RouteID we need to initialize the struct
|
||||
args.ArgDispatcher = &utils.ArgDispatcher{
|
||||
RouteID: utils.StringPointer(routeIDIface.(string)),
|
||||
}
|
||||
} else {
|
||||
args.ArgDispatcher.RouteID = utils.StringPointer(routeIDIface.(string))
|
||||
}
|
||||
}
|
||||
args.ArgDispatcher = cgrEv.ConsumeArgDispatcher()
|
||||
return
|
||||
}
|
||||
|
||||
@@ -464,24 +447,7 @@ 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
|
||||
//check if we have APIKey in event and in case it has add it in ArgDispatcher
|
||||
apiKeyIface, hasApiKey := cgrEv.Event[utils.MetaApiKey]
|
||||
if hasApiKey {
|
||||
args.ArgDispatcher = &utils.ArgDispatcher{
|
||||
APIKey: utils.StringPointer(apiKeyIface.(string)),
|
||||
}
|
||||
}
|
||||
//check if we have RouteID in event and in case it has add it in ArgDispatcher
|
||||
routeIDIface, hasRouteID := cgrEv.Event[utils.MetaRouteID]
|
||||
if hasRouteID {
|
||||
if !hasApiKey { //in case we don't have APIKey, but we have RouteID we need to initialize the struct
|
||||
args.ArgDispatcher = &utils.ArgDispatcher{
|
||||
RouteID: utils.StringPointer(routeIDIface.(string)),
|
||||
}
|
||||
} else {
|
||||
args.ArgDispatcher.RouteID = utils.StringPointer(routeIDIface.(string))
|
||||
}
|
||||
}
|
||||
args.ArgDispatcher = cgrEv.ConsumeArgDispatcher()
|
||||
return
|
||||
}
|
||||
|
||||
@@ -503,24 +469,7 @@ 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
|
||||
//check if we have APIKey in event and in case it has add it in ArgDispatcher
|
||||
apiKeyIface, hasApiKey := cgrEv.Event[utils.MetaApiKey]
|
||||
if hasApiKey {
|
||||
args.ArgDispatcher = &utils.ArgDispatcher{
|
||||
APIKey: utils.StringPointer(apiKeyIface.(string)),
|
||||
}
|
||||
}
|
||||
//check if we have RouteID in event and in case it has add it in ArgDispatcher
|
||||
routeIDIface, hasRouteID := cgrEv.Event[utils.MetaRouteID]
|
||||
if hasRouteID {
|
||||
if !hasApiKey { //in case we don't have APIKey, but we have RouteID we need to initialize the struct
|
||||
args.ArgDispatcher = &utils.ArgDispatcher{
|
||||
RouteID: utils.StringPointer(routeIDIface.(string)),
|
||||
}
|
||||
} else {
|
||||
args.ArgDispatcher.RouteID = utils.StringPointer(routeIDIface.(string))
|
||||
}
|
||||
}
|
||||
args.ArgDispatcher = cgrEv.ConsumeArgDispatcher()
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
@@ -104,6 +104,7 @@ func (ha *HTTPAgent) processRequest(reqProcessor *config.HttpAgntProcCfg,
|
||||
return
|
||||
}
|
||||
cgrEv := agReq.CGRRequest.AsCGREvent(agReq.tenant, utils.NestingSep)
|
||||
argDisp := cgrEv.ConsumeArgDispatcher()
|
||||
var reqType string
|
||||
for _, typ := range []string{
|
||||
utils.MetaDryRun, utils.MetaAuth,
|
||||
@@ -137,7 +138,7 @@ func (ha *HTTPAgent) processRequest(reqProcessor *config.HttpAgntProcCfg,
|
||||
reqProcessor.Flags.HasKey(utils.MetaSuppliers),
|
||||
reqProcessor.Flags.HasKey(utils.MetaSuppliersIgnoreErrors),
|
||||
reqProcessor.Flags.HasKey(utils.MetaSuppliersEventCost),
|
||||
*cgrEv)
|
||||
*cgrEv, argDisp)
|
||||
var authReply sessions.V1AuthorizeReply
|
||||
err = ha.sessionS.Call(utils.SessionSv1AuthorizeEvent,
|
||||
authArgs, &authReply)
|
||||
@@ -150,7 +151,8 @@ func (ha *HTTPAgent) processRequest(reqProcessor *config.HttpAgntProcCfg,
|
||||
reqProcessor.Flags.HasKey(utils.MetaResources),
|
||||
reqProcessor.Flags.HasKey(utils.MetaAccounts),
|
||||
reqProcessor.Flags.HasKey(utils.MetaThresholds),
|
||||
reqProcessor.Flags.HasKey(utils.MetaStats), *cgrEv)
|
||||
reqProcessor.Flags.HasKey(utils.MetaStats),
|
||||
*cgrEv, argDisp)
|
||||
var initReply sessions.V1InitSessionReply
|
||||
err = ha.sessionS.Call(utils.SessionSv1InitiateSession,
|
||||
initArgs, &initReply)
|
||||
@@ -160,7 +162,8 @@ func (ha *HTTPAgent) processRequest(reqProcessor *config.HttpAgntProcCfg,
|
||||
case utils.MetaUpdate:
|
||||
updateArgs := sessions.NewV1UpdateSessionArgs(
|
||||
reqProcessor.Flags.HasKey(utils.MetaAttributes),
|
||||
reqProcessor.Flags.HasKey(utils.MetaAccounts), *cgrEv)
|
||||
reqProcessor.Flags.HasKey(utils.MetaAccounts),
|
||||
*cgrEv, argDisp)
|
||||
var updateReply sessions.V1UpdateSessionReply
|
||||
err = ha.sessionS.Call(utils.SessionSv1UpdateSession,
|
||||
updateArgs, &updateReply)
|
||||
@@ -172,7 +175,8 @@ func (ha *HTTPAgent) processRequest(reqProcessor *config.HttpAgntProcCfg,
|
||||
reqProcessor.Flags.HasKey(utils.MetaAccounts),
|
||||
reqProcessor.Flags.HasKey(utils.MetaResources),
|
||||
reqProcessor.Flags.HasKey(utils.MetaThresholds),
|
||||
reqProcessor.Flags.HasKey(utils.MetaStats), *cgrEv)
|
||||
reqProcessor.Flags.HasKey(utils.MetaStats),
|
||||
*cgrEv, argDisp)
|
||||
var tRply string
|
||||
err = ha.sessionS.Call(utils.SessionSv1TerminateSession,
|
||||
terminateArgs, &tRply)
|
||||
@@ -186,7 +190,7 @@ func (ha *HTTPAgent) processRequest(reqProcessor *config.HttpAgntProcCfg,
|
||||
reqProcessor.Flags.HasKey(utils.MetaAttributes),
|
||||
reqProcessor.Flags.HasKey(utils.MetaThresholds),
|
||||
reqProcessor.Flags.HasKey(utils.MetaStats),
|
||||
*cgrEv)
|
||||
*cgrEv, argDisp)
|
||||
var eventRply sessions.V1ProcessEventReply
|
||||
err = ha.sessionS.Call(utils.SessionSv1ProcessEvent,
|
||||
evArgs, &eventRply)
|
||||
@@ -205,7 +209,7 @@ func (ha *HTTPAgent) processRequest(reqProcessor *config.HttpAgntProcCfg,
|
||||
!reqProcessor.Flags.HasKey(utils.MetaDryRun) {
|
||||
var rplyCDRs string
|
||||
if err = ha.sessionS.Call(utils.SessionSv1ProcessCDR,
|
||||
&utils.CGREventWithArgDispatcher{CGREvent: cgrEv}, &rplyCDRs); err != nil {
|
||||
&utils.CGREventWithArgDispatcher{CGREvent: cgrEv, ArgDispatcher: argDisp}, &rplyCDRs); err != nil {
|
||||
agReq.CGRReply.Set([]string{utils.Error}, err.Error(), false, false)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -201,7 +201,7 @@ func (ka *KamailioAgent) onCallEnd(evData []byte, connID string) {
|
||||
}
|
||||
cgrEv.Event[utils.OriginHost] = ka.conns[connID].RemoteAddr().String()
|
||||
if err := ka.sessionS.Call(utils.SessionSv1ProcessCDR,
|
||||
&utils.CGREventWithArgDispatcher{CGREvent: cgrEv}, &reply); err != nil {
|
||||
&utils.CGREventWithArgDispatcher{CGREvent: cgrEv, ArgDispatcher: cgrEv.ConsumeArgDispatcher()}, &reply); err != nil {
|
||||
utils.Logger.Err(fmt.Sprintf("%s> failed processing CGREvent: %s, error: %s",
|
||||
utils.KamailioAgent, utils.ToJSON(cgrEv), err.Error()))
|
||||
}
|
||||
|
||||
@@ -191,24 +191,7 @@ 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
|
||||
//check if we have APIKey in event and in case it has add it in ArgDispatcher
|
||||
apiKeyIface, hasApiKey := cgrEv.Event[utils.MetaApiKey]
|
||||
if hasApiKey {
|
||||
args.ArgDispatcher = &utils.ArgDispatcher{
|
||||
APIKey: utils.StringPointer(apiKeyIface.(string)),
|
||||
}
|
||||
}
|
||||
//check if we have RouteID in event and in case it has add it in ArgDispatcher
|
||||
routeIDIface, hasRouteID := cgrEv.Event[utils.MetaRouteID]
|
||||
if hasRouteID {
|
||||
if !hasApiKey { //in case we don't have APIKey, but we have RouteID we need to initialize the struct
|
||||
args.ArgDispatcher = &utils.ArgDispatcher{
|
||||
RouteID: utils.StringPointer(routeIDIface.(string)),
|
||||
}
|
||||
} else {
|
||||
args.ArgDispatcher.RouteID = utils.StringPointer(routeIDIface.(string))
|
||||
}
|
||||
}
|
||||
args.ArgDispatcher = cgrEv.ConsumeArgDispatcher()
|
||||
return
|
||||
}
|
||||
|
||||
@@ -272,24 +255,7 @@ 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
|
||||
//check if we have APIKey in event and in case it has add it in ArgDispatcher
|
||||
apiKeyIface, hasApiKey := cgrEv.Event[utils.MetaApiKey]
|
||||
if hasApiKey {
|
||||
args.ArgDispatcher = &utils.ArgDispatcher{
|
||||
APIKey: utils.StringPointer(apiKeyIface.(string)),
|
||||
}
|
||||
}
|
||||
//check if we have RouteID in event and in case it has add it in ArgDispatcher
|
||||
routeIDIface, hasRouteID := args.CGREvent.Event[utils.MetaRouteID]
|
||||
if hasRouteID {
|
||||
if !hasApiKey { //in case we don't have APIKey, but we have RouteID we need to initialize the struct
|
||||
args.ArgDispatcher = &utils.ArgDispatcher{
|
||||
RouteID: utils.StringPointer(routeIDIface.(string)),
|
||||
}
|
||||
} else {
|
||||
args.ArgDispatcher.RouteID = utils.StringPointer(routeIDIface.(string))
|
||||
}
|
||||
}
|
||||
args.ArgDispatcher = cgrEv.ConsumeArgDispatcher()
|
||||
return
|
||||
}
|
||||
|
||||
@@ -311,24 +277,7 @@ 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
|
||||
//check if we have APIKey in event and in case it has add it in ArgDispatcher
|
||||
apiKeyIface, hasApiKey := cgrEv.Event[utils.MetaApiKey]
|
||||
if hasApiKey {
|
||||
args.ArgDispatcher = &utils.ArgDispatcher{
|
||||
APIKey: utils.StringPointer(apiKeyIface.(string)),
|
||||
}
|
||||
}
|
||||
//check if we have RouteID in event and in case it has add it in ArgDispatcher
|
||||
routeIDIface, hasRouteID := cgrEv.Event[utils.MetaRouteID]
|
||||
if hasRouteID {
|
||||
if !hasApiKey { //in case we don't have APIKey, but we have RouteID we need to initialize the struct
|
||||
args.ArgDispatcher = &utils.ArgDispatcher{
|
||||
RouteID: utils.StringPointer(routeIDIface.(string)),
|
||||
}
|
||||
} else {
|
||||
args.ArgDispatcher.RouteID = utils.StringPointer(routeIDIface.(string))
|
||||
}
|
||||
}
|
||||
args.ArgDispatcher = cgrEv.ConsumeArgDispatcher()
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
@@ -148,6 +148,7 @@ func (ra *RadiusAgent) processRequest(reqProcessor *config.RARequestProcessor,
|
||||
return
|
||||
}
|
||||
cgrEv := agReq.CGRRequest.AsCGREvent(agReq.tenant, utils.NestingSep)
|
||||
argDisp := cgrEv.ConsumeArgDispatcher()
|
||||
var reqType string
|
||||
for _, typ := range []string{
|
||||
utils.MetaDryRun, utils.MetaAuth,
|
||||
@@ -181,7 +182,7 @@ func (ra *RadiusAgent) processRequest(reqProcessor *config.RARequestProcessor,
|
||||
reqProcessor.Flags.HasKey(utils.MetaSuppliers),
|
||||
reqProcessor.Flags.HasKey(utils.MetaSuppliersIgnoreErrors),
|
||||
reqProcessor.Flags.HasKey(utils.MetaSuppliersEventCost),
|
||||
*cgrEv)
|
||||
*cgrEv, argDisp)
|
||||
var authReply sessions.V1AuthorizeReply
|
||||
err = ra.sessionS.Call(utils.SessionSv1AuthorizeEvent,
|
||||
authArgs, &authReply)
|
||||
@@ -194,7 +195,8 @@ func (ra *RadiusAgent) processRequest(reqProcessor *config.RARequestProcessor,
|
||||
reqProcessor.Flags.HasKey(utils.MetaResources),
|
||||
reqProcessor.Flags.HasKey(utils.MetaAccounts),
|
||||
reqProcessor.Flags.HasKey(utils.MetaThresholds),
|
||||
reqProcessor.Flags.HasKey(utils.MetaStats), *cgrEv)
|
||||
reqProcessor.Flags.HasKey(utils.MetaStats),
|
||||
*cgrEv, argDisp)
|
||||
var initReply sessions.V1InitSessionReply
|
||||
err = ra.sessionS.Call(utils.SessionSv1InitiateSession,
|
||||
initArgs, &initReply)
|
||||
@@ -204,7 +206,8 @@ func (ra *RadiusAgent) processRequest(reqProcessor *config.RARequestProcessor,
|
||||
case utils.MetaUpdate:
|
||||
updateArgs := sessions.NewV1UpdateSessionArgs(
|
||||
reqProcessor.Flags.HasKey(utils.MetaAttributes),
|
||||
reqProcessor.Flags.HasKey(utils.MetaAccounts), *cgrEv)
|
||||
reqProcessor.Flags.HasKey(utils.MetaAccounts),
|
||||
*cgrEv, argDisp)
|
||||
var updateReply sessions.V1UpdateSessionReply
|
||||
err = ra.sessionS.Call(utils.SessionSv1UpdateSession,
|
||||
updateArgs, &updateReply)
|
||||
@@ -216,7 +219,8 @@ func (ra *RadiusAgent) processRequest(reqProcessor *config.RARequestProcessor,
|
||||
reqProcessor.Flags.HasKey(utils.MetaAccounts),
|
||||
reqProcessor.Flags.HasKey(utils.MetaResources),
|
||||
reqProcessor.Flags.HasKey(utils.MetaThresholds),
|
||||
reqProcessor.Flags.HasKey(utils.MetaStats), *cgrEv)
|
||||
reqProcessor.Flags.HasKey(utils.MetaStats),
|
||||
*cgrEv, argDisp)
|
||||
var tRply string
|
||||
err = ra.sessionS.Call(utils.SessionSv1TerminateSession,
|
||||
terminateArgs, &tRply)
|
||||
@@ -230,7 +234,7 @@ func (ra *RadiusAgent) processRequest(reqProcessor *config.RARequestProcessor,
|
||||
reqProcessor.Flags.HasKey(utils.MetaAttributes),
|
||||
reqProcessor.Flags.HasKey(utils.MetaThresholds),
|
||||
reqProcessor.Flags.HasKey(utils.MetaStats),
|
||||
*cgrEv)
|
||||
*cgrEv, argDisp)
|
||||
var eventRply sessions.V1ProcessEventReply
|
||||
err = ra.sessionS.Call(utils.SessionSv1ProcessEvent,
|
||||
evArgs, &eventRply)
|
||||
@@ -248,7 +252,7 @@ func (ra *RadiusAgent) processRequest(reqProcessor *config.RARequestProcessor,
|
||||
if reqProcessor.Flags.HasKey(utils.MetaCDRs) {
|
||||
var rplyCDRs string
|
||||
if err = ra.sessionS.Call(utils.SessionSv1ProcessCDR,
|
||||
cgrEv.AsCGREventWithArgDispatcher(), &rplyCDRs); err != nil {
|
||||
&utils.CGREventWithArgDispatcher{CGREvent: cgrEv, ArgDispatcher: argDisp}, &rplyCDRs); err != nil {
|
||||
agReq.CGRReply.Set([]string{utils.Error}, err.Error(), false, false)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1563,7 +1563,7 @@ func (sS *SessionS) BiRPCv1ReplicateSessions(clnt rpcclient.RpcClientConnection,
|
||||
// NewV1AuthorizeArgs is a constructor for V1AuthorizeArgs
|
||||
func NewV1AuthorizeArgs(attrs, res, maxUsage, thrslds,
|
||||
statQueues, suppls, supplsIgnoreErrs, supplsEventCost bool,
|
||||
cgrEv utils.CGREvent) (args *V1AuthorizeArgs) {
|
||||
cgrEv utils.CGREvent, argDisp *utils.ArgDispatcher) (args *V1AuthorizeArgs) {
|
||||
args = &V1AuthorizeArgs{
|
||||
GetAttributes: attrs,
|
||||
AuthorizeResources: res,
|
||||
@@ -1577,24 +1577,7 @@ func NewV1AuthorizeArgs(attrs, res, maxUsage, thrslds,
|
||||
if supplsEventCost {
|
||||
args.SuppliersMaxCost = utils.MetaSuppliersEventCost
|
||||
}
|
||||
//check if we have APIKey in event and in case it has add it in ArgDispatcher
|
||||
apiKeyIface, hasApiKey := cgrEv.Event[utils.MetaApiKey]
|
||||
if hasApiKey {
|
||||
args.ArgDispatcher = &utils.ArgDispatcher{
|
||||
APIKey: utils.StringPointer(apiKeyIface.(string)),
|
||||
}
|
||||
}
|
||||
//check if we have RouteID in event and in case it has add it in ArgDispatcher
|
||||
routeIDIface, hasRouteID := cgrEv.Event[utils.MetaRouteID]
|
||||
if hasRouteID {
|
||||
if !hasApiKey { //in case we don't have APIKey, but we have RouteID we need to initialize the struct
|
||||
args.ArgDispatcher = &utils.ArgDispatcher{
|
||||
RouteID: utils.StringPointer(routeIDIface.(string)),
|
||||
}
|
||||
} else {
|
||||
args.ArgDispatcher.RouteID = utils.StringPointer(routeIDIface.(string))
|
||||
}
|
||||
}
|
||||
args.ArgDispatcher = argDisp
|
||||
return
|
||||
}
|
||||
|
||||
@@ -1849,7 +1832,7 @@ func (sS *SessionS) BiRPCv1AuthorizeEventWithDigest(clnt rpcclient.RpcClientConn
|
||||
|
||||
// NewV1InitSessionArgs is a constructor for V1InitSessionArgs
|
||||
func NewV1InitSessionArgs(attrs, resrc, acnt, thrslds, stats bool,
|
||||
cgrEv utils.CGREvent) (args *V1InitSessionArgs) {
|
||||
cgrEv utils.CGREvent, argDisp *utils.ArgDispatcher) (args *V1InitSessionArgs) {
|
||||
args = &V1InitSessionArgs{
|
||||
GetAttributes: attrs,
|
||||
AllocateResources: resrc,
|
||||
@@ -1857,24 +1840,7 @@ func NewV1InitSessionArgs(attrs, resrc, acnt, thrslds, stats bool,
|
||||
ProcessThresholds: thrslds,
|
||||
ProcessStats: stats,
|
||||
CGREvent: cgrEv,
|
||||
}
|
||||
//check if we have APIKey in event and in case it has add it in ArgDispatcher
|
||||
apiKeyIface, hasApiKey := cgrEv.Event[utils.MetaApiKey]
|
||||
if hasApiKey {
|
||||
args.ArgDispatcher = &utils.ArgDispatcher{
|
||||
APIKey: utils.StringPointer(apiKeyIface.(string)),
|
||||
}
|
||||
}
|
||||
//check if we have RouteID in event and in case it has add it in ArgDispatcher
|
||||
routeIDIface, hasRouteID := cgrEv.Event[utils.MetaRouteID]
|
||||
if hasRouteID {
|
||||
if !hasApiKey { //in case we don't have APIKey, but we have RouteID we need to initialize the struct
|
||||
args.ArgDispatcher = &utils.ArgDispatcher{
|
||||
RouteID: utils.StringPointer(routeIDIface.(string)),
|
||||
}
|
||||
} else {
|
||||
args.ArgDispatcher.RouteID = utils.StringPointer(routeIDIface.(string))
|
||||
}
|
||||
ArgDispatcher: argDisp,
|
||||
}
|
||||
return
|
||||
}
|
||||
@@ -2113,29 +2079,12 @@ func (sS *SessionS) BiRPCv1InitiateSessionWithDigest(clnt rpcclient.RpcClientCon
|
||||
|
||||
// NewV1UpdateSessionArgs is a constructor for update session arguments
|
||||
func NewV1UpdateSessionArgs(attrs, acnts bool,
|
||||
cgrEv utils.CGREvent) (args *V1UpdateSessionArgs) {
|
||||
cgrEv utils.CGREvent, argDisp *utils.ArgDispatcher) (args *V1UpdateSessionArgs) {
|
||||
args = &V1UpdateSessionArgs{
|
||||
GetAttributes: attrs,
|
||||
UpdateSession: acnts,
|
||||
CGREvent: cgrEv,
|
||||
}
|
||||
//check if we have APIKey in event and in case it has add it in ArgDispatcher
|
||||
apiKeyIface, hasApiKey := cgrEv.Event[utils.MetaApiKey]
|
||||
if hasApiKey {
|
||||
args.ArgDispatcher = &utils.ArgDispatcher{
|
||||
APIKey: utils.StringPointer(apiKeyIface.(string)),
|
||||
}
|
||||
}
|
||||
//check if we have RouteID in event and in case it has add it in ArgDispatcher
|
||||
routeIDIface, hasRouteID := cgrEv.Event[utils.MetaRouteID]
|
||||
if hasRouteID {
|
||||
if !hasApiKey { //in case we don't have APIKey, but we have RouteID we need to initialize the struct
|
||||
args.ArgDispatcher = &utils.ArgDispatcher{
|
||||
RouteID: utils.StringPointer(routeIDIface.(string)),
|
||||
}
|
||||
} else {
|
||||
args.ArgDispatcher.RouteID = utils.StringPointer(routeIDIface.(string))
|
||||
}
|
||||
ArgDispatcher: argDisp,
|
||||
}
|
||||
return
|
||||
}
|
||||
@@ -2265,30 +2214,14 @@ func (sS *SessionS) BiRPCv1UpdateSession(clnt rpcclient.RpcClientConnection,
|
||||
}
|
||||
|
||||
func NewV1TerminateSessionArgs(acnts, resrc, thrds, stats bool,
|
||||
cgrEv utils.CGREvent) (args *V1TerminateSessionArgs) {
|
||||
cgrEv utils.CGREvent, argDisp *utils.ArgDispatcher) (args *V1TerminateSessionArgs) {
|
||||
args = &V1TerminateSessionArgs{
|
||||
TerminateSession: acnts,
|
||||
ReleaseResources: resrc,
|
||||
ProcessThresholds: thrds,
|
||||
ProcessStats: stats,
|
||||
CGREvent: cgrEv}
|
||||
//check if we have APIKey in event and in case it has add it in ArgDispatcher
|
||||
apiKeyIface, hasApiKey := cgrEv.Event[utils.MetaApiKey]
|
||||
if hasApiKey {
|
||||
args.ArgDispatcher = &utils.ArgDispatcher{
|
||||
APIKey: utils.StringPointer(apiKeyIface.(string)),
|
||||
}
|
||||
}
|
||||
//check if we have RouteID in event and in case it has add it in ArgDispatcher
|
||||
routeIDIface, hasRouteID := cgrEv.Event[utils.MetaRouteID]
|
||||
if hasRouteID {
|
||||
if !hasApiKey { //in case we don't have APIKey, but we have RouteID we need to initialize the struct
|
||||
args.ArgDispatcher = &utils.ArgDispatcher{
|
||||
RouteID: utils.StringPointer(routeIDIface.(string)),
|
||||
}
|
||||
} else {
|
||||
args.ArgDispatcher.RouteID = utils.StringPointer(routeIDIface.(string))
|
||||
}
|
||||
CGREvent: cgrEv,
|
||||
ArgDispatcher: argDisp,
|
||||
}
|
||||
return
|
||||
}
|
||||
@@ -2518,7 +2451,7 @@ func (sS *SessionS) BiRPCv1ProcessCDR(clnt rpcclient.RpcClientConnection,
|
||||
|
||||
// NewV1ProcessEventArgs is a constructor for EventArgs used by ProcessEvent
|
||||
func NewV1ProcessEventArgs(resrc, acnts, attrs, thds, stats bool,
|
||||
cgrEv utils.CGREvent) (args *V1ProcessEventArgs) {
|
||||
cgrEv utils.CGREvent, argDisp *utils.ArgDispatcher) (args *V1ProcessEventArgs) {
|
||||
args = &V1ProcessEventArgs{
|
||||
AllocateResources: resrc,
|
||||
Debit: acnts,
|
||||
@@ -2526,24 +2459,7 @@ func NewV1ProcessEventArgs(resrc, acnts, attrs, thds, stats bool,
|
||||
ProcessThresholds: thds,
|
||||
ProcessStats: stats,
|
||||
CGREvent: cgrEv,
|
||||
}
|
||||
//check if we have APIKey in event and in case it has add it in ArgDispatcher
|
||||
apiKeyIface, hasApiKey := cgrEv.Event[utils.MetaApiKey]
|
||||
if hasApiKey {
|
||||
args.ArgDispatcher = &utils.ArgDispatcher{
|
||||
APIKey: utils.StringPointer(apiKeyIface.(string)),
|
||||
}
|
||||
}
|
||||
//check if we have RouteID in event and in case it has add it in ArgDispatcher
|
||||
routeIDIface, hasRouteID := cgrEv.Event[utils.MetaRouteID]
|
||||
if hasRouteID {
|
||||
if !hasApiKey { //in case we don't have APIKey, but we have RouteID we need to initialize the struct
|
||||
args.ArgDispatcher = &utils.ArgDispatcher{
|
||||
RouteID: utils.StringPointer(routeIDIface.(string)),
|
||||
}
|
||||
} else {
|
||||
args.ArgDispatcher.RouteID = utils.StringPointer(routeIDIface.(string))
|
||||
}
|
||||
ArgDispatcher: argDisp,
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
@@ -747,7 +747,7 @@ func TestSessionSNewV1AuthorizeArgs(t *testing.T) {
|
||||
GetAttributes: true,
|
||||
CGREvent: cgrEv,
|
||||
}
|
||||
rply := NewV1AuthorizeArgs(true, true, false, false, false, false, false, false, cgrEv)
|
||||
rply := NewV1AuthorizeArgs(true, true, false, false, false, false, false, false, cgrEv, nil)
|
||||
if !reflect.DeepEqual(expected, rply) {
|
||||
t.Errorf("Expecting %+v, received: %+v", expected, rply)
|
||||
}
|
||||
@@ -762,7 +762,7 @@ func TestSessionSNewV1AuthorizeArgs(t *testing.T) {
|
||||
SuppliersMaxCost: utils.MetaSuppliersEventCost,
|
||||
CGREvent: cgrEv,
|
||||
}
|
||||
rply = NewV1AuthorizeArgs(true, false, true, false, true, false, true, true, cgrEv)
|
||||
rply = NewV1AuthorizeArgs(true, false, true, false, true, false, true, true, cgrEv, nil)
|
||||
if !reflect.DeepEqual(expected, rply) {
|
||||
t.Errorf("Expecting %+v,\n received: %+v", expected, rply)
|
||||
}
|
||||
@@ -782,7 +782,7 @@ func TestSessionSNewV1UpdateSessionArgs(t *testing.T) {
|
||||
UpdateSession: true,
|
||||
CGREvent: cgrEv,
|
||||
}
|
||||
rply := NewV1UpdateSessionArgs(true, true, cgrEv)
|
||||
rply := NewV1UpdateSessionArgs(true, true, cgrEv, nil)
|
||||
if !reflect.DeepEqual(expected, rply) {
|
||||
t.Errorf("Expecting %+v, received: %+v", expected, rply)
|
||||
}
|
||||
@@ -791,7 +791,7 @@ func TestSessionSNewV1UpdateSessionArgs(t *testing.T) {
|
||||
UpdateSession: true,
|
||||
CGREvent: cgrEv,
|
||||
}
|
||||
rply = NewV1UpdateSessionArgs(false, true, cgrEv)
|
||||
rply = NewV1UpdateSessionArgs(false, true, cgrEv, nil)
|
||||
if !reflect.DeepEqual(expected, rply) {
|
||||
t.Errorf("Expecting %+v, received: %+v", expected, rply)
|
||||
}
|
||||
@@ -811,14 +811,14 @@ func TestSessionSNewV1TerminateSessionArgs(t *testing.T) {
|
||||
ProcessThresholds: true,
|
||||
CGREvent: cgrEv,
|
||||
}
|
||||
rply := NewV1TerminateSessionArgs(true, false, true, false, cgrEv)
|
||||
rply := NewV1TerminateSessionArgs(true, false, true, false, cgrEv, nil)
|
||||
if !reflect.DeepEqual(expected, rply) {
|
||||
t.Errorf("Expecting %+v, received: %+v", expected, rply)
|
||||
}
|
||||
expected = &V1TerminateSessionArgs{
|
||||
CGREvent: cgrEv,
|
||||
}
|
||||
rply = NewV1TerminateSessionArgs(false, false, false, false, cgrEv)
|
||||
rply = NewV1TerminateSessionArgs(false, false, false, false, cgrEv, nil)
|
||||
if !reflect.DeepEqual(expected, rply) {
|
||||
t.Errorf("Expecting %+v, received: %+v", expected, rply)
|
||||
}
|
||||
@@ -839,7 +839,7 @@ func TestSessionSNewV1ProcessEventArgs(t *testing.T) {
|
||||
GetAttributes: true,
|
||||
CGREvent: cgrEv,
|
||||
}
|
||||
rply := NewV1ProcessEventArgs(true, true, true, false, false, cgrEv)
|
||||
rply := NewV1ProcessEventArgs(true, true, true, false, false, cgrEv, nil)
|
||||
if !reflect.DeepEqual(expected, rply) {
|
||||
t.Errorf("Expecting %+v, received: %+v", expected, rply)
|
||||
}
|
||||
@@ -848,7 +848,7 @@ func TestSessionSNewV1ProcessEventArgs(t *testing.T) {
|
||||
GetAttributes: true,
|
||||
CGREvent: cgrEv,
|
||||
}
|
||||
rply = NewV1ProcessEventArgs(true, false, true, false, false, cgrEv)
|
||||
rply = NewV1ProcessEventArgs(true, false, true, false, false, cgrEv, nil)
|
||||
if !reflect.DeepEqual(expected, rply) {
|
||||
t.Errorf("Expecting %+v, received: %+v", expected, rply)
|
||||
}
|
||||
@@ -871,7 +871,7 @@ func TestSessionSNewV1InitSessionArgs(t *testing.T) {
|
||||
ProcessStats: true,
|
||||
CGREvent: cgrEv,
|
||||
}
|
||||
rply := NewV1InitSessionArgs(true, true, true, true, true, cgrEv)
|
||||
rply := NewV1InitSessionArgs(true, true, true, true, true, cgrEv, nil)
|
||||
if !reflect.DeepEqual(expected, rply) {
|
||||
t.Errorf("Expecting %+v, received: %+v", expected, rply)
|
||||
}
|
||||
@@ -883,7 +883,7 @@ func TestSessionSNewV1InitSessionArgs(t *testing.T) {
|
||||
ProcessStats: true,
|
||||
CGREvent: cgrEv,
|
||||
}
|
||||
rply = NewV1InitSessionArgs(true, false, true, false, true, cgrEv)
|
||||
rply = NewV1InitSessionArgs(true, false, true, false, true, cgrEv, nil)
|
||||
if !reflect.DeepEqual(expected, rply) {
|
||||
t.Errorf("Expecting %+v, received: %+v", expected, rply)
|
||||
}
|
||||
@@ -1281,7 +1281,8 @@ func TestSessionSNewV1AuthorizeArgsWithArgDispatcher(t *testing.T) {
|
||||
RouteID: utils.StringPointer("testrouteid"),
|
||||
},
|
||||
}
|
||||
rply := NewV1AuthorizeArgs(true, true, false, false, false, false, false, false, cgrEv)
|
||||
argDisp := cgrEv.ConsumeArgDispatcher()
|
||||
rply := NewV1AuthorizeArgs(true, true, false, false, false, false, false, false, cgrEv, argDisp)
|
||||
if !reflect.DeepEqual(expected, rply) {
|
||||
t.Errorf("Expecting %+v, received: %+v", utils.ToJSON(expected), utils.ToJSON(rply))
|
||||
}
|
||||
@@ -1300,7 +1301,7 @@ func TestSessionSNewV1AuthorizeArgsWithArgDispatcher(t *testing.T) {
|
||||
RouteID: utils.StringPointer("testrouteid"),
|
||||
},
|
||||
}
|
||||
rply = NewV1AuthorizeArgs(true, false, true, false, true, false, true, true, cgrEv)
|
||||
rply = NewV1AuthorizeArgs(true, false, true, false, true, false, true, true, cgrEv, argDisp)
|
||||
if !reflect.DeepEqual(expected, rply) {
|
||||
t.Errorf("Expecting %+v, received: %+v", utils.ToJSON(expected), utils.ToJSON(rply))
|
||||
}
|
||||
@@ -1324,7 +1325,8 @@ func TestSessionSNewV1AuthorizeArgsWithArgDispatcher2(t *testing.T) {
|
||||
RouteID: utils.StringPointer("testrouteid"),
|
||||
},
|
||||
}
|
||||
rply := NewV1AuthorizeArgs(true, true, false, false, false, false, false, false, cgrEv)
|
||||
argDisp := cgrEv.ConsumeArgDispatcher()
|
||||
rply := NewV1AuthorizeArgs(true, true, false, false, false, false, false, false, cgrEv, argDisp)
|
||||
if !reflect.DeepEqual(expected, rply) {
|
||||
t.Errorf("Expecting %+v, received: %+v", utils.ToJSON(expected), utils.ToJSON(rply))
|
||||
}
|
||||
@@ -1342,7 +1344,7 @@ func TestSessionSNewV1AuthorizeArgsWithArgDispatcher2(t *testing.T) {
|
||||
RouteID: utils.StringPointer("testrouteid"),
|
||||
},
|
||||
}
|
||||
rply = NewV1AuthorizeArgs(true, false, true, false, true, false, true, true, cgrEv)
|
||||
rply = NewV1AuthorizeArgs(true, false, true, false, true, false, true, true, cgrEv, argDisp)
|
||||
if !reflect.DeepEqual(expected, rply) {
|
||||
t.Errorf("Expecting %+v, received: %+v", utils.ToJSON(expected), utils.ToJSON(rply))
|
||||
}
|
||||
|
||||
@@ -173,28 +173,27 @@ func (ev *CGREvent) RemFldsWithPrefix(prfx string) {
|
||||
}
|
||||
|
||||
// RemFldsWithPrefix will remove fields starting with prefix from event
|
||||
func (ev *CGREvent) AsCGREventWithArgDispatcher() (arg *CGREventWithArgDispatcher) {
|
||||
arg = &CGREventWithArgDispatcher{
|
||||
CGREvent: ev,
|
||||
}
|
||||
func (ev *CGREvent) ConsumeArgDispatcher() (arg *ArgDispatcher) {
|
||||
//check if we have APIKey in event and in case it has add it in ArgDispatcher
|
||||
apiKeyIface, hasApiKey := ev.Event[MetaApiKey]
|
||||
if hasApiKey {
|
||||
arg.ArgDispatcher = &ArgDispatcher{
|
||||
delete(ev.Event, MetaApiKey)
|
||||
arg = &ArgDispatcher{
|
||||
APIKey: StringPointer(apiKeyIface.(string)),
|
||||
}
|
||||
}
|
||||
//check if we have RouteID in event and in case it has add it in ArgDispatcher
|
||||
routeIDIface, hasRouteID := ev.Event[MetaRouteID]
|
||||
if hasRouteID {
|
||||
if !hasApiKey { //in case we don't have APIKey, but we have RouteID we need to initialize the struct
|
||||
arg.ArgDispatcher = &ArgDispatcher{
|
||||
RouteID: StringPointer(routeIDIface.(string)),
|
||||
}
|
||||
} else {
|
||||
arg.ArgDispatcher.RouteID = StringPointer(routeIDIface.(string))
|
||||
if !hasRouteID {
|
||||
return
|
||||
}
|
||||
delete(ev.Event, MetaRouteID)
|
||||
if !hasApiKey { //in case we don't have APIKey, but we have RouteID we need to initialize the struct
|
||||
return &ArgDispatcher{
|
||||
RouteID: StringPointer(routeIDIface.(string)),
|
||||
}
|
||||
}
|
||||
arg.RouteID = StringPointer(routeIDIface.(string))
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user