From 0fa2ad793e4b5450ebf1bbcb44c3483710554b4e Mon Sep 17 00:00:00 2001 From: Trial97 Date: Mon, 23 Nov 2020 13:35:06 +0200 Subject: [PATCH] Updated KamailioAgent GetActiveSessionIDs API --- agents/astagent.go | 4 ++-- agents/fsagent.go | 7 +++---- agents/kamagent.go | 24 +++++++++++++++--------- 3 files changed, 20 insertions(+), 15 deletions(-) diff --git a/agents/astagent.go b/agents/astagent.go index a93065e04..d90b0ca3b 100644 --- a/agents/astagent.go +++ b/agents/astagent.go @@ -362,8 +362,8 @@ func (sma *AsteriskAgent) V1GetActiveSessionIDs(ignParam string, for _, mpIface := range slMpIface { sIDs = append(sIDs, &sessions.SessionID{ OriginHost: strings.Split(sma.cgrCfg.AsteriskAgentCfg().AsteriskConns[sma.astConnIdx].Address, ":")[0], - OriginID: mpIface["id"].(string)}, - ) + OriginID: utils.IfaceAsString(mpIface["id"]), + }) } *sessionIDs = sIDs return nil diff --git a/agents/fsagent.go b/agents/fsagent.go index 37fc28aa8..16615b5d5 100644 --- a/agents/fsagent.go +++ b/agents/fsagent.go @@ -423,12 +423,11 @@ func (fsa *FSsessions) V1GetActiveSessionIDs(_ string, utils.FreeSWITCHAgent, err.Error(), connIdx)) continue } - aChans := fsock.MapChanData(activeChanStr) - for _, fsAChan := range aChans { + for _, fsAChan := range fsock.MapChanData(activeChanStr) { sIDs = append(sIDs, &sessions.SessionID{ OriginHost: fsa.cfg.EventSocketConns[connIdx].Alias, - OriginID: fsAChan["uuid"]}, - ) + OriginID: fsAChan["uuid"], + }) } } *sessionIDs = sIDs diff --git a/agents/kamagent.go b/agents/kamagent.go index 3b1dd3c55..c648ac423 100644 --- a/agents/kamagent.go +++ b/agents/kamagent.go @@ -19,7 +19,6 @@ along with this program. If not, see package agents import ( - "encoding/json" "errors" "fmt" "log" @@ -398,22 +397,29 @@ func (ka *KamailioAgent) V1DisconnectSession(args utils.AttrDisconnectSession, r // V1GetActiveSessionIDs returns a list of CGRIDs based on active sessions from agent func (ka *KamailioAgent) V1GetActiveSessionIDs(ignParam string, sessionIDs *[]*sessions.SessionID) (err error) { - for _, evapi := range ka.conns { - kamEv, _ := json.Marshal(map[string]string{utils.Event: CGR_DLG_LIST}) - if err = evapi.Send(string(kamEv)); err != nil { - utils.Logger.Err(fmt.Sprintf("<%s> failed sending event, error %s", - utils.KamailioAgent, err.Error())) - return + kamEv := utils.ToJSON(map[string]string{utils.Event: CGR_DLG_LIST}) + var sentDLG int + for i, evapi := range ka.conns { + if err := evapi.Send(kamEv); err != nil { + utils.Logger.Err(fmt.Sprintf("<%s> failed sending event to connIdx<%v>, error %s", + utils.KamailioAgent, i, err.Error())) + continue } + sentDLG++ } - for range ka.conns { + if sentDLG == 0 { + return + } + tm := time.NewTimer(config.CgrConfig().GeneralCfg().ReplyTimeout) + for i := 0; i < sentDLG; i++ { select { case sIDs := <-ka.activeSessionIDs: *sessionIDs = append(*sessionIDs, sIDs...) - case <-time.After(5 * time.Second): + case <-tm.C: return errors.New("timeout executing dialog list") } } + tm.Stop() return }