/***************************************************************************//**
 @defgroup lip_dns_sd DNS-SD
 @ingroup  lip_lvl_app
 @brief Модуль стека @c lip, реализующий протокол DNS-SD в соответствии с @rfc{6763}.\n
  Зависит от: @ref lip_mdns

  Протокол @ref lip_dns_sd (DNS-Based Service Discovery) предоставляет механизм
  для регистрации устройством сервисов, которые оно реализует.

  Протокол @ref lip_dns_sd может работать как поверх обычного DNS, так и поверх
    @ref lip_mdns. Последний вариант позволяет находить устройства, реализующие
    сервис в одной сети с запрашивающим устройством. Последний вариант сокращенно 
    называют mDNS-SD.

  Данный модуль реализует только регистрацию сервисов поверх @ref lip_mdns.
  Варианты регистрации с помощью Dynamic-DNS и функции для поиска 
  сервисов не реализованы.

  Перед регистрацией сервисов в локальной сети необходимо установить имя
  хоста через lip_mdns_set_hostname().
  После этого можно зарегистрировать сервисы, которые реализует устройство с
  помощью lip_dnssd_register_local().
  Каждый тип сервиса имеет свое имя в виде _имя сервиса._tcp или _имя сервиса._udp.
  Первый вариант используют сервисы, реализованные поверх протокола @ref lip_tcp,
  а второй --- все остальные. Подчеркивание вначале используется для различия с
  именами хостов.

  Каждому устройству, реализующему данный тип сервиса, соответствует имя экземпляра,
  которое должно быть уникально (в пределах локальной сети для @ref lip_mdns).
  Для локальной сети уникальность имени проверяется и, если имя имя уже
  используется, то вызывается предоставленная функция обратного вызова, которая
  должна вернуть новое имя для проверки.

  Также каждый экземпляр сервиса описывается набором параметров в виде пар
  ключ-значение. Имена параметров и значения зависят от сервиса и задаются при
  регистрации.

  При необходимости, все записи зарегистрированного сервиса могут быть удалены
  с помощью lip_dnssd_unregister_local().
******************************************************************************/

/***************************************************************************//**
 @addtogroup lip_dns_sd
 @{
 @file lip_dns_sd.h
 @brief Файл содержит определения функций и макросов для модуля @ref lip_dns_sd,
   которые могут быть использованы в приложении.

 @author Borisov Alexey <borisov@lcard.ru>
******************************************************************************/

#ifndef LIP_DNS_SD_H_
#define LIP_DNS_SD_H_

#include "lip/lip_defs.h"
#include "lip/app/dns/mdns/lip_mdns.h"

/** @brief Регистрация сервиса в локальной сети с помощью @ref lip_mdns. */
t_lip_errs lip_dnssd_register_local(const char *srv_instanse, const char *srv_name,
                             uint16_t port, t_lip_mdns_name_conflict_cb cb,
                             const t_lip_dns_txt_keyval *keyvals, unsigned keys_cnt);
/** @brief Удаление записей, соответствующие зарегистрированному сервису */
void lip_dnssd_unregister_local(const char *srv_instanse, const char *srv_name, unsigned flags);


#endif /* LIP_DNS_SD_H_ */

/** @}*/
