public void endActivity() { //TODO: check if this should be synced to ensure calls from SBBs work properly. this.setTerminateAfterProcessing(false); this.baseListener.stopActivityRemoveTimer((DiameterActivityHandle) handle); if(session != null) { session.release(); } try { //endpoint.endActivity(this.getActivityHandle()); this.baseListener.endActivity(this.getActivityHandle()); } catch (Exception e) { logger.error("Failed to end activity [" + this + "].", e); } }
private void processAfterEventDelivery(ActivityHandle handle, FireableEventType eventType, Object event, Address address, ReceivableService service, int flags) { DiameterActivityImpl activity = (DiameterActivityImpl) getActivity(handle); if (activity != null) { synchronized (activity) { if (activity.isTerminateAfterProcessing()) { activity.endActivity(); } } } }
private void performBeforeReturnOnBase(DiameterActivityImpl ac, Session session) { DiameterMessageFactoryImpl msgFactory = new DiameterMessageFactoryImpl(session, stack, new DiameterIdentity[] {}); ac.setAvpFactory(baseAvpFactory); ac.setMessageFactory(msgFactory); ac.setCurrentWorkingSession(session); ac.setSessionListener(lst); }
public void sessionCreated(Session session) { DiameterMessageFactoryImpl sessionMsgFactory = new DiameterMessageFactoryImpl(session, stack, null, null); DiameterActivityImpl activity = new DiameterActivityImpl(sessionMsgFactory, baseAvpFactory, session, this, null, null); // TODO: Do we need to manage session? //session.addStateChangeNotification(activity); activity.setSessionListener(this); addActivity(activity, false); }
/** * Method for performing tasks when activity is created, such as informing SLEE about it and storing into internal map. * * @param ac the activity that has been created */ private void addActivity(DiameterActivity ac, boolean suspended) { try { // Inform SLEE that Activity Started DiameterActivityImpl activity = (DiameterActivityImpl) ac; if (suspended) { sleeEndpoint.startActivitySuspended(activity.getActivityHandle(), activity, MARSHALABLE_ACTIVITY_FLAGS); } else { sleeEndpoint.startActivity(activity.getActivityHandle(), activity, MARSHALABLE_ACTIVITY_FLAGS); } // Set the listener activity.setSessionListener(this); // Put it into our activities map activities.put(activity.getActivityHandle(), activity); if(tracer.isInfoEnabled()) { tracer.info("Activity started [" + activity.getActivityHandle() + "]"); } } catch (Exception e) { tracer.severe("Error creating activity", e); throw new RuntimeException("Error creating activity", e); } }
public ActivityHandle getActivityHandle(Object activity) { if(tracer.isFineEnabled()) { tracer.fine("Diameter CCA RA :: getActivityHandle :: activity[" + activity + "]."); } if (!(activity instanceof DiameterActivity)) { return null; } DiameterActivityImpl inActivity = (DiameterActivityImpl) activity; return inActivity.getActivityHandle(); }
public void queryLiveness(ActivityHandle handle) { tracer.info("Diameter Ro RA :: queryLiveness :: handle[" + handle + "]."); DiameterActivityImpl activity = (DiameterActivityImpl) activities.get((DiameterActivityHandle)handle); if (activity != null && !activity.isValid()) { try { sleeEndpoint.endActivity(handle); } catch (Exception e) { tracer.severe("Failure ending non-live activity.", e); } } }
public String getSessionId() { return super.getSessionId(); }
@Override public void run() { try { DiameterActivityImpl da = (DiameterActivityImpl) get(handle); if (da != null) { synchronized (da) { if(da.isTerminateAfterProcessing()) { da.setTerminateAfterProcessing(false); da.endActivity(); } } } } catch(Exception e){ e.printStackTrace(); } finally { removeMap.remove(handle); } } }
public DiameterMessage sendSyncRequest(DiameterMessage message) throws IOException { try { if (message instanceof DiameterMessageImpl) { DiameterMessageImpl msg = (DiameterMessageImpl) message; String sessionId = message.getSessionId(); DiameterActivityHandle handle = getActivityHandle(sessionId); DiameterActivityImpl activity = (DiameterActivityImpl) getActivity(handle); if (activity == null) { activity = (DiameterActivityImpl) createActivity(msg.getGenericData()); } return activity.sendSyncMessage(message); } } catch (org.jdiameter.api.validation.AvpNotAllowedException e) { throw new AvpNotAllowedException("Message validation failed.", e, e.getAvpCode(), e.getVendorId()); } catch (Exception e) { throw new IOException("Failed to send message, due to: " + e.getMessage()); } return null; }
public DiameterActivityImpl(DiameterMessageFactory messageFactory, DiameterAvpFactory avpFactory, Session session, EventListener<Request, Answer> raEventListener, DiameterIdentity destinationHost, DiameterIdentity destinationRealm) { super(); this.messageFactory = messageFactory; this.avpFactory = avpFactory; this.session = session; this.eventListener = raEventListener; this.destinationHost = destinationHost; this.destinationRealm = destinationRealm; if(session != null) { this.setCurrentWorkingSession(session); this.sessionId = session.getSessionId(); } }
@Override public void endActivity() { this.clientSession.release(); this.clientSession.removeStateChangeNotification(this); super.endActivity(); } }
/** * Method for performing tasks when activity is created, such as informing SLEE about it and storing into internal map. * * @param ac * the activity that has been created */ private void addActivity(final DiameterActivity ac, final boolean suspend ) { try { // Inform SLEE that Activity Started DiameterActivityImpl activity = (DiameterActivityImpl) ac; if(suspend) { sleeEndpoint.startActivitySuspended(activity.getActivityHandle(), activity, MARSHALABLE_ACTIVITY_FLAGS); } else { sleeEndpoint.startActivity(activity.getActivityHandle(), activity, MARSHALABLE_ACTIVITY_FLAGS); } // Set the listener activity.setSessionListener(this); // Put it into our activities map activities.put(activity.getActivityHandle(), activity); if (tracer.isInfoEnabled()) { tracer.info("Activity started [" + activity.getActivityHandle() + "]"); } } catch (Exception e) { tracer.severe("Error creating activity", e); throw new RuntimeException("Error creating activity", e); } }
@Override public ActivityHandle getActivityHandle(Object activity) { if (tracer.isFineEnabled()) { tracer.fine("Diameter Gq RA :: getActivityHandle :: activity[" + activity + "]."); } if (!(activity instanceof DiameterActivity)) { return null; } DiameterActivityImpl inActivity = (DiameterActivityImpl) activity; return inActivity.getActivityHandle(); }
public void queryLiveness(ActivityHandle handle) { tracer.info("Diameter Ro RA :: queryLiveness :: handle[" + handle + "]."); DiameterActivityImpl activity = (DiameterActivityImpl) activities.get((DiameterActivityHandle)handle); if (activity != null && !activity.isValid()) { try { sleeEndpoint.endActivity(handle); } catch (Exception e) { tracer.severe("Failure ending non-live activity.", e); } } }
if (activity.getClass().equals(DiameterActivityImpl.class)) { session = this.diameterStack.getSessionFactory().getNewSession(activity.getSessionId()); performBeforeReturnOnBase(activity, session); return; ClientCCASession appSession = this.diameterStack.getSession(activity.getSessionId(), ClientCCASession.class); session = appSession.getSessions().get(0); performBeforeReturnOnBase(activity, session); ServerCCASession appSession = this.diameterStack.getSession(activity.getSessionId(), ServerCCASession.class); session = appSession.getSessions().get(0); performBeforeReturnOnBase(activity, session);
public void run() { try { DiameterActivityImpl da = (DiameterActivityImpl) get(new DiameterActivityHandle((String)getTaskData().getTaskID())); if (da != null) { synchronized (da) { if(da.isTerminateAfterProcessing()) { da.setTerminateAfterProcessing(false); da.endActivity(); } } } } catch (Exception e) { e.printStackTrace(); } }
public void sessionCreated(Session session) { DiameterMessageFactoryImpl msgFactory = new DiameterMessageFactoryImpl(session, stack, null, null); DiameterActivityImpl activity = new DiameterActivityImpl(msgFactory, avpFactory, session, this, null, null); // TODO: Do we need to manage session? //session.addStateChangeNotification(activity); activity.setSessionListener(this); // false, since we can't know if it comes from SBB or RA callback addActivity(activity, false); }
public DiameterMessage sendSyncRequest(DiameterMessage message) throws IOException { try { if (message instanceof DiameterMessageImpl) { DiameterMessageImpl msg = (DiameterMessageImpl) message; String sessionId = message.getSessionId(); DiameterActivityHandle handle = getActivityHandle(sessionId); DiameterActivityImpl activity = (DiameterActivityImpl) getActivity(handle); if (activity == null) { activity = (DiameterActivityImpl) createActivity(msg.getGenericData()); } return activity.sendSyncMessage(message); } } catch (org.jdiameter.api.validation.AvpNotAllowedException e) { throw new AvpNotAllowedException("Message validation failed.", e, e.getAvpCode(), e.getVendorId()); } catch (Exception e) { throw new IOException("Failed to send message, due to: " + e.getMessage()); } return null; }
public ShClientActivityImpl(ShClientMessageFactory shClientMessageFactory, DiameterShAvpFactory shAvpFactory, ClientShSession session, DiameterIdentity destinationHost, DiameterIdentity destinationRealm) { super(shClientMessageFactory.getBaseMessageFactory(), shAvpFactory.getBaseFactory(), null, (EventListener<Request, Answer>) session, destinationHost, destinationRealm); setSession(session); super.setCurrentWorkingSession(this.clientSession.getSessions().get(0)); this.shAvpFactory = shAvpFactory; this.messageFactory = shClientMessageFactory; }