<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Форум Guardant &mdash; Узнать из программы количество занятых лицензий на сетевом ключе]]></title>
	<link rel="self" href="https://forum.guardant.ru/feed/atom/topic/608/" />
	<updated>2016-02-19T10:50:07Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.guardant.ru/topic/608/</id>
		<entry>
			<title type="html"><![CDATA[Re: Узнать из программы количество занятых лицензий на сетевом ключе]]></title>
			<link rel="alternate" href="https://forum.guardant.ru/post/3001/#p3001" />
			<content type="html"><![CDATA[<p>Решение найдено. Необходимо выделять буфер длинной <strong>не менее 32 байт</strong>. Тогда все работает. Наверное есть смысл документацию скорректировать, чтобы избежать таких вопросов в дальнейшем.<br />Спасибо.</p><p>P.S. Правда адрес выдается IPv6, а хотелось бы IPv4.</p>]]></content>
			<author>
				<name><![CDATA[Mikle]]></name>
				<uri>https://forum.guardant.ru/user/1067/</uri>
			</author>
			<updated>2016-02-19T10:50:07Z</updated>
			<id>https://forum.guardant.ru/post/3001/#p3001</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Узнать из программы количество занятых лицензий на сетевом ключе]]></title>
			<link rel="alternate" href="https://forum.guardant.ru/post/2999/#p2999" />
			<content type="html"><![CDATA[<p>Что-то не получается у меня получить IP адрес сервера на котором сетевой ключ установлен. Пытаюсь так (Delphi):</p><div class="codebox"><pre><code>var
  lData: array of byte;
.............
  SetLength(lData, 15);
  FillChar(lData[0], Length(lData), 0);
  fErrCode := GrdGetInfo(fGrdHandle, GrdGIR_RemoteIP, @lData[0], Length(lData));</code></pre></div><p>В fErrCode возвращается код ошибки 46 (Недопустимые параметры при вызове функции). Попробовал различные варианты вызова <strong>GrdGetInfo</strong>:<br /><em>GrdGIL_ID</em>, <em>GrdGIL_Remote</em>, <em>GrdGIR_VerSrv</em>, <em>GrdGIR_IniTimeOutSend</em> - работают без ошибок.<br /><em>GrdGIR_LocalIP</em>, <em>GrdGIR_RemoteIP</em> - выдают ошибку 46.<br />Ключ находится на той-же машине, что и клиент, но подключаюсь как к удаленному ключу (<em>GrdFMR_Remote</em> вторым параметром <strong>GrdSetFindMode</strong> + GrdGetInfo(..., GrdGIL_Remote, ...) выдает что подключение сетевое).<br />Не подскажете в чем может быть проблема?</p>]]></content>
			<author>
				<name><![CDATA[Mikle]]></name>
				<uri>https://forum.guardant.ru/user/1067/</uri>
			</author>
			<updated>2016-02-19T08:09:44Z</updated>
			<id>https://forum.guardant.ru/post/2999/#p2999</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Узнать из программы количество занятых лицензий на сетевом ключе]]></title>
			<link rel="alternate" href="https://forum.guardant.ru/post/2998/#p2998" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Mikle пишет:</cite><blockquote><p>Правильно ли я понимаю, что память в буфере для возврата результата необходимо предварительно выделить (перед запуском GrdGetInfo)?</p></blockquote></div><p>Да, все верно.</p>]]></content>
			<author>
				<name><![CDATA[Антон Тихиенко]]></name>
				<uri>https://forum.guardant.ru/user/31/</uri>
			</author>
			<updated>2016-02-19T06:37:48Z</updated>
			<id>https://forum.guardant.ru/post/2998/#p2998</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Узнать из программы количество занятых лицензий на сетевом ключе]]></title>
			<link rel="alternate" href="https://forum.guardant.ru/post/2997/#p2997" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Антон Тихиенко пишет:</cite><blockquote><p>В <em>pInfoData</em> возвращается буфер, размер которого, для <em>GrdGIR_RemoteIP</em>, должен быть не менее 15 байт.</p></blockquote></div><p>Антон, спасибо. Я в справке переключился на закладку С# (уже не помню зачем), а там информации о длине буфера нет, поэтому и возник вопрос.<br />Правильно ли я понимаю, что память в буфере для возврата результата необходимо предварительно выделить (перед запуском GrdGetInfo)?</p>]]></content>
			<author>
				<name><![CDATA[Mikle]]></name>
				<uri>https://forum.guardant.ru/user/1067/</uri>
			</author>
			<updated>2016-02-18T13:14:21Z</updated>
			<id>https://forum.guardant.ru/post/2997/#p2997</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Узнать из программы количество занятых лицензий на сетевом ключе]]></title>
			<link rel="alternate" href="https://forum.guardant.ru/post/2996/#p2996" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Mikle пишет:</cite><blockquote><p>Тут возникла необходимость получения адреса компьютера с сетевым ключом. Как я понимаю, для этого мы можем воспользоваться функцией GrdGetInfo с параметром GrdGIR_RemoteIP. Возникает вопрос: какого типа и длинны должен быть параметр infoData в этом случае? В идеале хотелось бы получить IP адрес в виде строки.</p></blockquote></div><p>В <em>pInfoData</em> возвращается буфер, размер которого, для <em>GrdGIR_RemoteIP</em>, должен быть не менее 15 байт.<br /><span class="postimg"><a class="fancybox fancybox.image" rel="group" href="https://forum.guardant.ru/uploads/legacy/0/2500/2996/p1abq60d14bj23jm1ald793gm71.jpg"><img class="fb_img" src="https://forum.guardant.ru/uploads/legacy/0/2500/2996/thumb/p1abq60d14bj23jm1ald793gm71.jpg" alt="" /></a></span></p>]]></content>
			<author>
				<name><![CDATA[Антон Тихиенко]]></name>
				<uri>https://forum.guardant.ru/user/31/</uri>
			</author>
			<updated>2016-02-18T12:35:12Z</updated>
			<id>https://forum.guardant.ru/post/2996/#p2996</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Узнать из программы количество занятых лицензий на сетевом ключе]]></title>
			<link rel="alternate" href="https://forum.guardant.ru/post/2995/#p2995" />
			<content type="html"><![CDATA[<p>Пока приняли решения не использовать таблицу лицензий. Тому есть несколько причин:<br />- сейчас пользователь докупая рабочие места получает от нас новый файл лицензий по почте, при прописывании информации в ключе необходимо будет удаленное обновление ключа, что увеличит время перехода на новые ключи<br />- логика использования лицензий у нас чуть сложнее и использует 2 цифры версии на 4 типа программы. Т.е. мы можем выписать лицензии:<br />1. версии 8.0 на 5 рабочих мест&nbsp; (позволяет запустить 5 рабочих мест версии 8.0)<br />2. версии 8.1 на 3 рабочих места (позволяет запустить 3 рабочих места версии 8.0 или 8.1)<br />3. версии 9.0 на 2 рабочих места. (позволяет запустить 2 рабочих места версии 9.0)<br />и это только в пределах одной программы, при добавлении типов программ логика усложняется. Возможно можно как-то решить этот вопрос с использованием таблицы лицензий, но это опять же время.</p><p>Тут возникла необходимость получения адреса компьютера с сетевым ключом. Как я понимаю, для этого мы можем воспользоваться функцией GrdGetInfo с параметром GrdGIR_RemoteIP. Возникает вопрос: какого типа и длинны должен быть параметр infoData в этом случае? В идеале хотелось бы получить IP адрес в виде строки.<br />При поиске по форуму нашел только <a href="https://forum.guardant.ru/topic/590/">такую тему</a> (там кстати тоже просят возможность средствами API узнать количество занятых лицензий).</p>]]></content>
			<author>
				<name><![CDATA[Mikle]]></name>
				<uri>https://forum.guardant.ru/user/1067/</uri>
			</author>
			<updated>2016-02-18T09:46:46Z</updated>
			<id>https://forum.guardant.ru/post/2995/#p2995</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Узнать из программы количество занятых лицензий на сетевом ключе]]></title>
			<link rel="alternate" href="https://forum.guardant.ru/post/2992/#p2992" />
			<content type="html"><![CDATA[<p>Здравствуйте.<br /></p><div class="quotebox"><cite>Mikle пишет:</cite><blockquote><p>Прошу прощения, написал много, сумбурно, но в целом мысль такая: если такая функция появится в обозримом будущем, было бы неплохо, если же в планах этого нет - мы справимся и без этого, просто это будет дольше :-)</p></blockquote></div><p>Судя по представленному описанию задачи, для ее решения, не видится препятствий при использовании возможностей <a href="http://developer.guardant.ru/pages/viewpage.action?pageId=1277977">таблицы лицензий (LMS)</a>, а именно модулей LMS.</p><p>Нужно в таблице лицензий целевого сетевого ключа создать необходимое количество модулей с различными сетевыми ресурсами для каждой версии защищенного приложения. Например, при необходимости разделить реальный сетевой ресурс электронного ключа (=10 лицензиям) на три версии защищенного приложения (<strong>v.1</strong>=5 лиц., <strong>v.2</strong>=2 лиц. и <strong>v.3</strong>=3 лиц.) нужно будет сформировать таблицу лицензий с общим ресурсом в 10 лиц. и тремя модулями (на 5, 2 и 3 лиц., соответственно). Каждому модулю назначается номер, который и потребуется указать при вызове функции <a href="http://developer.guardant.ru/display/DOC/GrdLogin"><em>GrdLogin</em></a> , в качестве параметра <em>dwModuleLMS</em>. Таким образом приложение v.1 не сможет занять более 5 лиц., несмотря на реальный сетевой ресурс в 10 лиц., который также будут использовать еще и приложения v.2 и v.3.</p>]]></content>
			<author>
				<name><![CDATA[Антон Тихиенко]]></name>
				<uri>https://forum.guardant.ru/user/31/</uri>
			</author>
			<updated>2016-02-17T06:59:30Z</updated>
			<id>https://forum.guardant.ru/post/2992/#p2992</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Узнать из программы количество занятых лицензий на сетевом ключе]]></title>
			<link rel="alternate" href="https://forum.guardant.ru/post/2990/#p2990" />
			<content type="html"><![CDATA[<p>У нас уже реализована собственная система лицензирования, которая ориентируется на максимально доступное число подключений к ключу + текущее количество подключений. Необходимость написания собственной системы была обусловлена сложностью лицензионной политики компании (разделение по проектам и версиям с возможностью на одном сетевом ключе запускать определенное разработчиком количество копий разных программ разных версий). На момент написания этой системы используемый нами ключ Aladdin (позже Sentinel) не позволял в полной мере обслужить наши потребности в лицензировании, поэтому пришлось писать самим пользуясь возможностями предоставляемыми API ключа. </p><p>Сейчас же при переходе на ключи Guardant хотелось бы обойтись минимальными изменениями, чтобы быстрее осуществить переход, поэтому менять нашу систему лицензирования мы не будем, по крайней мере на начальном этапе. </p><p>Первое с чем я столкнулся: в текущей реализации в памяти ключа прописывается реальный сетевой ресурс ключа (просто число в памяти), что дает возможность ограничить, например, сетевой ключ на 10 мест 7-ю лицензиями. При подключении к такому ключу математика считывает реальный ресурс ключа и получает через функцию API количество подключений (включая текущее). Если подключений больше - отключаемся с соответствующим сообщением (номер ключа/реальное кол-во лицензий). Это только &quot;вершина айсберга&quot; проверок дальше идут проверки по версиям и проектам. </p><p>В принципе обойтись без этой первой проверки можно. Достаточно при программировании ключа в таблицу лицензий ключа Guardant записать реальный сетевой ресурс ключа и подключения даже не произойдет (выдаваемое при этом сообщение я еще не видел, но уверен, что оно достаточно информативно для конечного пользователя). Сложность здесь заключается в прописывании этого самого реального сетевого ресурса - просто в определенное место дампа памяти ключа записать это число недостаточно, там еще нужно CRC посчитать и записать, как выяснилось. А сделать это нужно программно (у нас отдельная программа по программированию ключей совмещенная с нашей CRM системой). И еще надо научить утилиту дистанционного обновления ключа это делать. Т.е. ничего нерешаемого, просто дополнительная работа с тем чтобы в этом разобраться (изначально была идея сохранить дамп образа для ключей на 5, 10, 25, 50, 100, 250 мест и записывать дамп целиком в память, а &quot;тонкое&quot; ограничение оставить нашей математике, но без функции определения количества уже подключенных клиентов наша математика не сработает).</p><p>Прошу прощения, написал много, сумбурно, но в целом мысль такая: если такая функция появится в обозримом будущем, было бы неплохо, если же в планах этого нет - мы справимся и без этого, просто это будет дольше :-)</p>]]></content>
			<author>
				<name><![CDATA[Mikle]]></name>
				<uri>https://forum.guardant.ru/user/1067/</uri>
			</author>
			<updated>2016-02-16T12:32:42Z</updated>
			<id>https://forum.guardant.ru/post/2990/#p2990</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Узнать из программы количество занятых лицензий на сетевом ключе]]></title>
			<link rel="alternate" href="https://forum.guardant.ru/post/2989/#p2989" />
			<content type="html"><![CDATA[<p>Мы Ваше пожелания передадим разработчикам.<br />Однако, из Вашего описания не совсем понятно в чём заключается Ваша концепция.<br />При отсутствие свободных лицензий в ключе на клиентском компьютере высвечивается соответствующее сообщение при попытке занять лицензию (при запуске приложения). Вас не устраивает такого рода оповещение?</p>]]></content>
			<author>
				<name><![CDATA[Станислав Петрушевский]]></name>
				<uri>https://forum.guardant.ru/user/818/</uri>
			</author>
			<updated>2016-02-16T12:05:08Z</updated>
			<id>https://forum.guardant.ru/post/2989/#p2989</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Узнать из программы количество занятых лицензий на сетевом ключе]]></title>
			<link rel="alternate" href="https://forum.guardant.ru/post/2988/#p2988" />
			<content type="html"><![CDATA[<p>Жаль. Сейчас мы используем для защиты приложения ключи другого производителя и там подобная функция в API есть и используется в наших алгоритмах. При переходе на ключи Guardant придется решать чем эту логику заменить. <br />Скорее всего нужно будет реализовать при программировании ключа (мы делаем это отдельно написанной своей программой) прописывание реального сетевого ресурса ключа (с расчетом CRC) как описано в <a href="https://forum.guardant.ru/topic/336/">этой теме</a>. <br />Не очень понятно как в такой схеме информировать пользователя о том, что все лицензии в ключе уже заняты с указанием реального сетевого ресурса ключа, ведь к ключу на котором заняты все лицензии даже подключиться не получится чтобы считать это число. Остается только отправить пользователя в монитор сервера сетевых ключей.</p>]]></content>
			<author>
				<name><![CDATA[Mikle]]></name>
				<uri>https://forum.guardant.ru/user/1067/</uri>
			</author>
			<updated>2016-02-16T09:19:54Z</updated>
			<id>https://forum.guardant.ru/post/2988/#p2988</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Узнать из программы количество занятых лицензий на сетевом ключе]]></title>
			<link rel="alternate" href="https://forum.guardant.ru/post/2987/#p2987" />
			<content type="html"><![CDATA[<p>Здравствуйте!<br />На текущий момент ничего не изменилось. Пока что добавления такого функционала не ожидается.</p>]]></content>
			<author>
				<name><![CDATA[Станислав Петрушевский]]></name>
				<uri>https://forum.guardant.ru/user/818/</uri>
			</author>
			<updated>2016-02-16T09:08:22Z</updated>
			<id>https://forum.guardant.ru/post/2987/#p2987</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Узнать из программы количество занятых лицензий на сетевом ключе]]></title>
			<link rel="alternate" href="https://forum.guardant.ru/post/2986/#p2986" />
			<content type="html"><![CDATA[<p>Здравствуйте!<br />Имеется ли возможность из программы используя API узнать, сколько уже задействовано (использовано) лицензий на сетевом ключе ?</p><p>Нашел на форуме сообщение от 09.04.2013:</p><div class="quotebox"><cite>Антон Тихиенко пишет:</cite><blockquote><div class="quotebox"><cite>Luck пишет:</cite><blockquote><p>А можно ли как-то узнать количество задействованных в данный момент лицензий?</p></blockquote></div><p>Только при помощи стандартного web-интерфейса монитора сервера сетевых ключей, либо парсить данные этого же web-монитора, и таким образом получать информацию о текущем состоянии ключа.</p></blockquote></div><p>С тех пор ничего не изменилось? Не рассматривается ли возможность добавления в API такой функции (или она уже есть, а я ее не увидел)?</p><p>Спасибо.</p>]]></content>
			<author>
				<name><![CDATA[Mikle]]></name>
				<uri>https://forum.guardant.ru/user/1067/</uri>
			</author>
			<updated>2016-02-16T08:37:18Z</updated>
			<id>https://forum.guardant.ru/post/2986/#p2986</id>
		</entry>
</feed>
