mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-23 08:08:45 +05:00
Adding subscribe_park configuration in sm-freeswitch
This commit is contained in:
@@ -32,6 +32,8 @@ func TestRecordForkCdr(t *testing.T) {
|
||||
cgrConfig, _ := config.NewDefaultCGRConfig()
|
||||
cdrcConfig := cgrConfig.CdrcProfiles["/var/log/cgrates/cdrc/in"][utils.META_DEFAULT]
|
||||
cdrcConfig.CdrFields = append(cdrcConfig.CdrFields, &config.CfgCdrField{Tag: "SupplierTest", Type: utils.CDRFIELD, CdrFieldId: "supplier", Value: []*utils.RSRField{&utils.RSRField{Id: "14"}}})
|
||||
cdrcConfig.CdrFields = append(cdrcConfig.CdrFields, &config.CfgCdrField{Tag: "DisconnectCauseTest", Type: utils.CDRFIELD, CdrFieldId: utils.DISCONNECT_CAUSE,
|
||||
Value: []*utils.RSRField{&utils.RSRField{Id: "16"}}})
|
||||
cdrc := &Cdrc{CdrFormat: CSV, cdrSourceIds: []string{"TEST_CDRC"}, cdrFields: [][]*config.CfgCdrField{cdrcConfig.CdrFields}}
|
||||
cdrRow := []string{"firstField", "secondField"}
|
||||
_, err := cdrc.recordToStoredCdr(cdrRow, 0)
|
||||
@@ -39,30 +41,31 @@ func TestRecordForkCdr(t *testing.T) {
|
||||
t.Error("Failed to corectly detect missing fields from record")
|
||||
}
|
||||
cdrRow = []string{"ignored", "ignored", utils.VOICE, "acc1", utils.META_PREPAID, "*out", "cgrates.org", "call", "1001", "1001", "+4986517174963",
|
||||
"2013-02-03 19:50:00", "2013-02-03 19:54:00", "62", "supplier1", "172.16.1.1"}
|
||||
"2013-02-03 19:50:00", "2013-02-03 19:54:00", "62", "supplier1", "172.16.1.1", "NORMAL_DISCONNECT"}
|
||||
rtCdr, err := cdrc.recordToStoredCdr(cdrRow, 0)
|
||||
if err != nil {
|
||||
t.Error("Failed to parse CDR in rated cdr", err)
|
||||
}
|
||||
expectedCdr := &engine.StoredCdr{
|
||||
CgrId: utils.Sha1(cdrRow[3], time.Date(2013, 2, 3, 19, 50, 0, 0, time.UTC).String()),
|
||||
TOR: cdrRow[2],
|
||||
AccId: cdrRow[3],
|
||||
CdrHost: "0.0.0.0", // Got it over internal interface
|
||||
CdrSource: "TEST_CDRC",
|
||||
ReqType: cdrRow[4],
|
||||
Direction: cdrRow[5],
|
||||
Tenant: cdrRow[6],
|
||||
Category: cdrRow[7],
|
||||
Account: cdrRow[8],
|
||||
Subject: cdrRow[9],
|
||||
Destination: cdrRow[10],
|
||||
SetupTime: time.Date(2013, 2, 3, 19, 50, 0, 0, time.UTC),
|
||||
AnswerTime: time.Date(2013, 2, 3, 19, 54, 0, 0, time.UTC),
|
||||
Usage: time.Duration(62) * time.Second,
|
||||
Supplier: "supplier1",
|
||||
ExtraFields: map[string]string{},
|
||||
Cost: -1,
|
||||
CgrId: utils.Sha1(cdrRow[3], time.Date(2013, 2, 3, 19, 50, 0, 0, time.UTC).String()),
|
||||
TOR: cdrRow[2],
|
||||
AccId: cdrRow[3],
|
||||
CdrHost: "0.0.0.0", // Got it over internal interface
|
||||
CdrSource: "TEST_CDRC",
|
||||
ReqType: cdrRow[4],
|
||||
Direction: cdrRow[5],
|
||||
Tenant: cdrRow[6],
|
||||
Category: cdrRow[7],
|
||||
Account: cdrRow[8],
|
||||
Subject: cdrRow[9],
|
||||
Destination: cdrRow[10],
|
||||
SetupTime: time.Date(2013, 2, 3, 19, 50, 0, 0, time.UTC),
|
||||
AnswerTime: time.Date(2013, 2, 3, 19, 54, 0, 0, time.UTC),
|
||||
Usage: time.Duration(62) * time.Second,
|
||||
Supplier: "supplier1",
|
||||
DisconnectCause: "NORMAL_DISCONNECT",
|
||||
ExtraFields: map[string]string{},
|
||||
Cost: -1,
|
||||
}
|
||||
if !reflect.DeepEqual(expectedCdr, rtCdr) {
|
||||
t.Errorf("Expected: \n%v, \nreceived: \n%v", expectedCdr, rtCdr)
|
||||
|
||||
@@ -191,6 +191,7 @@ const CGRATES_CFG_JSON = `
|
||||
"low_balance_ann_file": "", // file to be played when low balance is reached for prepaid calls
|
||||
"empty_balance_context": "", // if defined, prepaid calls will be transfered to this context on empty balance
|
||||
"empty_balance_ann_file": "", // file to be played before disconnecting prepaid calls on empty balance (applies only if no context defined)
|
||||
"subscribe_park": true, // subscribe via fsock to receive park events
|
||||
"connections":[ // instantiate connections to multiple FreeSWITCH servers
|
||||
{"server": "127.0.0.1:8021", "password": "ClueCon", "reconnects": 5}
|
||||
],
|
||||
|
||||
@@ -319,6 +319,7 @@ func TestSmFsJsonCfg(t *testing.T) {
|
||||
Low_balance_ann_file: utils.StringPointer(""),
|
||||
Empty_balance_context: utils.StringPointer(""),
|
||||
Empty_balance_ann_file: utils.StringPointer(""),
|
||||
Subscribe_park: utils.BoolPointer(true),
|
||||
Connections: &[]*FsConnJsonCfg{
|
||||
&FsConnJsonCfg{
|
||||
Server: utils.StringPointer("127.0.0.1:8021"),
|
||||
|
||||
@@ -151,6 +151,7 @@ type SmFsJsonCfg struct {
|
||||
Low_balance_ann_file *string
|
||||
Empty_balance_context *string
|
||||
Empty_balance_ann_file *string
|
||||
Subscribe_park *bool
|
||||
Connections *[]*FsConnJsonCfg
|
||||
}
|
||||
|
||||
|
||||
@@ -69,6 +69,7 @@ type SmFsConfig struct {
|
||||
LowBalanceAnnFile string
|
||||
EmptyBalanceContext string
|
||||
EmptyBalanceAnnFile string
|
||||
SubscribePark bool
|
||||
Connections []*FsConnConfig
|
||||
}
|
||||
|
||||
@@ -126,6 +127,9 @@ func (self *SmFsConfig) loadFromJsonCfg(jsnCfg *SmFsJsonCfg) error {
|
||||
if jsnCfg.Empty_balance_ann_file != nil {
|
||||
self.EmptyBalanceAnnFile = *jsnCfg.Empty_balance_ann_file
|
||||
}
|
||||
if jsnCfg.Subscribe_park != nil {
|
||||
self.SubscribePark = *jsnCfg.Subscribe_park
|
||||
}
|
||||
if jsnCfg.Connections != nil {
|
||||
self.Connections = make([]*FsConnConfig, len(*jsnCfg.Connections))
|
||||
for idx, jsnConnCfg := range *jsnCfg.Connections {
|
||||
|
||||
@@ -26,8 +26,9 @@ import (
|
||||
|
||||
func TesSmFsConfigLoadFromJsonCfg(t *testing.T) {
|
||||
smFsJsnCfg := &SmFsJsonCfg{
|
||||
Enabled: utils.BoolPointer(true),
|
||||
Create_cdr: utils.BoolPointer(true),
|
||||
Enabled: utils.BoolPointer(true),
|
||||
Create_cdr: utils.BoolPointer(true),
|
||||
Subscribe_park: utils.BoolPointer(true),
|
||||
Connections: &[]*FsConnJsonCfg{
|
||||
&FsConnJsonCfg{
|
||||
Server: utils.StringPointer("1.2.3.4:8021"),
|
||||
@@ -42,7 +43,8 @@ func TesSmFsConfigLoadFromJsonCfg(t *testing.T) {
|
||||
},
|
||||
}
|
||||
eSmFsConfig := &SmFsConfig{Enabled: true,
|
||||
CreateCdr: true,
|
||||
CreateCdr: true,
|
||||
SubscribePark: true,
|
||||
Connections: []*FsConnConfig{
|
||||
&FsConnConfig{Server: "1.2.3.4:8021", Password: "ClueCon", Reconnects: 5},
|
||||
&FsConnConfig{Server: "1.2.3.4:8021", Password: "ClueCon", Reconnects: 5},
|
||||
|
||||
@@ -171,6 +171,7 @@
|
||||
// "low_balance_ann_file": "", // file to be played when low balance is reached for prepaid calls
|
||||
// "empty_balance_context": "", // if defined, prepaid calls will be transfered to this context on empty balance
|
||||
// "empty_balance_ann_file": "", // file to be played before disconnecting prepaid calls on empty balance (applies only if no context defined)
|
||||
// "subscribe_park": true, // subscribe via fsock to receive park events
|
||||
// "connections":[ // instantiate connections to multiple FreeSWITCH servers
|
||||
// {"server": "127.0.0.1:8021", "password": "ClueCon", "reconnects": 5}
|
||||
// ],
|
||||
|
||||
@@ -74,11 +74,7 @@ func (sm *FSSessionManager) Connect() error {
|
||||
return err
|
||||
}
|
||||
|
||||
func (sm *FSSessionManager) createHandlers() (handlers map[string][]func(string, string)) {
|
||||
cp := func(body, connId string) {
|
||||
ev := new(FSEvent).AsEvent(body)
|
||||
sm.onChannelPark(ev, connId)
|
||||
}
|
||||
func (sm *FSSessionManager) createHandlers() map[string][]func(string, string) {
|
||||
ca := func(body, connId string) {
|
||||
ev := new(FSEvent).AsEvent(body)
|
||||
sm.onChannelAnswer(ev, connId)
|
||||
@@ -87,11 +83,18 @@ func (sm *FSSessionManager) createHandlers() (handlers map[string][]func(string,
|
||||
ev := new(FSEvent).AsEvent(body)
|
||||
sm.onChannelHangupComplete(ev)
|
||||
}
|
||||
return map[string][]func(string, string){
|
||||
"CHANNEL_PARK": []func(string, string){cp},
|
||||
handlers := map[string][]func(string, string){
|
||||
"CHANNEL_ANSWER": []func(string, string){ca},
|
||||
"CHANNEL_HANGUP_COMPLETE": []func(string, string){ch},
|
||||
}
|
||||
if sm.cfg.SubscribePark {
|
||||
cp := func(body, connId string) {
|
||||
ev := new(FSEvent).AsEvent(body)
|
||||
sm.onChannelPark(ev, connId)
|
||||
}
|
||||
handlers["CHANNEL_PARK"] = []func(string, string){cp}
|
||||
}
|
||||
return handlers
|
||||
}
|
||||
|
||||
// Searches and return the session with the specifed uuid
|
||||
|
||||
Reference in New Issue
Block a user