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());
        }

Reply via email to