JBoss.orgCommunity Documentation

Chapter 2. Resource Adaptor Type

2.1. Activities
2.2. Events
2.3. Activity Context Interface Factory
2.4. Resource Adaptor Interface
2.5. Restrictions
2.6. Sbb Code Examples

Diameter Sh-Client Resource Adaptor Type is defined by Mobicents team as part of effort to standardize RA Types.

Diameter Sh-Client Type 2.3.0.FINAL defines the following Activities:

All activities define methods required to properly function and expose necessary information to JAIN SLEE services. Sh Client Activity is defined as follows:



    void sendUserDataRequest(UserDataRequest message) throws IOException;
    void sendSubscribeNotificationsRequest(SubscribeNotificationsRequest message) 
        throws IOException; 
    void sendProfileUpdateRequest(ProfileUpdateRequest message) throws IOException;
    

Sh Client Subscription Activity is defined as follows:



    ShClientMessageFactory getClientMessageFactory();
    void sendSubscribeNotificationsRequest(SubscribeNotificationsRequest request)
        throws IOException;
    void sendUnsubscribeRequest() throws IOException;
    PushNotificationAnswer createPushNotificationAnswer();
    void sendPushNotificationAnswer(PushNotificationAnswer answer) throws IOException;
    void sendPushNotificationAnswer(long resultCode,boolean isExperimentalResultCode)
        throws IOException;
    PushNotificationAnswer createPushNotificationAnswer(long resultCode,
        boolean isExperimaental);
    UserIdentityAvp getSubscribedUserIdentity();
    
ShClientMessageFactory getClientMessageFactory();

This method returns a 'customized' message factory to manually create Sh Client Messages for this Activity.

void sendSubscribeNotificationsRequest(SubscribeNotificationsRequest request) throws IOException;

This method sends a Subscribe-Notifications-Request message.

void sendUnsubscribeRequest() throws IOException;

This method send a Subscribe-Notifications-Request message containing the AVPs required to UNSUBSCRIBE from the user that this activity represents a subscription to.

PushNotificationAnswer createPushNotificationAnswer();

This method creates Push-Notification-Answer for received Push-Notification-Request. It returns null if a Push-Notification-Request has not been received.

void sendPushNotificationAnswer(PushNotificationAnswer answer) throws IOException;

This method sends a manually-constructed Push-Notification-Answer to the peer that sent the Push-Notification-Request.

void sendPushNotificationAnswer(long resultCode,boolean isExperimentalResultCode) throws IOException;

This is a convenience method to create and send a Push-Notification-Answer containing a Result-Code or Experimental-Result AVP populated with the given value.

PushNotificationAnswer createPushNotificationAnswer(long resultCode, boolean isExperimaental);

This method creates Push-Notification-Answer for received Push-Notification-Request, with the specified Result-Code. It returns null if a Push-Notification-Request has not been received.

UserIdentityAvp getSubscribedUserIdentity();

This method returns the User-Identity for the subscription in the HSS represented by this activity.

Diameter Sh-Client Resource Adaptor Type declares all the Diameter Sh messages related to client operations.

The following tables shows which events are fired on each activity.



Important

Spaces where introduced in Name and Event Class column values, to correctly render the table. Please remove them when using copy/paste.

The Mobicents Diameter Sh-Client Activity Context Interface Factory is defined as follows:



    package net.java.slee.resource.diameter.sh.client;
    import javax.slee.ActivityContextInterface;
    import javax.slee.UnrecognizedActivityException;
    public interface ShClientActivityContextInterfaceFactory {
        ActivityContextInterface getActivityContextInterface(ShClientActivity activity)
            throws UnrecognizedActivityException;
        ActivityContextInterface getActivityContextInterface(ShClientSubscriptionActivity activity)
            throws UnrecognizedActivityException;
    }
    

