antonio's blog

antonio's blog


Блог о всяком разном, связанном с разработкой ПО. Пишу редко, когда есть время и желание.

Anton Dobkin
Author

Share


Tags


Использование библиотеки dwavdapi для интеграция с сервисом Dr.Web AV-Desk

Anton DobkinAnton Dobkin

В данном посте приведены несколько примеров использования библиотеки libdwavdapi, которую компания Доктор Веб выпустила в прошлом году. Библиотека dwavdapi предназначена для автоматизации и упрощения процесса интеграции с сервисом Dr.Web AV-Desk. Библиотека реализует весь функционал, заложенный в Dr.Web AV-Desk XML API.

Нам понадобится установить два пакета: libdwavdapi и libdwavdapi-devel, скачать их для своей системы можно с http://secure.av-desk.com. Сейчас есть готовые пакеты для Linux (rpm и deb), Mac OS и FreeBSD

Создание группы

/* new_group.c */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>

#include <dwavdapi/avdesk.h> 
#include <dwavdapi/groups.h>

int main(void) {  
    /* Инициализируем хэндл сервера */
    dwavdapi_handle *handle = dwavdapi_init();

    /* Задаем параметры Dr.Web AV-Desk сервера */
    dwavdapi_set_connect_info(handle, "http://192.168.0.10", 9080, "admin", "root");

    /* Инициализируем новую группу */
    dwavdapi_group *group = dwavdapi_group_init(); 

    /* Задаем название группы */
    dwavdapi_group_set_name(group, "My_group");

    char *group_id = NULL;

    /* Создаем  группу */
    if(dwavdapi_group_add(handle, group, &group_id) == DWAVDAPI_FAILURE ){
        char *error = NULL;
        dwavdapi_strerror(&error,errno);
        printf("Error: %s (%d)\n",error,errno); 
        free(error);
        dwavdapi_group_destroy(group); 
        dwavdapi_destroy(handle); 

        return -1;
    }

    /* Выводим ID созданной группы */
    printf("GroupID: %s\n", group_id);

    /* Освобождаем ресурсы */
    dwavdapi_group_destroy(group); 
    dwavdapi_destroy(handle);

    return 0; 
}

Собираем пример:

gcc -ldwavdapi -o avdesk_new_group new_group.c  

Создание станции

/* new_station.c */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>

#include <dwavdapi/avdesk.h> 
#include <dwavdapi/stations.h>
#include <dwavdapi/tariffs.h>

int main(void) {  
    /* Инициализируем хэндл сервера */
    dwavdapi_handle *handle = dwavdapi_init();

    /* Задаем параметры Dr.Web AV-Desk сервера */
    dwavdapi_set_connect_info(handle, "http://192.168.0.10", 9080, "admin", "root");

   /* Инициализируем новую станцию */
    dwavdapi_station *station = dwavdapi_station_init();

   /* Задаем родительскую группу станции */
    dwavdapi_station_set_parent_id(station, "c060a9c0-8f75- 4a8c-b2da-044aa0eb98b7");

    /* Задаем тарифную группу */
    dwavdapi_station_set_tariff_id(station, DWAVDAPI_TARIFF_ID_PREMIUM);

    char *station_id = NULL;

    /* Создаем  станцию */
    if(dwavdapi_station_add(handle, station, &station_id) == DWAVDAPI_FAILURE ){
        /* Если станция не создана, то выводим ошибку */
        char *error = NULL;
        dwavdapi_strerror(&error, errno);
        printf("Error: %s (%d)\n", error, errno); 
        free(error); 
        dwavdapi_station_destroy(station); 
        dwavdapi_destroy(handle);
        return -1;
    }

    /* Выводим ID созданной станции */
    printf("Station ID: %s\n", station_id);

    /* Освобождаем ресурсы */
    dwavdapi_station_destroy(station); 
    dwavdapi_destroy(handle);

    return 0; 
}

Cобираем пример:

gcc -ldwavdapi -o avdesk_new_station new_station.c  

Отправка сообщения на станцию

/* send_message_to_station.c */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>

#include <dwavdapi/avdesk.h> 
#include <dwavdapi/stations.h>
#include <dwavdapi/messages.h>

int main(void) {  
    /* Инициализируем хэндл сервера */
    dwavdapi_handle *handle = dwavdapi_init();

    /* Задаем параметры Dr.Web AV-Desk сервера */
    dwavdapi_set_connect_info(handle, "http://192.168.0.10", 9080, "admin", "root");

    const char *msg = "Dear user!\n\nDr. Web Firewall component has been installed.\n\
                More information is available {link}";

    dwavdapi_message *message = dwavdapi_message_init();

    /* Устанавливает текст сообщения. Сообщение может содержать макрос {link}
     * Данный макрос будет заменен гиперссылкой, заданной с помощью функции  
     * dwavdapi_message_set_url(), и текстом заданным с помощью функции  
     * dwavdapi_message_set_url_text()
     */
    dwavdapi_message_set_msg(message, msg);

    /* Устанавливаем ссылку и название, которыми будет заменен макрос {link} в тексте сообщения */
    dwavdapi_message_set_url(message, "http://company.local/drweb/firewall");
    dwavdapi_message_set_url_text(message, "at our site");

    /* Отправляем сообщение станции */
    if(dwavdapi_station_send_message(handle, "c9131d34-65f8-49c9-9ff1-a4d06b371112", message) == DWAVDAPI_FAILURE) {
        char *error = NULL;
        dwavdapi_strerror(&error, errno);
        printf("Error: %s (%d)\n", error, errno); 
        free(error); 

        dwavdapi_message_destroy(message);
        dwavdapi_destroy(handle); 
        return -1;
    }

    printf("Message has been successfully sent\n"); 

     /* Освобождаем ресурсы */
    dwavdapi_message_destroy(message); 
    dwavdapi_destroy(handle); 

    return 0;
}

Cобираем пример:

gcc -ldwavdapi -o send_message_to_station send_message_to_station.c  

На станции это будет выглядеть так:

Anton Dobkin
Author

Anton Dobkin

Comments