mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-11 18:16:24 +05:00
SM-Asterisk using aringo to connect to Asterisk
This commit is contained in:
@@ -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
2
glide.lock
generated
@@ -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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user