The Mobicents Diameter Sh-Client Resource Adaptor SBB Interface provides SBBs with access to the Diameter objects required for creating and sending messages. It is defined as follows:



    package net.java.slee.resource.diameter.sh.client;
    import java.io.IOException;
    import net.java.slee.resource.diameter.base.CreateActivityException;
    import net.java.slee.resource.diameter.base.events.avp.DiameterIdentity;
    import net.java.slee.resource.diameter.sh.DiameterShAvpFactory;
    import net.java.slee.resource.diameter.sh.events.ProfileUpdateAnswer;
    import net.java.slee.resource.diameter.sh.events.ProfileUpdateRequest;
    import net.java.slee.resource.diameter.sh.events.SubscribeNotificationsAnswer;
    import net.java.slee.resource.diameter.sh.events.SubscribeNotificationsRequest;
    import net.java.slee.resource.diameter.sh.events.UserDataAnswer;
    import net.java.slee.resource.diameter.sh.events.UserDataRequest;
    public interface ShClientProvider {
        public ShClientMessageFactory getClientMessageFactory();
        public DiameterShAvpFactory getClientAvpFactory();
        public ShClientActivity createShClientActivity() throws CreateActivityException;
        public ShClientSubscriptionActivity createShClientSubscriptionActivity()
            throws CreateActivityException;
        public UserDataAnswer userDataRequest(UserDataRequest message) throws IOException;
        public ProfileUpdateAnswer profileUpdateRequest(ProfileUpdateRequest message)
            throws IOException;
        public SubscribeNotificationsAnswer subscribeNotificationsRequest(
            SubscribeNotificationsRequest message) throws IOException;
        public DiameterIdentity[] getConnectedPeers();
        public int getPeerCount();
    }
    

public ShClientMessageFactory getClientMessageFactory();

This method returns a ShClientMessageFactory implementation to be used to create DiameterMessage objects.

public DiameterShAvpFactory getClientAvpFactory();

This method returns a DiameterShAvpFactory implementation to be used to create DiameterAvp objects.

public ShClientActivity createShClientActivity() throws CreateActivityException;

This method creates a new Sh Client activity to send and receive Diameter Sh messages.

public ShClientSubscriptionActivity createShClientSubscriptionActivity() throws CreateActivityException;

This method creates a new Sh Client Subscription activity to send and receive Diameter Sh subscription related messages.

public UserDataAnswer userDataRequest(UserDataRequest message) throws IOException;

This method sends a synchronous UserDataRequest which will block until an answer is received from the peer.

public ProfileUpdateAnswer profileUpdateRequest(ProfileUpdateRequest message) throws IOException;

This method sends a synchronous ProfileUpdateRequest which will block until an answer is received from the peer.

public SubscribeNotificationsAnswer subscribeNotificationsRequest(SubscribeNotificationsRequest message) throws IOException;

This method sends a synchronous SubscribeNotificationsRequest which will block until an answer is received from the peer.

public DiameterIdentity[] getConnectedPeers();

This method returns the identities of peers this Diameter resource adaptor is connected to.

public int getPeerCount();

This method returns the number of peers this Diameter resource adaptor is connected to.

Current Resource Adaptor Type has no defined restrictions.

Simple Client-Side Example that creates and sends an User-Data-Request and receives an User-Data-Answer.



    /* Method for creating and sending UDR with pre-defined values. */
    private void doSimpleTestsSendUDR() {
        try {
            ShClientActivity basicClientActivity = this.provider.createShClientActivity();
            
            ActivityContextInterface localACI = acif.getActivityContextInterface(basicClientActivity);
            logger.info(" On TimerEvent: ACI created for basicClientActivity");
            
            localACI.attach(getSbbContext().getSbbLocalObject());
            DiameterIdentity[] peers = provider.getConnectedPeers();
            
            UserDataRequest udr = ((ShClientMessageFactory)basicClientActivity.
                getDiameterMessageFactory()).createUserDataRequest();
            
            List<DiameterAvp> avps = new ArrayList<DiameterAvp>();
            avps.add(avpFactory.getBaseFactory().createAvp(Avp.DESTINATION_HOST, ("aaa://" + 
                destinationIP + ":" + destinationPort).getBytes() ));
            avps.add(avpFactory.getBaseFactory().createAvp(Avp.DESTINATION_REALM,
                destinationRealm.getBytes()));
            UserIdentityAvp ui=avpFactory.createUserIdentity();
            ui.setPublicIdentity("sip:subscriber@mobicents.org");
              
            avps.add(ui);
            
            udr.setExtensionAvps(avps.toArray(new DiameterAvp[avps.size()]));
            udr.setAuthSessionState(AuthSessionStateType.STATE_MAINTAINED);
            udr.setDataReference(DataReferenceType.IMS_PUBLIC_IDENTITY);
            basicClientActivity.sendUserDataRequest(udr);
        }
        catch (Exception e) {
          tracer.error("Failure trying to create/send UDR.", e);
        }
    }
    
    ...
    
    /* Method for handling ACA messages. Just print the Result-Code AVP. */
    public void onUserDataRequestAnswer(UserDataAnswer uda, ActivityContextInterface aci)
        if (tracer.isInfoEnabled()) {
            tracer.info("User-Data-Answer received. Result-Code[" + uda.getResultCode() + "].");
        }
    }