User`s guide

i.LON SmartServer 2.0 Programming Tools User’s Guide 159
Note: Pointers to strings will not be NULL if they are not used, instead some may point to empty
strings.
6. Based on the results of the license key evaluation, validate the FPM license, or log a license error.
You can use a value other than 1 and later check for that specific value instead of using a boolean
zero/non-zero check. For example:
FPM_IS_LICENSED = SOME_MAGIC_NUMBER;
}
else
{
taskCallBlock.pGeneric =
(void*)"FPM HVAC license key is invalid\n”;
LICMGR_TaskCall_LogLicenseError(&taskCallBlock);
}
7. If the SmartServer did not pass the Node Lock Check, log a
license error. For example:
}else
{
taskCallBlock.pGeneric =
(void*)"FPM HVAC license invalid or not
found\n";
LICMGR_TaskCall_LogLicenseError(&taskCallBlock);
}
8. Free any license data stored in memory. For example:
LICMGR_TaskCall_FreeLicenseData(&taskCallBlock);
}
The following code demonstrates the license key of an FPM application license file being checked by
the license validation algorithm:
//Check if i.LON passed Node Lock Check
if (taskCallBlock.sts == LicMgrStsOK)
{
//store the license data
pLic = taskCallBlock.pLicense;
// Copy the key in parts
memcpy(secretKey, FPM_KEY_PART_0, sizeof(FPM_KEY_PART_0));
memcpy(&secretKey[sizeof(FPM_KEY_PART_0)], FPM_KEY_PART_1,
sizeof(FPM_KEY_PART_1));
//call security algorithm
LICMGR_hmac_md5((unsigned char*)pLic->szHashText,
strlen(pLic->szHashText),
secretKey, 16, digest);
//compare license keys
if ((pLic->licenseKeyLen == MD5_DIGEST_LEN) &&
(memcmp(pLic->licenseKey, digest, MD5_DIGEST_LEN) == 0))
{
FPM_IS_LICENSED = SOME_NON_ZERO_VALUE;
printf("***FPM license validated***\n");
}
else
{