A session may become invalid because it has been idle over a time limit, it has reached the maximum session time, or it has been terminated by an administrator. An application can be notified of this by implementing a listener function. Additionally, notification must be enabled for the application to receive change notifications when am_sso_init() is initialized. Notification is enabled by setting the com.sun.am.notification.enable property in the agent configuration properties to true, and by providing the com.sun.am.notification.url property a URL which will receive HTTP notification messages from OpenSSO Enterprise. Notification messages are in XML and should be passed as a string (const char *) to am_notify() which will parse the message and invoke the appropriate session or policy listener. Following is a code sample that illustrates this.
For more information, see Single Sign-on Properties and <am_notify.h>.
void sample_listener_func( am_sso_token_handle_t sso_token_handle, const am_sso_token_event_type_t event_type, const time_t event_time, void *opaque) { if (sso_token_handle != NULL) { const char *sso_token_id = am_sso_get_sso_token_id(sso_token_handle); boolean_t is_valid = am_sso_is_valid_token(sso_token_handle); printf("sso token id is %s.\\n", sso_token_id==NULL?"NULL":sso_token_id); printf("session state is %s.\\n", is_valid == B_TRUE ? "valid":"invalid"); printf("event type %d.\\n", event_type); printf("event time %d.\\n", event_time); } else { printf("Error: sso token handle is null!"); } if (opaque) *(int *)opaque = 1; return; } int main(int argc, char *argv[]) { am_status_t status; char *sso_token_id = argv[1]; int listener_func_done = 0; /* initialize sso as in previous samples */ /* get sso token handle */ status = am_sso_create_sso_token_handle(&sso_handle, sso_token_id, false); /* register listener function. notification must be enabled, if not, /* status AM_NOTIF_NOT_ENABLED will be returned. */ status = am_sso_add_sso_token_listener(sso_handle, sample_listener_func, &listener_func_done, B_TRUE); if (status != AM_SUCCESS) { printf("Failed to register sample listener function.\\n"); return 1; }