Автоматизация процесса доставки обновлений для существующих лицензий

Автоматизация процесса доставки обновлений для существующих лицензий

С помощью всего одного запроса из EMS Web Service API ( Fetch Pending Updates (V2C) Using C2V ) можно напрямую из защищенного продукта выполнить проверку наличия обновлений для существующего ключа на сервере Sentinel EMS, и, при наличие каких-либо обновлений, скачать их и применить к ключу. По требованиям для работы здесь ситуация полностью аналогична процессу доставки новых
лицензий, а именно, требуется чтобы Sentinel EMS был настроен на работу через интернет и доступен по сети + защищенное приложение, из которого выполняется запрос на активацию, должно иметь доступ в интернет. 

Пример реализации:

В защищаемую программу добавляем функцию, которая будет выполняться периодически при запущенном ПО и наличии на ПК подключения к интернету.
Функция должна реализовывать следующую логику:
1) Выполнение сбора данных (C2V файла) с HL/SL ключа клиента, (функция Hasp.GetInfo из Sentinel Licensing API):

Пример кода вызова функции:
//
string scope =
"<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" +
"<haspscope>" +
" <hasp id=\\" + KeyID + "\" />" + // KeyID нужно заменить на Key ID того ключа, для которого необходимо проверить обновления
"</haspscope>" +
"";
string format =
"<haspformat format=\"updateinfo\"/>";
string vendorCode = “Ваш_Vendor_Code”;
string info = null;
HaspStatus status = Hasp.GetInfo(scope, format, vendorCode, ref info);
if (HaspStatus.StatusOk != status)
{
//handle error
}
//

2) Получив C2V с ключа, необходимо выполнить один POST запрос activation/target.ws из Sentinel EMS Web Service API:

В качестве параметра в запрос необходимо передать C2V, полученный в результате выполнения функции Hasp.GetInfo из Sentinel Licensing API.
3) В случае если для ключа есть обновление, сервер Sentinel EMS вернёт это обновление в виде V2CP массива, в ответ на наш запрос. Из ответа потребуется извлечь V2CP массив с обновлением и затем применить его к ключу, посредством функции Hasp.Update из Sentinel Licensing API:

Пример кода вызова функции:
//
string update_data = “V2C/V2CP_массив_данных”;
string ack_data = null;
HaspStatus status = Hasp.Update(update_data, ref ack_data);
if (HaspStatus.StatusOk != status)
{
//handle error
}
//