From b74151bb17987f02e55ec9d03dacaff405b70263 Mon Sep 17 00:00:00 2001 From: DanB Date: Thu, 8 Sep 2016 21:28:35 +0200 Subject: [PATCH] SM-Asterisk using aringo to connect to Asterisk --- cmd/cgr-engine/cgr-engine.go | 18 ++++++++++-------- glide.lock | 2 +- sessionmanager/smasterisk.go | 27 ++++++++++++++++++++++++--- 3 files changed, 35 insertions(+), 12 deletions(-) diff --git a/cmd/cgr-engine/cgr-engine.go b/cmd/cgr-engine/cgr-engine.go index 52f06cba2..692de435c 100644 --- a/cmd/cgr-engine/cgr-engine.go +++ b/cmd/cgr-engine/cgr-engine.go @@ -183,14 +183,16 @@ func startSMAsterisk(internalSMGChan chan rpcclient.RpcClientConnection, exitCha return } } - sma, err := sessionmanager.NewSMAsterisk(cfg, smgConn) - if err != nil { - utils.Logger.Err(fmt.Sprintf(" error: %s!", err)) - exitChan <- true - return - } - if err = sma.ListenAndServe(); err != nil { - utils.Logger.Err(fmt.Sprintf(" runtime error: %s!", err)) + for connIdx := range cfg.SMAsteriskCfg().AsteriskConns { // Instantiate connections towards asterisk servers + sma, err := sessionmanager.NewSMAsterisk(cfg, connIdx, smgConn) + if err != nil { + utils.Logger.Err(fmt.Sprintf(" error: %s!", err)) + exitChan <- true + return + } + if err = sma.ListenAndServe(); err != nil { + utils.Logger.Err(fmt.Sprintf(" runtime error: %s!", err)) + } } exitChan <- true } diff --git a/glide.lock b/glide.lock index b4b86d32e..0908cbd03 100644 --- a/glide.lock +++ b/glide.lock @@ -8,7 +8,7 @@ imports: - name: github.com/cenk/rpc2 version: 7ab76d2e88c77ca1a715756036d8264b2886acd2 - name: github.com/cgrates/aringo - version: 039f5c2edbf9db9ec170f10c5e78f1248c365331 + version: fd546dbf48a7901754d414a345dc8d5572cb7c48 - name: github.com/cgrates/fsock version: a8ffdbdfc8440016df008ba91e6f05f806d7a69f - name: github.com/cgrates/kamevapi diff --git a/sessionmanager/smasterisk.go b/sessionmanager/smasterisk.go index ca3658c7b..b85211aa7 100644 --- a/sessionmanager/smasterisk.go +++ b/sessionmanager/smasterisk.go @@ -18,21 +18,42 @@ along with this program. If not, see package sessionmanager import ( + "fmt" + + "github.com/cgrates/aringo" "github.com/cgrates/cgrates/config" "github.com/cgrates/rpcclient" ) -func NewSMAsterisk(cgrCfg *config.CGRConfig, smg rpcclient.RpcClientConnection) (*SMAsterisk, error) { +const ( + CGRAuthAPP = "cgrates_auth" +) + +func NewSMAsterisk(cgrCfg *config.CGRConfig, astConnIdx int, smg rpcclient.RpcClientConnection) (*SMAsterisk, error) { return &SMAsterisk{cgrCfg: cgrCfg, smg: smg}, nil } type SMAsterisk struct { - cgrCfg *config.CGRConfig // Separate from smCfg since there can be multiple - smg rpcclient.RpcClientConnection + cgrCfg *config.CGRConfig // Separate from smCfg since there can be multiple + astConnIdx int + smg rpcclient.RpcClientConnection + astConn *aringo.ARInGO +} + +func (sma *SMAsterisk) connectAsterisk() error { + connCfg := sma.cgrCfg.SMAsteriskCfg().AsteriskConns[sma.astConnIdx] + _, err := aringo.NewARInGO(fmt.Sprintf("ws://%s/ari/events?api_key=%s:%s&app=%s", connCfg.Address, connCfg.User, connCfg.Password, CGRAuthAPP), connCfg.Reconnects) + if err != nil { + return err + } + return nil } // Called to start the service func (sma *SMAsterisk) ListenAndServe() error { + if err := sma.connectAsterisk(); err != nil { + return err + } return nil }