Added ArgDispatcher to all Calls to SessionS

This commit is contained in:
Tripon Alexandru-Ionut
2019-04-14 14:44:36 +03:00
committed by Dan Christian Bogos
parent 3862573adc
commit 3a3996b896
13 changed files with 110 additions and 349 deletions

View File

@@ -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()))
}

View File

@@ -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
}

View File

@@ -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))
}
}

View File

@@ -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)
}
}

View File

@@ -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()))
}

View File

@@ -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
}

View File

@@ -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)
}
}

View File

@@ -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()))
}

View File

@@ -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
}

View File

@@ -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)
}
}

View File

@@ -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
}

View File

@@ -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))
}

View File

@@ -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
}