Added method so User Part Unavailable notifications can be received from Management.

git-svn-id: http://voip.null.ro/svn/yate@3572 acf43c95-373e-0410-b603-e72c3f656dc1
This commit is contained in:
paulc 2010-08-29 21:28:10 +00:00
parent f14d8b6197
commit b6e927ad2e
4 changed files with 84 additions and 0 deletions

View File

@ -4169,6 +4169,14 @@ bool SS7ISUP::processMSU(SS7MsgISUP::Type type, unsigned int cic,
return true;
}
// MTP notification that remote user part is unavailable
void SS7ISUP::receivedUPU(SS7PointCode::Type type, const SS7PointCode node,
SS7MSU::Services part, unsigned char cause, const SS7Label& label, int sls)
{
if (part != sif() || !handlesRemotePC(node))
return;
}
// Process an event received from a non-reserved circuit
SignallingEvent* SS7ISUP::processCircuitEvent(SignallingCircuitEvent*& event,
SignallingCall* call)

View File

@ -520,6 +520,15 @@ HandledMSU SS7Management::receivedMSU(const SS7MSU& msu, const SS7Label& label,
msg->params().getValue("part","?"),
msg->params().getValue("destination","?"),
msg->params().getValue("cause","?"));
if (router) {
unsigned char part = msg->params().getIntValue("part",-1);
unsigned char cause = msg->params().getIntValue("cause",-1);
SS7PointCode pc;
if (part > SS7MSU::MTNS && part <= 0x0f && cause <= 0x0f &&
pc.assign(msg->params().getValue("destination"),label.type()))
router->receivedUPU(label.type(),pc,(SS7MSU::Services)part,
cause,label,sls);
}
}
else {
String tmp;

View File

@ -840,6 +840,27 @@ void SS7Router::recoverMSU(const SS7Label& link, int sequence)
}
}
void SS7Router::receivedUPU(SS7PointCode::Type type, const SS7PointCode node,
SS7MSU::Services part, unsigned char cause, const SS7Label& label, int sls)
{
// Iterate and notify all User Parts
lock();
ListIterator iter(m_layer4);
while (L4Pointer* p = static_cast<L4Pointer*>(iter.get())) {
if (p && *p) {
RefPointer<SS7Layer4> l4 = static_cast<SS7Layer4*>(*p);
if (!l4)
continue;
unlock();
l4->receivedUPU(type,node,part,cause,label,sls);
l4 = 0;
lock();
}
}
unlock();
}
void SS7Router::notify(SS7Layer3* network, int sls)
{
DDebug(this,DebugInfo,"Notified %s on %p sls %d [%p]",

View File

@ -5371,6 +5371,19 @@ protected:
virtual bool recoveredMSU(const SS7MSU& msu, const SS7Label& label, SS7Layer3* network, int sls)
{ return false; }
/**
* Notification for receiving User Part Unavailable
* @param type Type of Point Code
* @param node Node on which the User Part is unavailable
* @param part User Part (service) reported unavailable
* @param cause Unavailability cause - Q.704 15.17.5
* @param label Routing label of the UPU message
* @param sls Signaling link the UPU was received on
*/
virtual void receivedUPU(SS7PointCode::Type type, const SS7PointCode node,
SS7MSU::Services part, unsigned char cause, const SS7Label& label, int sls)
{ }
/**
* Process a notification generated by the attached network layer
* @param link Network or linkset that generated the notification
@ -5442,6 +5455,15 @@ public:
virtual int inhibited(int sls) const
{ return 0; }
/**
* Check some of the inhibition flags of a specific link
* @param sls Signalling Link to check
* @param flags Flags to check for, ORed together
* @return True if any of the specified inhibition flags is active
*/
inline bool inhibited(int sls, int flags) const
{ return (inhibited(sls) & flags) != 0; }
/**
* Set and clear inhibition flags on the links
* @param sls Signalling Link to modify
@ -6008,6 +6030,18 @@ public:
*/
void recoverMSU(const SS7Label& link, int sequence);
/**
* Notification for receiving User Part Unavailable
* @param type Type of Point Code
* @param node Node on which the User Part is unavailable
* @param part User Part (service) reported unavailable
* @param cause Unavailability cause - Q.704 15.17.5
* @param label Routing label of the UPU message
* @param sls Signaling link the UPU was received on
*/
virtual void receivedUPU(SS7PointCode::Type type, const SS7PointCode node,
SS7MSU::Services part, unsigned char cause, const SS7Label& label, int sls);
/**
* Check if the transfer function is enabled
* @return True if acting as a STP
@ -7913,6 +7947,18 @@ protected:
const unsigned char* paramPtr, unsigned int paramLen,
const SS7Label& label, SS7Layer3* network, int sls);
/**
* Notification for receiving User Part Unavailable
* @param type Type of Point Code
* @param node Node on which the User Part is unavailable
* @param part User Part (service) reported unavailable
* @param cause Unavailability cause - Q.704 15.17.5
* @param label Routing label of the UPU message
* @param sls Signaling link the UPU was received on
*/
virtual void receivedUPU(SS7PointCode::Type type, const SS7PointCode node,
SS7MSU::Services part, unsigned char cause, const SS7Label& label, int sls);
/**
* Process an event received from a non-reserved circuit
* @param event The event, will be consumed and zeroed