Плагины NetView


Взаимодействие с хостлистом


Функции работы с хостлистом можно разделить на следующие части:

Собственно работа с хостами - удаление, добавление, получение информации о хосте, получение информации о выделенных в данный момент в списке хостах - реализованы в виде сообщений NMPN_OBJECT. Имена хостов должны быть в нижнем регистре. Для операций с хостом lParam указывает на структуру NVHOST wParam может принимать следующие комбинации флагов:

NVOBJ_GETHOST - В структуре NVHOST необходимо указать id существующего хоста для получени информации о нем, либо 0 - тогда будет возвращена информация (в том числе и id) первого хоста в списке

Если комбинировать NVOBJ_GETHOST | NVOBJ_SELECTED то будет возвращен следующий выделенный хост после указанного в id (либо первый выделенный если id==0). В nextid возвращается id следующего хоста, что позволяет проходить по списку всех, либо выделенных хостов. Ниже приведен пример функции перечисляющей все выделенный хосты и передающей их по порядку процедуре yourstuff(char *):

NVHOST hst;ZeroMemory(&hst,sizeof(hst));
SendMessage(plgi->nvwnd,NMPN_OBJECT,NVOBJ_SELECTED|NVOBJ_GETHOST,(DWORD)&hst);
while(hst.id)
{
yourstuff(hst.hostname);

hst.id=hst.nextid;
if(hst.id)SendMessage(plgi->nvwnd,NMPN_OBJECT,NVOBJ_SELECTED|NVOBJ_GETHOST,(DWORD)&hst);
}

NVOBJ_SETHOST - В структуре NVHOST указать id существующего хоста либо 0 для лобавления нового в список. При этом все поля структуры будут перенесены в хост.

NVOBJ_DELHOST - В структуре NVHOST указать id существующего хоста. Он будет удален полностью.

NVOBJ_HOSTBYTEXT - lParam указывает на char * строку - имя хоста или ip адрес. Может быть скомбинировано с NVOBJ_FORCENEW - в этом случае нетвью добавит новый хост, если не сможет найти существующий по указанному тексту. Сообщение возвращает id найденного или добавленного хоста. Если указать флаг NVOBJ_HOSTNOIP то будет добавлен хост с пустым IP без определения адреса по имени.

 

 

Работа с хостлистами. lParam указывает на NVLIST структуру. wParam может иметь следующие флаги:

NVOBJ_GETLIST - то же самое что и NVOBJ_GETHOST для хостов, за исключением того что NVOBJ_SELECTED не действует (пока, потом сделаю так чтобы при указании этого флага возвращался активынй список)

NVOBJ_SETLIST - принцип тот же что и NVOBJ_SETHOST

NVOBJ_DELLIST - удаляет список, id которого передается в lParam (заметьте для NVOBJ_DELHOST в lParam указывается структура NVHOST, а здесь только list id)

NVOBJ_LISTBYTEXT - аналогично NVOBJ_HOSTBYTEXT

 

 Работа с линиями визуальной карты. Принципиально отличается от первых двух пунктов тем что линии нетвью хранит в виде массива а не списка для ускорения доступа и прорисовки.

NVOBJ_GETLINE - lParam указывает на NVLINE, в которой указан в index порядковый индекс линии, сообщение возвращает полное количество линий в хостлисте. Нетвью заполнчет поля структуры для указанной линии.

NVOBJ_SETLINE - lParam указывает на  NVLINE, в которой заданы все параметры. Индекс следует установить в -1 для создания новой линии либо он должен быть равен индексу существующей линии. Нетвью установит параметры линии и перерисует ее.

NVOBJ_DELLINE - lParam равен индексу линии, которую нужно удалить

 

Работа с областями - визуальными прямоугольниками на карте. Примерно так же как с хостлистами и хостами:
NVOBJ_GETAREA - lParam указывает на структуру NVAREA в которой заполнено поле id в идентификатор существующей области или в 0 для получения самой первой области в списке. Позволяет обходить список областей аналогично работе с хостами и хостлистами. Возвращает идентификатор в случае успеха или 0 в случае ошибки.
NVOBJ_SETAREA - lParam указывает на структуру NVAREA в которой заполнены все поля. id установлен либо в идентификатор области которую нужно поменять либо в 0 - тогда будет создана новая область на заданном хостлисте и с заданным именем. Учтите что на одном хостлисте области могут иметь только уникальные имена.  Возвращает идентификатор в случае успеха,  0 - в случае глобального облома, -1 - в том случае если плагин пытается присвоит области имя уже существующей на карте другой области с таким же именем.
NVOBJ_DELAREA - lParam установлен в идентификатор id области подлежащей удалению. Возвращает 1 в случае успеха и 0 - в случае облома.

 

Работа с метаданными хостов. Метаданные - это строка, ассоциированная с хостом и имеющая уникальное в пределах этого хоста имя. Строка и ее имя не может содержать в себе символы '#','$',#0,#13,#10 но это ограничение будет снято в будущих версиях. В принципе ничто не мешает записать в метаданные полную медкарточку пользователя компа, но этого лучше не делать из соображени быстродействия. Если будете использовать свои метапеременные настоятельно рекомендую написать мне письмо для получения уникального начала имен переменных (а-ля "abcd_"), что позволит избежать путаницы с другими плагинами. Имена переменных чувствительны к регистру букв. Работа с ними осуществлется с помощью сообщения NMPN_METAVAR, lParam указывает на структуру NVMETAVAR, причем для нее должно быть выделено достаточно памяти. wParam принимает значения:

NVMETAVAR_GET - перед вызовом указать hostname и varname в NVMETAVAR. Если переменной не существует будет возвращена пустая строка. Если максимальная граница строки неизвестна, нужно установить vallen равным нулю, после вызова сообщения нетвью установит vallen в необходимое значение. Затем выделить нужное кол-во памяти под структуру и вызвать сообщение еще раз. Примерный код этого дела:

 LPNVMETAVAR mv=(LPNVMETAVAR)malloc(256);
ZeroMemory(mv,256);
strcpy(mv->hostname,"coolhost");
strcpy(mv->varname,"abcd_myvar");
mv->vallen=0;
SendMessage(plgi->nvwnd,NMPN_METAVAR,NVMETAVAR_GET,(DWORD)mv);
mv=(LPNVMETAVAR)realloc(mv,256+mv->vallen);//выделили необходимое кол-во памяти
ZeroMemory(mv->val,mv->vallen+1);

SendMessage(plgi->nvwnd,NMPN_METAVAR,NVMETAVAR_GET,(DWORD)mv);
//теперь в mv->val мы имеем NULL TERMINATED строку длиной mv->vallen 

//делаем с ней все что хотим и...:

free(mv);

NVMETAVAR_SET - указать все параметры в NVMETAVAR. Если строка имеет нулевую длину она будет удалена.

LPNVMETAVAR mv=(LPNVMETAVAR)malloc(256+val.Length());
strcpy(mv->hostname,"coolhost");
strcpy(mv->varname,"abcd_myvar");
strcpy(mv->val,"my metavar string");
mv->vallen=val.Length();
SendMessage(plgi->nvwnd,NMPN_METAVAR,NVMETAVAR_SET,(DWORD)mv);
free(mv);

Нетвью хранит все параметры хостов в метапеременных. Назначение некоторых (далеко не всех) встроенных метапеременных:

 

Список основных метапеременных можно найти здесь

Для применения изменений в большинстве внутренних метапеременных достаточно сделать NMPN_ACTION с флагом NVACTION_SETSTATE указав в lParam соответствующий host id.

На верх


© 2001-2004 Killer{R}   © 2003 VoVaN