diff --git a/config/config_defaults.go b/config/config_defaults.go index e67878b2e..8b0f2cd1a 100644 --- a/config/config_defaults.go +++ b/config/config_defaults.go @@ -337,10 +337,7 @@ const CGRATES_CFG_JSON = ` "sm_generic_conns": [ {"address": "*internal"} // connection towards SMG component for session management ], - "session_terminate_subscriber": {"address": "*internal"}, // handler for session_terminate events generated by SMG - "debit_interval": "10s", // interval to perform debits on. - "min_call_duration": "0s", // only authorize calls with allowed duration higher than this - "max_call_duration": "3h", // maximum call duration a prepaid call can last + "create_cdr": false, // create CDR out of events and sends it to CDRS component "asterisk_conns":[ // instantiate connections to multiple Asterisk servers {"address": "127.0.0.1:8088", "user": "cgrates", "password": "CGRateS.org", "connect_attempts": 3,"reconnects": 5} ], diff --git a/config/config_json_test.go b/config/config_json_test.go index ca9a1576c..a53392b8f 100644 --- a/config/config_json_test.go +++ b/config/config_json_test.go @@ -524,10 +524,7 @@ func TestSmAsteriskJsonCfg(t *testing.T) { &HaPoolJsonCfg{ Address: utils.StringPointer(utils.MetaInternal), }}, - Session_terminate_subscriber: &HaPoolJsonCfg{Address: utils.StringPointer(utils.MetaInternal)}, - Debit_interval: utils.StringPointer("10s"), - Min_call_duration: utils.StringPointer("0s"), - Max_call_duration: utils.StringPointer("3h"), + Create_cdr: utils.BoolPointer(false), Asterisk_conns: &[]*AstConnJsonCfg{ &AstConnJsonCfg{ Address: utils.StringPointer("127.0.0.1:8088"), diff --git a/config/libconfig_json.go b/config/libconfig_json.go index 4826d9601..759e46da4 100644 --- a/config/libconfig_json.go +++ b/config/libconfig_json.go @@ -224,13 +224,10 @@ type AstConnJsonCfg struct { } type SMAsteriskJsonCfg struct { - Enabled *bool - Sm_generic_conns *[]*HaPoolJsonCfg // Connections towards generic SM - Session_terminate_subscriber *HaPoolJsonCfg - Debit_interval *string - Min_call_duration *string - Max_call_duration *string - Asterisk_conns *[]*AstConnJsonCfg + Enabled *bool + Sm_generic_conns *[]*HaPoolJsonCfg // Connections towards generic SMf + Create_cdr *bool + Asterisk_conns *[]*AstConnJsonCfg } type CacheParamJsonCfg struct { diff --git a/config/smconfig.go b/config/smconfig.go index 164d6c6f5..ff366450f 100644 --- a/config/smconfig.go +++ b/config/smconfig.go @@ -473,13 +473,10 @@ func (aConnCfg *AsteriskConnCfg) loadFromJsonCfg(jsnCfg *AstConnJsonCfg) error { } type SMAsteriskCfg struct { - Enabled bool - SMGConns []*HaPoolConfig - SessionTerminateSubscriber *HaPoolConfig - DebitInterval time.Duration - MinCallDuration time.Duration - MaxCallDuration time.Duration - AsteriskConns []*AsteriskConnCfg + Enabled bool + SMGConns []*HaPoolConfig + CreateCDR bool + AsteriskConns []*AsteriskConnCfg } func (aCfg *SMAsteriskCfg) loadFromJsonCfg(jsnCfg *SMAsteriskJsonCfg) (err error) { @@ -493,24 +490,8 @@ func (aCfg *SMAsteriskCfg) loadFromJsonCfg(jsnCfg *SMAsteriskJsonCfg) (err error aCfg.SMGConns[idx].loadFromJsonCfg(jsnHaCfg) } } - if jsnCfg.Session_terminate_subscriber != nil { - aCfg.SessionTerminateSubscriber = NewDfltHaPoolConfig() - aCfg.SessionTerminateSubscriber.loadFromJsonCfg(jsnCfg.Session_terminate_subscriber) - } - if jsnCfg.Debit_interval != nil { - if aCfg.DebitInterval, err = utils.ParseDurationWithSecs(*jsnCfg.Debit_interval); err != nil { - return err - } - } - if jsnCfg.Min_call_duration != nil { - if aCfg.MinCallDuration, err = utils.ParseDurationWithSecs(*jsnCfg.Min_call_duration); err != nil { - return err - } - } - if jsnCfg.Max_call_duration != nil { - if aCfg.MaxCallDuration, err = utils.ParseDurationWithSecs(*jsnCfg.Max_call_duration); err != nil { - return err - } + if jsnCfg.Create_cdr != nil { + aCfg.CreateCDR = *jsnCfg.Create_cdr } if jsnCfg.Asterisk_conns != nil { aCfg.AsteriskConns = make([]*AsteriskConnCfg, len(*jsnCfg.Asterisk_conns)) diff --git a/sessionmanager/smasterisk.go b/sessionmanager/smasterisk.go index 28eab4f9b..7fe26a3a1 100644 --- a/sessionmanager/smasterisk.go +++ b/sessionmanager/smasterisk.go @@ -125,24 +125,23 @@ func (sma *SMAsterisk) handleStasisStart(ev *SMAsteriskEvent) { } return } - if maxUsage == -1 { - maxUsage = 0 // So we can set it later as unlimited - } else if maxUsage == 0 || maxUsage < sma.cgrCfg.SMAsteriskCfg().MinCallDuration.Seconds() { + if maxUsage == 0 { if err := sma.hangupChannel(ev.ChannelID()); err != nil { utils.Logger.Err(fmt.Sprintf(" Error: %s when attempting to disconnect channelID: %s", err.Error(), ev.ChannelID())) } return - } - // Call allowed, set absolute timeout - if _, err := sma.astConn.Call(aringo.HTTP_POST, fmt.Sprintf("http://%s/ari/channels/%s/variable?variable=%s", // Asterisk having issue with variable terminating empty so harcoding param in url - sma.cgrCfg.SMAsteriskCfg().AsteriskConns[sma.astConnIdx].Address, ev.ChannelID(), CGRMaxSessionTime), - url.Values{"value": {strconv.FormatFloat(maxUsage*1000, 'f', -1, 64)}}); err != nil { // Asterisk expects value in ms - utils.Logger.Err(fmt.Sprintf(" Error: %s when setting %s for channelID: %s", err.Error(), CGRMaxSessionTime, ev.ChannelID())) - // Since we got error, disconnect channel - if err := sma.hangupChannel(ev.ChannelID()); err != nil { - utils.Logger.Err(fmt.Sprintf(" Error: %s when attempting to disconnect channelID: %s", err.Error(), ev.ChannelID())) + } else if maxUsage != -1 { + // Set absolute timeout for non-postpaid calls + if _, err := sma.astConn.Call(aringo.HTTP_POST, fmt.Sprintf("http://%s/ari/channels/%s/variable?variable=%s", // Asterisk having issue with variable terminating empty so harcoding param in url + sma.cgrCfg.SMAsteriskCfg().AsteriskConns[sma.astConnIdx].Address, ev.ChannelID(), CGRMaxSessionTime), + url.Values{"value": {strconv.FormatFloat(maxUsage*1000, 'f', -1, 64)}}); err != nil { // Asterisk expects value in ms + utils.Logger.Err(fmt.Sprintf(" Error: %s when setting %s for channelID: %s", err.Error(), CGRMaxSessionTime, ev.ChannelID())) + // Since we got error, disconnect channel + if err := sma.hangupChannel(ev.ChannelID()); err != nil { + utils.Logger.Err(fmt.Sprintf(" Error: %s when attempting to disconnect channelID: %s", err.Error(), ev.ChannelID())) + } + return } - return } // Exit channel from stasis @@ -183,7 +182,7 @@ func (sma *SMAsterisk) handleChannelStateChange(ev *SMAsteriskEvent) { utils.Logger.Err(fmt.Sprintf(" Error: %s when attempting to disconnect channelID: %s", err.Error(), ev.ChannelID())) } return - } else if maxUsage != -1 && (maxUsage == 0 || maxUsage < sma.cgrCfg.SMAsteriskCfg().MinCallDuration.Seconds()) { + } else if maxUsage == 0 { if err := sma.hangupChannel(ev.ChannelID()); err != nil { utils.Logger.Err(fmt.Sprintf(" Error: %s when attempting to disconnect channelID: %s", err.Error(), ev.ChannelID())) } @@ -213,8 +212,10 @@ func (sma *SMAsterisk) handleChannelDestroyed(ev *SMAsteriskEvent) { if err := sma.smg.Call("SMGenericV1.TerminateSession", *smgEv, &reply); err != nil { utils.Logger.Err(fmt.Sprintf(" Error: %s when attempting to terminate session for channelID: %s", err.Error(), ev.ChannelID())) } - if err := sma.smg.Call("SMGenericV1.ProcessCDR", *smgEv, &reply); err != nil { - utils.Logger.Err(fmt.Sprintf(" Error: %s when attempting to process CDR for channelID: %s", err.Error(), ev.ChannelID())) + if sma.cgrCfg.SMAsteriskCfg().CreateCDR { + if err := sma.smg.Call("SMGenericV1.ProcessCDR", *smgEv, &reply); err != nil { + utils.Logger.Err(fmt.Sprintf(" Error: %s when attempting to process CDR for channelID: %s", err.Error(), ev.ChannelID())) + } } }