Make sure to turn off any ring signals when a call is answered.

Only clear active MGCP signals when entering Connected state, not if already in that state.


git-svn-id: http://yate.null.ro/svn/yate/trunk@4077 acf43c95-373e-0410-b603-e72c3f656dc1
This commit is contained in:
paulc 2011-01-27 11:19:56 +00:00
parent 15f7933a3a
commit 6a6308f573
2 changed files with 8 additions and 6 deletions

View File

@ -1486,10 +1486,11 @@ bool MGCPCircuit::status(Status newStat, bool sync)
}
allowRtpChange = SignallingCircuit::status() == Connected &&
hasLocalRtp() && m_localRtpChanged;
if (SignallingCircuit::status() != Connected
&& mySpan()->rqntType() != MGCPSpan::RqntNone
&& !(fxs() || fxo()))
sendRequest(0,mySpan()->rqntStr());
if (SignallingCircuit::status() != Connected) {
if (mySpan()->rqntType() != MGCPSpan::RqntNone && !(fxs() || fxo()))
sendRequest(0,mySpan()->rqntStr());
sendPending();
}
}
if (!allowRtpChange && (newStat == m_statusReq) &&
((SignallingCircuit::status() == newStat) || !sync)) {
@ -1682,12 +1683,11 @@ bool MGCPCircuit::sendEvent(SignallingCircuitEvent::Type type, NamedList* params
case SignallingCircuitEvent::Connect:
if (params)
setParams(*params);
sendPending();
return status(Connected,!params || params->getBoolValue("sync",true));
case SignallingCircuitEvent::RingBegin:
return fxs() && sendPending("L/rg");
case SignallingCircuitEvent::RingEnd:
return fxs() && sendPending();
return sendPending();
case SignallingCircuitEvent::Polarity:
return fxs() && sendRequest("L/lsa");
case SignallingCircuitEvent::OffHook:

View File

@ -1105,6 +1105,7 @@ bool SigChannel::msgAnswered(Message& msg)
// Start echo training
SignallingCircuit* cic = getCircuit();
if (cic) {
cic->sendEvent(SignallingCircuitEvent::RingEnd);
String value;
cic->setParam("echotrain",value);
}
@ -1430,6 +1431,7 @@ void SigChannel::evAnswer(SignallingEvent* event)
// Start echo training
SignallingCircuit* cic = getCircuit();
if (cic) {
cic->sendEvent(SignallingCircuitEvent::RingEnd);
String value;
cic->setParam("echotrain",value);
}