SM-Asterisk using aringo to connect to Asterisk

This commit is contained in:
DanB
2016-09-08 21:28:35 +02:00
parent db5267d919
commit b74151bb17
3 changed files with 35 additions and 12 deletions

View File

@@ -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("<SMAsterisk> error: %s!", err))
exitChan <- true
return
}
if err = sma.ListenAndServe(); err != nil {
utils.Logger.Err(fmt.Sprintf("<SMAsterisk> 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("<SMAsterisk> error: %s!", err))
exitChan <- true
return
}
if err = sma.ListenAndServe(); err != nil {
utils.Logger.Err(fmt.Sprintf("<SMAsterisk> runtime error: %s!", err))
}
}
exitChan <- true
}

2
glide.lock generated
View File

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

View File

@@ -18,21 +18,42 @@ along with this program. If not, see <http://www.gnu.org/licenses/>
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
}