VCSAgSetCookie
void VCSAgSetCookie(const char *name, void *cookie);
This primitive requests that the VCS agent framework store a cookie. This value is transparent to the VCS agent framework, and can be obtained later by calling the primitive VCSAgGetCookie(). Note that a cookie is not stored permanently; it is lost when the VCS agent process exits. This primitive can be called from any entry point.
For example:
#include "VCSAgApi.h"
...
//
// Assume that the online, offline, and monitor
// operations on resource require a certain key. Also
// assume that obtaining this key is time consuming, but
// that it can be reused until this process is
// terminated.
//
// In this example, the open entry point obtains the key
// and stores it as a cookie. Subsequent online,
// offline, and monitor entry points get the cookie and
// use the key.
//
// Note that the cookie name can be any unique string.
// This example uses the resource name as the cookie
// name.
//
void *get_key() {
...
}
void res_open(const char *res_name, void **attr_val) {
if (VCSAgGetCookie(res_name) == NULL) {
void *key = get_key();
VCSAgSetCookie(res_name, key);
}
}
VCSAgResState res_monitor(const char *res_name, void
**attr_val, int *conf_level_ptr) {
VCSAgResState state = VCSAgResUnknown;
*conf_level_ptr = 0;
void *key = VCSAgGetCookie(res_name);
if (key == NULL) {
// Take care of the rare cases when
// the open entry point failed to
// obtain the key and set the the cookie.
key = get_key();
VCSAgSetCookie(res_name, key);
}
// Use the key for testing if the resource is
// online, and set the state accordingly.
...
return state;
}
|