Generating Locking Code Using fingerprintInfo and lockCodeInfo

To generate the locking code of a remote system, output of the get_info query “fingerprintInfo” call is required. Hence, the use case is divided into two sections: Generating fingerprintInfo and Generating Locking Code.

Generating fingerprintInfo

Declare Variables/Constants

#define LOCK_SELECTOR   "0x4"

sntl_licensing_attr_t *pAttrAppContext = NULL;
sntl_licensing_app_context_t *pAppContext = NULL;
char *pcOutBuffer =NULL;
char *pcFingerprintQuery = "<sentinelQuery query=\"fingerprintInfo\" version=\"1.1\">\
                                  <rawValue>Yes</rawValue>\
                           "</sentinelQuery>";
char *pcFingerprintScope = "<sentinelScope>\
                               <lockSelector>"LOCK_SELECTOR"</lockSelector>\
                           "</sentinelScope>";

API Calls

To obtain locking code, execute the APIs in the specified sequential order only:

>sntl_licensing_attr_new(&pAttrAppContext);

>sntl_licensing_app_context_new(0, pAttrAppContext, &pAppContext);

>sntl_licensing_get_info(pAppContext, pcFingerprintScope, pcFingerprintQuery,&pcOutBuffer);

If the sntl_licensing_get_info call is successful, then the pcOutBuffer string contains an XML-based output having the detailed fingerprint information against the lock selector specified in scope.

Generating Locking Code

Declare Variables/Constants

#define LOCK_SELECTOR   "0x4"

sntl_licensing_attr_t *pAttrAppContext = NULL;
sntl_licensing_app_context_t *pAppContext = NULL;
char *pcOutBuffer =NULL;

/*To obtain locking code based on the system fingerprint*/
char *pcLockCodeQuery1 = "<sentinelQuery query=\"lockCodeInfo\" version=\"1.0\"/>";
char *pcLockCodeScope1 = "<sentinelScope>\
			    	<lockSelector>"LOCK_SELECTOR"</lockSelector>\
			    </sentinelScope>";
/*To obtain locking code using a remote system fingerprint*/
char *pcLockCodeQuery2 = "<sentinelQuery query=\"lockCodeInfo\" version=\"1.0\"/>";
char *pcLockCodeScope2 = "<sentinelScope>\
			   <lockSelector>"LOCK_SELECTOR"</lockSelector>\
                           /* fingerPrint element of FingerPrint_XML (output of get_info query fingerprintInfo”) */
                          	<fingerprint type=\"SentinelRMS\" version=\"1.1\"checksum=\"DA6A103462D10694\">\                                                                                   
                           		<criteria>\
                           			<name>Disk ID</name>\
                           			<selector>0x4</selector>\
                           			<hash>99E8F6FF9C193B11</hash>\
                           			<item>\
                           				<rawValue>0x5060CD50</rawValue>\
                           				<hashValue>99E8F6FF9C193B11</hashValue>\
                          			 </item>\
                           		</criteria>\
                          	</fingerprint> \
                          </sentinelScope>";

API Calls

To get the fingerprint, execute the APIs in the specified sequential order only:

sntl_licensing_attr_new(&pAttrAppContext);
sntl_licensing_app_context_new(0, pAttrAppContext, &pAppContext);

>To obtain the locking code using the system fingerprints:

sntl_licensing_get_info(pAppContext, pcLockCodeScope1, pcLockCodeQuery1, &pcOutBuffer);

>To obtain the locking code using the remote system fingerprints:

sntl_licensing_get_info(pAppContext, pcLockCodeScope2, pcLockCodeQuery2,&pcOutBuffer);

If the sntl_licensing_get_info call is successful, then pcOutBuffer string contains an XML-based output having the detailed information of locking code.

Notes

>While generating fingerprint, set the “rawValue” element in the Scope of “fingerprintInfo” query version 1.1.

>“lockSelector” in the “fingerprintInfo” query is optional. If it is not set, then fingerprintInfo of all criteria will be fetched.

>If the given locking criteria of a system contains multiple fingerprints, the first value is used for generating the locking code.