Start circuit reset when un unexpected (no existing call) call message is received.

git-svn-id: http://voip.null.ro/svn/yate@3519 acf43c95-373e-0410-b603-e72c3f656dc1
This commit is contained in:
marian 2010-08-26 07:08:23 +00:00
parent fcc3790794
commit b56eb0ad88
2 changed files with 18 additions and 3 deletions

View File

@ -2852,6 +2852,7 @@ SS7ISUP::SS7ISUP(const NamedList& params, unsigned char sio)
m_t13Interval(300000), // Q.764 T13 (BLK global) 5..15 minutes
m_t14Interval(20000), // Q.764 T14 (UBL) 15..60 seconds
m_t15Interval(300000), // Q.764 T15 (UBL global) 5..15 minutes
m_t16Interval(20000), // Q.764 T16 (RSC) 15..60 seconds
m_t17Interval(300000), // Q.764 T17 5..15 minutes
m_t18Interval(20000), // Q.764 T18 (CGB) 15..60 seconds
m_t19Interval(300000), // Q.764 T19 (CGB global) 5..15 minutes
@ -4071,7 +4072,12 @@ bool SS7ISUP::startCircuitReset(SignallingCircuit*& cic, const String& timer)
"Starting circuit %u reset on timer %s [%p]",
cic->code(),timer.c_str(),this);
// TODO: alert maintenance if T5 timer expired
SignallingMessageTimer* m = m_pending.add(m_t17Interval);
SignallingMessageTimer* m = 0;
if (relTimeout)
m = new SignallingMessageTimer(m_t17Interval);
else
m = new SignallingMessageTimer(m_t16Interval,m_t17Interval);
m = m_pending.add(m);
if (m) {
cic->setLock(SignallingCircuit::Resetting);
SS7MsgISUP* msg = new SS7MsgISUP(SS7MsgISUP::RSC,cic->code());
@ -4110,8 +4116,16 @@ void SS7ISUP::processCallMsg(SS7MsgISUP* msg, const SS7Label& label, int sls)
DROP_MSG("invalid CIC")
// non IAM message. Drop it if there is no call for it
if ((msg->type() != SS7MsgISUP::IAM) && (msg->type() != SS7MsgISUP::CCR)) {
if (!call)
DROP_MSG("no call for this CIC")
if (!call) {
if (msg->type() != SS7MsgISUP::RLC) {
// Initiate circuit reset
SignallingCircuit* cic = 0;
String s(msg->cic());
if (reserveCircuit(cic,0,SignallingCircuit::LockLockedBusy,&s))
startCircuitReset(cic,"T16");
}
return;
}
break;
}
// IAM or CCR message

View File

@ -7682,6 +7682,7 @@ private:
u_int64_t m_t13Interval; // Q.764 T13 BLK global timer interval
u_int64_t m_t14Interval; // Q.764 T14 UBL timer interval
u_int64_t m_t15Interval; // Q.764 T15 UBL global timer interval
u_int64_t m_t16Interval; // Q.764 T16 RSC timer interval
u_int64_t m_t17Interval; // Q.764 T17 timer interval
u_int64_t m_t18Interval; // Q.764 T18 CGB timer interval
u_int64_t m_t19Interval; // Q.764 T19 CGB global timer interval