Revision: 22762
Author: [email protected]
Date: Wed Jul 4 02:35:46 2012
Log: Added Initial Events Filter
http://code.google.com/p/mobicents/source/detail?r=22762
Modified:
/trunk/servers/jain-slee/resources/isup/ra/src/main/java/org/mobicents/slee/resources/isup/ra/FireableEventTypeFilter.java
/trunk/servers/jain-slee/resources/isup/ra/src/main/java/org/mobicents/slee/resources/isup/ra/IsupResourceAdaptor.java
=======================================
---
/trunk/servers/jain-slee/resources/isup/ra/src/main/java/org/mobicents/slee/resources/isup/ra/FireableEventTypeFilter.java
Tue May 11 00:20:10 2010
+++
/trunk/servers/jain-slee/resources/isup/ra/src/main/java/org/mobicents/slee/resources/isup/ra/FireableEventTypeFilter.java
Wed Jul 4 02:35:46 2012
@@ -48,6 +48,11 @@
private final ConcurrentHashMap<EventTypeID, Set<ServiceID>>
eventID2serviceIDs =
new ConcurrentHashMap<EventTypeID, Set<ServiceID>>(31);
+ /**
+ * Holds mappings eventTypeID --> Set(ServiceID) which are interested
in initial receiving event
+ */
+ private final ConcurrentHashMap<EventTypeID, Set<ServiceID>>
initialEventID2serviceIDs =
+ new ConcurrentHashMap<EventTypeID, Set<ServiceID>>(31);
/**
* checks if event should be filtered or not
* @param eventType
@@ -57,6 +62,10 @@
return !eventID2serviceIDs.containsKey(eventType.getEventType());
}
+ public boolean filterInitialEvent(FireableEventType eventType) {
+
return !initialEventID2serviceIDs.containsKey(eventType.getEventType());
+ }
+
/**
* Informs the filter that a receivable service is now active.
* For the events related with the service, and if there are no other
@@ -66,14 +75,30 @@
*/
public void serviceActive(ReceivableService receivableService) {
for (ReceivableEvent receivableEvent :
receivableService.getReceivableEvents()) {
- Set<ServiceID> servicesReceivingEvent =
eventID2serviceIDs.get(receivableEvent.getEventType());
- if (servicesReceivingEvent == null) {
- servicesReceivingEvent = new HashSet<ServiceID>();
- Set<ServiceID> anotherSet =
eventID2serviceIDs.putIfAbsent(receivableEvent.getEventType(),
servicesReceivingEvent);
- if (anotherSet != null) {
- servicesReceivingEvent = anotherSet;
- }
- }
+ Set<ServiceID> servicesReceivingEvent;
+ if(!receivableEvent.isInitialEvent())
+ {
+ servicesReceivingEvent =
eventID2serviceIDs.get(receivableEvent.getEventType());
+ if (servicesReceivingEvent == null) {
+ servicesReceivingEvent = new
HashSet<ServiceID>();
+ Set<ServiceID> anotherSet =
eventID2serviceIDs.putIfAbsent(receivableEvent.getEventType(),
servicesReceivingEvent);
+ if (anotherSet != null) {
+ servicesReceivingEvent = anotherSet;
+ }
+ }
+ }
+ else
+ {
+ servicesReceivingEvent =
initialEventID2serviceIDs.get(receivableEvent.getEventType());
+ if (servicesReceivingEvent == null) {
+ servicesReceivingEvent = new
HashSet<ServiceID>();
+ Set<ServiceID> anotherSet =
initialEventID2serviceIDs.putIfAbsent(receivableEvent.getEventType(),
servicesReceivingEvent);
+ if (anotherSet != null) {
+ servicesReceivingEvent = anotherSet;
+ }
+ }
+ }
+
synchronized (servicesReceivingEvent) {
servicesReceivingEvent.add(receivableService.getService());
}
=======================================
---
/trunk/servers/jain-slee/resources/isup/ra/src/main/java/org/mobicents/slee/resources/isup/ra/IsupResourceAdaptor.java
Wed Jul 4 01:56:49 2012
+++
/trunk/servers/jain-slee/resources/isup/ra/src/main/java/org/mobicents/slee/resources/isup/ra/IsupResourceAdaptor.java
Wed Jul 4 02:35:46 2012
@@ -471,16 +471,17 @@
}
- final FireableEventType eventType =
eventTypeCache.getEventType(eventLookupFacility, eventName);
- if (eventTypeFilter.filterEvent(eventType)) {
- tracer.info("event " + eventName + " filtered");
- return;
- }
+ final FireableEventType eventType =
eventTypeCache.getEventType(eventLookupFacility, eventName);
//if there is no TX, lets create STX
CircuitActivity ca = (CircuitActivity)getActivity(new
ISUPActivityHandle(CircuitActivity.generateTransactionKey(event.getMessage().getCircuitIdentificationCode().getCIC(),event.getDpc())));
if(ca == null)
{
+ if (eventTypeFilter.filterInitialEvent(eventType)) {
+ tracer.info("event " + eventName + " filtered");
+ return;
+ }
+
//FIXME: determine in Qs if there is error msg to be sent.... can be
extremly complciated since there is 40+ messages
try {
ca =
this.raProvider.createCircuitActivity(event.getMessage(),event.getDpc());
@@ -504,7 +505,14 @@
e.printStackTrace();
}
}
-
+ else
+ {
+ if (eventTypeFilter.filterEvent(eventType)) {
+ tracer.info("event " + eventName + " filtered");
+ return;
+ }
+ }
+
this.fireEvent(eventType, ca, event.getMessage());
}