JBoss.orgCommunity Documentation
Diameter Sh-Client Resource Adaptor Type is defined by Mobicents team as part of effort to standardize RA Types.
Diameter Sh-Client Type 2.5.0.FINAL defines the following Activities:
This type of activity represents client side of Sh session. User-Data-Request (UDR), Profile-Update-Request (PUR) and Subscribe-Notifications-Request (SNR) can be created and sent in this Activity, receiving the respective Answer (or timeout) later on this Activity.
This activity type can be created with call to the createShClientActivity
method of net.java.slee.resource.diameter.sh.client.ShClientProvider
. It ends once underlying Sh client session ends.
This activity sessions are simple Request-Answer sessions, meaning that once the Answer is sent or received it is terminated.
This type of activity represents a subscription to User Data notifications for Sh session, based on User Identity. Push-Notification-Request (PNR) messages are received in this Activity and respective Answers are sent from it. Subscribe-Notifications-Request (SNR) can be created and sent in this Activity, receiving the respective Answer (or timeout) later on this Activity.
This activity type can be created with call to the createShClientSubscriptionActivity
method of net.java.slee.resource.diameter.sh.client.ShClientProvider
. It ends once SNR with UNSUBSCRIBE as Subs-Req-Type is sent (can be made using the Activity method sendUnsubscribeRequest
.)
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;
This method sends a User-Data-Request message asynchronously.
This method sends a Subscribe-Notifications-Request message asynchronously.
This method sends a Profile-Update-Request message asynchronously.
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();
This method returns a 'customized' message factory to manually create Sh Client Messages for this Activity.
This method sends a Subscribe-Notifications-Request message.
This method send a Subscribe-Notifications-Request message containing the AVPs required to UNSUBSCRIBE from the user that this activity represents a subscription to.
This method creates Push-Notification-Answer for received Push-Notification-Request. It returns null if a Push-Notification-Request has not been received.
This method sends a manually-constructed Push-Notification-Answer to the peer that sent the Push-Notification-Request.
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.
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.
This method returns the User-Identity for the subscription in the HSS represented by this activity.
It is safe to type cast all the mentioned Diameter Activities to it's super interface net.java.slee.resource.diameter.base.DiameterActivity
defined in Diameter Base Activities section.
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.
Table 2.1. Events received on Sh Client Activity
Name | Vendor | Version | Class |
---|---|---|---|
net.java.slee.resource. diameter.sh.events. UserDataAnswer | java.net | 0.8 | net.java.slee.resource. diameter.sh.events. UserDataAnswer |
net.java.slee.resource. diameter.sh.events. ProfileUpdateAnswer | java.net | 0.8 | net.java.slee.resource. diameter.sh.events. ProfileUpdateAnswer |
net.java.slee.resource. diameter.sh.events. SubscribeNotificationsAnswer | java.net | 0.8 | net.java.slee.resource. diameter.sh.events. SubscribeNotificationsAnswer |
Table 2.2. Events received on Sh Client Subscription Activity
Name | Vendor | Version | Class |
---|---|---|---|
net.java.slee.resource. diameter.sh.events. PushNotificationRequest | java.net | 0.8 | net.java.slee.resource. diameter.sh.events. PushNotificationRequest |
Spaces where introduced in Name
and Event Class
column values, to correctly render the table. Please remove them when using copy/paste.
The JBoss Communications 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 JBoss Communications 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();
}
This method returns a ShClientMessageFactory
implementation to be used to create DiameterMessage
objects.
This method returns a DiameterShAvpFactory
implementation to be used to create DiameterAvp
objects.
This method creates a new Sh Client activity to send and receive Diameter Sh messages.
This method creates a new Sh Client Subscription activity to send and receive Diameter Sh subscription related messages.
This method sends a synchronous UserDataRequest which will block until an answer is received from the peer.
This method sends a synchronous ProfileUpdateRequest which will block until an answer is received from the peer.
This method sends a synchronous SubscribeNotificationsRequest which will block until an answer is received from the peer.
This method returns the identities of peers this Diameter resource adaptor is connected to.
This method returns the number of peers this Diameter resource adaptor is connected to.
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() + "].");
}
}