diff --git a/agents/dnsagent_it_test.go b/agents/dnsagent_it_test.go index 6d9e4cf0d..0de2588ef 100644 --- a/agents/dnsagent_it_test.go +++ b/agents/dnsagent_it_test.go @@ -42,7 +42,7 @@ var ( var sTestsDNS = []func(t *testing.T){ testDNSitResetDB, - //testDNSitStartEngine, + testDNSitStartEngine, testDNSitApierRpcConn, testDNSitTPFromFolder, testDNSitClntConn, diff --git a/agents/fsagent.go b/agents/fsagent.go index c2290feed..d0094676e 100644 --- a/agents/fsagent.go +++ b/agents/fsagent.go @@ -150,6 +150,7 @@ func (sm *FSsessions) onChannelPark(fsev FSEvent, connId string) { } fsev[VarCGROriginHost] = sm.conns[connId].cfg.Alias authArgs := fsev.V1AuthorizeArgs() + authArgs.CGREvent.Event[FsConnID] = connId // Attach the connection ID var authReply sessions.V1AuthorizeReply if err := sm.sS.Call(utils.SessionSv1AuthorizeEvent, authArgs, &authReply); err != nil { utils.Logger.Err( @@ -254,8 +255,10 @@ func (sm *FSsessions) onChannelHangupComplete(fsev FSEvent, connId string) { var reply string fsev[VarCGROriginHost] = sm.conns[connId].cfg.Alias if fsev[VarAnswerEpoch] != "0" { // call was answered + terminateSessionArgs := fsev.V1TerminateSessionArgs() + terminateSessionArgs.CGREvent.Event[FsConnID] = connId // Attach the connection ID in case we need to create a session and disconnect it if err := sm.sS.Call(utils.SessionSv1TerminateSession, - fsev.V1TerminateSessionArgs(), &reply); err != nil { + terminateSessionArgs, &reply); err != nil { utils.Logger.Err( fmt.Sprintf("<%s> Could not terminate session with event %s, error: %s", utils.FreeSWITCHAgent, fsev.GetUUID(), err.Error())) @@ -374,11 +377,18 @@ func (sm *FSsessions) Call(serviceMethod string, args interface{}, reply interfa return utils.RPCCall(sm, serviceMethod, args, reply) } -// Internal method to disconnect session in asterisk +// Internal method to disconnect session in FreeSWITCH func (fsa *FSsessions) V1DisconnectSession(args utils.AttrDisconnectSession, reply *string) (err error) { ev := engine.NewMapEvent(args.EventStart) channelID := ev.GetStringIgnoreErrors(utils.OriginID) - if err = fsa.disconnectSession(ev.GetStringIgnoreErrors(FsConnID), channelID, + connID, err := ev.GetString(FsConnID) + if err != nil { + utils.Logger.Err( + fmt.Sprintf("<%s> error: <%s:%s> when attempting to disconnect channelID: <%s>", + utils.FreeSWITCHAgent, err.Error(), FsConnID, channelID)) + return + } + if err = fsa.disconnectSession(connID, channelID, utils.FirstNonEmpty(ev.GetStringIgnoreErrors(CALL_DEST_NR), ev.GetStringIgnoreErrors(SIP_REQ_USER)), utils.ErrInsufficientCredit.Error()); err != nil { return diff --git a/agents/kamagent.go b/agents/kamagent.go index b565fa315..a6abf417e 100644 --- a/agents/kamagent.go +++ b/agents/kamagent.go @@ -118,6 +118,7 @@ func (ka *KamailioAgent) onCgrAuth(evData []byte, connID string) { return } authArgs.CGREvent.Event[utils.OriginHost] = ka.conns[connID].RemoteAddr().String() + authArgs.CGREvent.Event[EvapiConnID] = connID // Attach the connection ID var authReply sessions.V1AuthorizeReply err = ka.sessionS.Call(utils.SessionSv1AuthorizeEvent, authArgs, &authReply) if kar, err := kev.AsKamAuthReply(authArgs, &authReply, err); err != nil { @@ -190,6 +191,7 @@ func (ka *KamailioAgent) onCallEnd(evData []byte, connID string) { } var reply string tsArgs.CGREvent.Event[utils.OriginHost] = ka.conns[connID].RemoteAddr().String() + tsArgs.CGREvent.Event[EvapiConnID] = connID // Attach the connection ID in case we need to create a session and disconnect it if err := ka.sessionS.Call(utils.SessionSv1TerminateSession, tsArgs, &reply); err != nil { utils.Logger.Err( @@ -251,7 +253,15 @@ func (ka *KamailioAgent) V1DisconnectSession(args utils.AttrDisconnectSession, r if err != nil { return err } - connID, err := utils.IfaceAsString(args.EventStart[EvapiConnID]) + connIDIface, has := args.EventStart[EvapiConnID] + if !has { + utils.Logger.Err( + fmt.Sprintf("<%s> error: <%s:%s> when attempting to disconnect <%s:%s> and <%s:%s>", + utils.KamailioAgent, utils.ErrNotFound.Error(), EvapiConnID, + KamHashEntry, hEntry, KamHashID, hID)) + return + } + connID, err := utils.IfaceAsString(connIDIface) if err != nil { return err } diff --git a/data/tutorials/fs_evsock/cgrates/etc/cgrates/cgrates.json b/data/tutorials/fs_evsock/cgrates/etc/cgrates/cgrates.json index 2755610ab..c044b42bf 100644 --- a/data/tutorials/fs_evsock/cgrates/etc/cgrates/cgrates.json +++ b/data/tutorials/fs_evsock/cgrates/etc/cgrates/cgrates.json @@ -42,6 +42,9 @@ "stats_conns": [ {"address": "127.0.0.1:2012", "transport": "*json"}, ], + "chargers_conns": [ + {"address": "*internal"} + ], "sessions_cost_retries": 5, }, @@ -77,6 +80,9 @@ "thresholds_conns": [ {"address": "127.0.0.1:2012", "transport": "*json"}, ], + "chargers_conns": [ + {"address": "*internal"} + ], "store_session_costs": true, "debit_interval": "5s", "channel_sync_interval":"7s", diff --git a/data/tutorials/osips_native/cgrates/etc/cgrates/cgrates.json b/data/tutorials/osips_native/cgrates/etc/cgrates/cgrates.json index ae6934f03..71de649cf 100644 --- a/data/tutorials/osips_native/cgrates/etc/cgrates/cgrates.json +++ b/data/tutorials/osips_native/cgrates/etc/cgrates/cgrates.json @@ -41,6 +41,9 @@ "stats_conns": [ {"address": "*internal"} ], + "chargers_conns": [ + {"address": "*internal"} + ], "sessions_cost_retries": 5, }, @@ -77,6 +80,9 @@ "thresholds_conns": [ {"address": "*internal"} ], + "chargers_conns": [ + {"address": "*internal"} + ], "store_session_costs": true, "debit_interval": "10s", "channel_sync_interval":"7s",