mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-11 18:16:24 +05:00
Add protection in case of disconnect from terminateSession fixes #1531
This commit is contained in:
committed by
Dan Christian Bogos
parent
cfad8290ae
commit
c8db8f2798
@@ -42,7 +42,7 @@ var (
|
||||
|
||||
var sTestsDNS = []func(t *testing.T){
|
||||
testDNSitResetDB,
|
||||
//testDNSitStartEngine,
|
||||
testDNSitStartEngine,
|
||||
testDNSitApierRpcConn,
|
||||
testDNSitTPFromFolder,
|
||||
testDNSitClntConn,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user