diff --git a/agents/fsagent.go b/agents/fsagent.go index 0709d7661..acfe07fbc 100644 --- a/agents/fsagent.go +++ b/agents/fsagent.go @@ -283,33 +283,34 @@ func (sm *FSsessions) onChannelHangupComplete(fsev FSEvent, connIdx int) { // Connects to the freeswitch mod_event_socket server and starts // listening for events. -func (sm *FSsessions) Connect() error { +func (fsa *FSsessions) Connect() error { eventFilters := map[string][]string{"Call-Direction": {"inbound"}} - errChan := make(chan error) - for connIdx, connCfg := range sm.cfg.EventSocketConns { - fSock, err := fsock.NewFSock(connCfg.Address, connCfg.Password, connCfg.Reconnects, 0, utils.FibDuration, - sm.createHandlers(), eventFilters, utils.Logger, connIdx, true) + connErr := make(chan error) + for connIdx, connCfg := range fsa.cfg.EventSocketConns { + fSock, err := fsock.NewFSock( + connCfg.Address, connCfg.Password, + connCfg.Reconnects, 0, + 0, utils.FibDuration, + fsa.createHandlers(), eventFilters, + utils.Logger, connIdx, true, connErr) if err != nil { return err } if !fSock.Connected() { - return errors.New("could not connect to FreeSWITCH") + return errors.New("Could not connect to FreeSWITCH") } - sm.conns[connIdx] = fSock + fsa.conns[connIdx] = fSock utils.Logger.Info(fmt.Sprintf("<%s> successfully connected to FreeSWITCH at: <%s>", utils.FreeSWITCHAgent, connCfg.Address)) - go func(fsock *fsock.FSock) { // Start reading in own goroutine, return on error - if err := fsock.ReadEvents(); err != nil { - errChan <- err - } - }(fSock) - fsSenderPool := fsock.NewFSockPool(5, connCfg.Address, connCfg.Password, 1, sm.cfg.MaxWaitConnection, 0, utils.FibDuration, - make(map[string][]func(string, int)), make(map[string][]string), utils.Logger.GetSyslog(), connIdx, true) + fsSenderPool := fsock.NewFSockPool(5, connCfg.Address, connCfg.Password, 1, fsa.cfg.MaxWaitConnection, + 0, 0, utils.FibDuration, + make(map[string][]func(string, int)), make(map[string][]string), + utils.Logger, connIdx, true, nil) if fsSenderPool == nil { - return errors.New("cannot connect FreeSWITCH senders pool") + return errors.New("Cannot connect FreeSWITCH senders pool") } - sm.senderPools[connIdx] = fsSenderPool + fsa.senderPools[connIdx] = fsSenderPool } - err := <-errChan // Will keep the Connect locked until the first error in one of the connections + err := <-connErr // Will keep the Connect locked until the first error in one of the connections return err } @@ -419,14 +420,16 @@ func (fsa *FSsessions) V1GetActiveSessionIDs(ignParam 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"], + }) } } + if len(sIDs) == 0 { + return utils.ErrNoActiveSession + } *sessionIDs = sIDs return } diff --git a/agents/fsagent_test.go b/agents/fsagent_test.go index 03fbeeb2a..8be91c54c 100644 --- a/agents/fsagent_test.go +++ b/agents/fsagent_test.go @@ -23,6 +23,7 @@ import ( "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/sessions" + "github.com/cgrates/cgrates/utils" "github.com/cgrates/fsock" ) @@ -127,7 +128,7 @@ func TestFSsessionsV1GetActiveSessionIDsErrorHandling(t *testing.T) { sm := &FSsessions{} var sessionIDs []*sessions.SessionID err := sm.V1GetActiveSessionIDs("", &sessionIDs) - if err != nil { + if err == nil || err != utils.ErrNoActiveSession { t.Errorf("Unexpected error: %v", err) } if len(sessionIDs) != 0 { diff --git a/go.mod b/go.mod index ab551a5d5..a4c71bbed 100644 --- a/go.mod +++ b/go.mod @@ -12,7 +12,7 @@ require ( github.com/cenkalti/rpc2 v1.0.3 github.com/cgrates/aringo v0.0.0-20220525160735-b5990313d99e github.com/cgrates/birpc v1.3.1-0.20211117095917-5b0ff29f3084 - github.com/cgrates/fsock v0.0.0-20231222174700-7257ce894e23 + github.com/cgrates/fsock v0.0.0-20240522220429-b6cc1d96fd2b github.com/cgrates/kamevapi v0.0.0-20240307160311-26273f03eedf github.com/cgrates/ltcache v0.0.0-20240411152156-e673692056db github.com/cgrates/radigo v0.0.0-20240123163129-491c899df727 diff --git a/go.sum b/go.sum index 83a216048..37a7297f0 100644 --- a/go.sum +++ b/go.sum @@ -29,8 +29,8 @@ github.com/cgrates/aringo v0.0.0-20220525160735-b5990313d99e h1:jbScwE0ebeCBD9Cs github.com/cgrates/aringo v0.0.0-20220525160735-b5990313d99e/go.mod h1:v+wPvWvfle06wQ7WBJZGXvrF+CWA0CrReh+c3PuXaAU= github.com/cgrates/birpc v1.3.1-0.20211117095917-5b0ff29f3084 h1:YIEepjEOjeHaFrewWaar/JkXYiDgO7gRw/R1zWITxEw= github.com/cgrates/birpc v1.3.1-0.20211117095917-5b0ff29f3084/go.mod h1:z/PmNnDPqSQALedKJv5T8+eXIq6XHa9J0St1YsvAVns= -github.com/cgrates/fsock v0.0.0-20231222174700-7257ce894e23 h1:AElRJimochzP6ghx3/sVtV0oPyqiAMwd3ovo4s5YnqM= -github.com/cgrates/fsock v0.0.0-20231222174700-7257ce894e23/go.mod h1:5A9wag324AzIlaDd7tpPDAg26ouUO1orarAq7Vxr4As= +github.com/cgrates/fsock v0.0.0-20240522220429-b6cc1d96fd2b h1:PQzDye+0GcgJ3cKG5NcAOjdRyX0v76ZFkolu3X70fbs= +github.com/cgrates/fsock v0.0.0-20240522220429-b6cc1d96fd2b/go.mod h1:bKByLko2HF33K+PbiiToAgevrrbr96C+7Pp3HGS6oag= github.com/cgrates/kamevapi v0.0.0-20240307160311-26273f03eedf h1:GbMJzvtwdX1OCEmsqSts/cRCIcIMvo8AYtC2dQExWlg= github.com/cgrates/kamevapi v0.0.0-20240307160311-26273f03eedf/go.mod h1:oEq/JbubkOD2pXHvDy4r7519NkxriONisrnVpkCaNJw= github.com/cgrates/ltcache v0.0.0-20240411152156-e673692056db h1:JRgzMS5kJ1WxaveoZ1YG/FowUDxFQXD3GjCHR7rH0Gk=