Merge branch 'feature/support_multiple_instance_for_mdns_service_txt_set' into 'master'

mdns: support multiple instance for mdns service txt set

See merge request espressif/esp-idf!16105
This commit is contained in:
Zhang Wen Xu 2021-12-15 06:44:53 +00:00
commit c9ee50a0be
2 changed files with 36 additions and 34 deletions

View File

@ -269,6 +269,7 @@ esp_err_t mdns_service_remove(const char * service_type, const char * proto);
/**
* @brief Remove service from mDNS server with hostname
*
* @param instance instance name
* @param service_type service type (_http, _ftp, etc)
* @param proto service protocol (_tcp, _udp)
* @param hostname service hostname. If NULL, local hostname will be used.
@ -279,7 +280,7 @@ esp_err_t mdns_service_remove(const char * service_type, const char * proto);
* - ESP_ERR_NOT_FOUND Service not found
* - ESP_ERR_NO_MEM memory error
*/
esp_err_t mdns_service_remove_for_host(const char * service_type, const char * proto, const char *hostname);
esp_err_t mdns_service_remove_for_host(const char *instance, const char * service_type, const char * proto, const char *hostname);
/**
* @brief Set instance name for service
@ -299,6 +300,7 @@ esp_err_t mdns_service_instance_name_set(const char * service_type, const char *
/**
* @brief Set instance name for service with hostname
*
* @param instance_old original instance name
* @param service_type service type (_http, _ftp, etc)
* @param proto service protocol (_tcp, _udp)
* @param hostname service hostname. If NULL, local hostname will be used.
@ -310,7 +312,7 @@ esp_err_t mdns_service_instance_name_set(const char * service_type, const char *
* - ESP_ERR_NOT_FOUND Service not found
* - ESP_ERR_NO_MEM memory error
*/
esp_err_t mdns_service_instance_name_set_for_host(const char * service_type, const char * proto, const char * hostname,
esp_err_t mdns_service_instance_name_set_for_host(const char * instance_old, const char * service_type, const char * proto, const char * hostname,
const char * instance_name);
/**
@ -332,6 +334,7 @@ esp_err_t mdns_service_port_set(const char * service_type, const char * proto, u
/**
* @brief Set service port with hostname
*
* @param instance instance name
* @param service_type service type (_http, _ftp, etc)
* @param proto service protocol (_tcp, _udp)
* @param hostname service hostname. If NULL, local hostname will be used.
@ -343,7 +346,7 @@ esp_err_t mdns_service_port_set(const char * service_type, const char * proto, u
* - ESP_ERR_NOT_FOUND Service not found
* - ESP_ERR_NO_MEM memory error
*/
esp_err_t mdns_service_port_set_for_host(const char * service_type, const char * proto, const char * hostname,
esp_err_t mdns_service_port_set_for_host(const char * instance, const char * service_type, const char * proto, const char * hostname,
uint16_t port);
/**
@ -369,6 +372,7 @@ esp_err_t mdns_service_txt_set(const char * service_type, const char * proto, md
*
* @note The value length of txt items will be automatically decided by strlen
*
* @param instance instance name
* @param service_type service type (_http, _ftp, etc)
* @param proto service protocol (_tcp, _udp)
* @param hostname service hostname. If NULL, local hostname will be used.
@ -381,7 +385,7 @@ esp_err_t mdns_service_txt_set(const char * service_type, const char * proto, md
* - ESP_ERR_NOT_FOUND Service not found
* - ESP_ERR_NO_MEM memory error
*/
esp_err_t mdns_service_txt_set_for_host(const char * service_type, const char * proto, const char * hostname,
esp_err_t mdns_service_txt_set_for_host(const char * instance, const char * service_type, const char * proto, const char * hostname,
mdns_txt_item_t txt[], uint8_t num_items);
/**
@ -425,6 +429,7 @@ esp_err_t mdns_service_txt_item_set_with_explicit_value_len(const char *service_
*
* @note The value length will be automatically decided by strlen
*
* @param instance instance name
* @param service_type service type (_http, _ftp, etc)
* @param proto service protocol (_tcp, _udp)
* @param hostname service hostname. If NULL, local hostname will be used.
@ -437,12 +442,13 @@ esp_err_t mdns_service_txt_item_set_with_explicit_value_len(const char *service_
* - ESP_ERR_NOT_FOUND Service not found
* - ESP_ERR_NO_MEM memory error
*/
esp_err_t mdns_service_txt_item_set_for_host(const char * service_type, const char * proto, const char * hostname,
esp_err_t mdns_service_txt_item_set_for_host(const char * instance, const char * service_type, const char * proto, const char * hostname,
const char * key, const char * value);
/**
* @brief Set/Add TXT item for service TXT record with hostname and txt value length
*
* @param instance instance name
* @param service_type service type (_http, _ftp, etc)
* @param proto service protocol (_tcp, _udp)
* @param hostname service hostname. If NULL, local hostname will be used.
@ -456,7 +462,7 @@ esp_err_t mdns_service_txt_item_set_for_host(const char * service_type, const ch
* - ESP_ERR_NOT_FOUND Service not found
* - ESP_ERR_NO_MEM memory error
*/
esp_err_t mdns_service_txt_item_set_for_host_with_explicit_value_len(const char *service_type, const char *proto,
esp_err_t mdns_service_txt_item_set_for_host_with_explicit_value_len(const char * instance, const char *service_type, const char *proto,
const char *hostname, const char *key,
const char *value, uint8_t value_len);
@ -478,6 +484,7 @@ esp_err_t mdns_service_txt_item_remove(const char * service_type, const char * p
/**
* @brief Remove TXT item for service TXT record with hostname
*
* @param instance instance name
* @param service_type service type (_http, _ftp, etc)
* @param proto service protocol (_tcp, _udp)
* @param hostname service hostname. If NULL, local hostname will be used.
@ -489,7 +496,7 @@ esp_err_t mdns_service_txt_item_remove(const char * service_type, const char * p
* - ESP_ERR_NOT_FOUND Service not found
* - ESP_ERR_NO_MEM memory error
*/
esp_err_t mdns_service_txt_item_remove_for_host(const char * service_type, const char * proto, const char * hostname,
esp_err_t mdns_service_txt_item_remove_for_host(const char * instance, const char * service_type, const char * proto, const char * hostname,
const char * key);
/**

View File

@ -5131,11 +5131,7 @@ esp_err_t mdns_service_add_for_host(const char * instance, const char * service,
return ESP_ERR_NO_MEM;
}
#if CONFIG_MDNS_MULTIPLE_INSTANCE
mdns_srv_item_t * item = _mdns_get_service_item_instance(instance, service, proto, hostname);
#else
mdns_srv_item_t * item = _mdns_get_service_item(service, proto, hostname);
#endif // CONFIG_MDNS_MULTIPLE_INSTANCE
if (item) {
return ESP_ERR_INVALID_ARG;
}
@ -5173,7 +5169,7 @@ esp_err_t mdns_service_add_for_host(const char * instance, const char * service,
size_t start = xTaskGetTickCount();
size_t timeout_ticks = pdMS_TO_TICKS(MDNS_SERVICE_ADD_TIMEOUT_MS);
while (_mdns_get_service_item(service, proto, hostname) == NULL) {
while (_mdns_get_service_item_instance(instance, service, proto, hostname) == NULL) {
uint32_t expired = xTaskGetTickCount() - start;
if (expired >= timeout_ticks) {
return ESP_FAIL; // Timeout
@ -5204,12 +5200,12 @@ bool mdns_service_exists_with_instance(const char *instance, const char *service
return _mdns_get_service_item_instance(instance, service_type, proto, hostname) != NULL;
}
esp_err_t mdns_service_port_set_for_host(const char * service, const char * proto, const char * hostname, uint16_t port)
esp_err_t mdns_service_port_set_for_host(const char *instance, const char * service, const char * proto, const char * hostname, uint16_t port)
{
if (!_mdns_server || !_mdns_server->services || _str_null_or_empty(service) || _str_null_or_empty(proto) || !port) {
return ESP_ERR_INVALID_ARG;
}
mdns_srv_item_t * s = _mdns_get_service_item(service, proto, hostname);
mdns_srv_item_t * s = _mdns_get_service_item_instance(instance, service, proto, hostname);
if (!s) {
return ESP_ERR_NOT_FOUND;
}
@ -5234,16 +5230,16 @@ esp_err_t mdns_service_port_set(const char * service, const char * proto, uint16
if (!_mdns_server) {
return ESP_ERR_INVALID_STATE;
}
return mdns_service_port_set_for_host(service, proto, _mdns_server->hostname, port);
return mdns_service_port_set_for_host(NULL, service, proto, _mdns_server->hostname, port);
}
esp_err_t mdns_service_txt_set_for_host(const char * service, const char * proto, const char * hostname,
esp_err_t mdns_service_txt_set_for_host(const char * instance, const char * service, const char * proto, const char * hostname,
mdns_txt_item_t txt[], uint8_t num_items)
{
if (!_mdns_server || !_mdns_server->services || _str_null_or_empty(service) || _str_null_or_empty(proto) || (num_items && txt == NULL)) {
return ESP_ERR_INVALID_ARG;
}
mdns_srv_item_t * s = _mdns_get_service_item(service, proto, hostname);
mdns_srv_item_t * s = _mdns_get_service_item_instance(instance, service, proto, hostname);
if (!s) {
return ESP_ERR_NOT_FOUND;
}
@ -5279,10 +5275,10 @@ esp_err_t mdns_service_txt_set(const char * service, const char * proto, mdns_tx
if (!_mdns_server) {
return ESP_ERR_INVALID_STATE;
}
return mdns_service_txt_set_for_host(service, proto, _mdns_server->hostname, txt, num_items);
return mdns_service_txt_set_for_host(NULL, service, proto, _mdns_server->hostname, txt, num_items);
}
esp_err_t mdns_service_txt_item_set_for_host_with_explicit_value_len(const char *service, const char *proto,
esp_err_t mdns_service_txt_item_set_for_host_with_explicit_value_len(const char * instance, const char *service, const char *proto,
const char *hostname, const char *key,
const char *value, uint8_t value_len)
{
@ -5290,7 +5286,7 @@ esp_err_t mdns_service_txt_item_set_for_host_with_explicit_value_len(const char
_str_null_or_empty(key) || !value) {
return ESP_ERR_INVALID_ARG;
}
mdns_srv_item_t *s = _mdns_get_service_item(service, proto, hostname);
mdns_srv_item_t *s = _mdns_get_service_item_instance(instance, service, proto, hostname);
if (!s) {
return ESP_ERR_NOT_FOUND;
}
@ -5324,10 +5320,10 @@ esp_err_t mdns_service_txt_item_set_for_host_with_explicit_value_len(const char
return ESP_OK;
}
esp_err_t mdns_service_txt_item_set_for_host(const char *service, const char *proto, const char *hostname,
esp_err_t mdns_service_txt_item_set_for_host(const char * instance, const char *service, const char *proto, const char *hostname,
const char *key, const char *value)
{
return mdns_service_txt_item_set_for_host_with_explicit_value_len(service, proto, hostname, key, value,
return mdns_service_txt_item_set_for_host_with_explicit_value_len(instance, service, proto, hostname, key, value,
strlen(value));
}
@ -5337,7 +5333,7 @@ esp_err_t mdns_service_txt_item_set(const char *service, const char *proto, cons
if (!_mdns_server) {
return ESP_ERR_INVALID_STATE;
}
return mdns_service_txt_item_set_for_host_with_explicit_value_len(service, proto, _mdns_server->hostname, key,
return mdns_service_txt_item_set_for_host_with_explicit_value_len(NULL, service, proto, _mdns_server->hostname, key,
value, strlen(value));
}
@ -5347,17 +5343,17 @@ esp_err_t mdns_service_txt_item_set_with_explicit_value_len(const char *service,
if (!_mdns_server) {
return ESP_ERR_INVALID_STATE;
}
return mdns_service_txt_item_set_for_host_with_explicit_value_len(service, proto, _mdns_server->hostname, key,
return mdns_service_txt_item_set_for_host_with_explicit_value_len(NULL, service, proto, _mdns_server->hostname, key,
value, value_len);
}
esp_err_t mdns_service_txt_item_remove_for_host(const char * service, const char * proto, const char * hostname,
esp_err_t mdns_service_txt_item_remove_for_host(const char * instance, const char * service, const char * proto, const char * hostname,
const char * key)
{
if (!_mdns_server || !_mdns_server->services || _str_null_or_empty(service) || _str_null_or_empty(proto) || _str_null_or_empty(key)) {
return ESP_ERR_INVALID_ARG;
}
mdns_srv_item_t * s = _mdns_get_service_item(service, proto, hostname);
mdns_srv_item_t * s = _mdns_get_service_item_instance(instance, service, proto, hostname);
if (!s) {
return ESP_ERR_NOT_FOUND;
}
@ -5387,7 +5383,7 @@ esp_err_t mdns_service_txt_item_remove(const char * service, const char * proto,
if (!_mdns_server) {
return ESP_ERR_INVALID_STATE;
}
return mdns_service_txt_item_remove_for_host(service, proto, _mdns_server->hostname, key);
return mdns_service_txt_item_remove_for_host(NULL, service, proto, _mdns_server->hostname, key);
}
esp_err_t mdns_service_subtype_add_for_host(const char *instance_name, const char *service, const char *proto,
@ -5398,7 +5394,6 @@ esp_err_t mdns_service_subtype_add_for_host(const char *instance_name, const cha
return ESP_ERR_INVALID_ARG;
}
mdns_srv_item_t * s = _mdns_get_service_item_instance(instance_name, service, proto, hostname);
if (!s) {
return ESP_ERR_NOT_FOUND;
}
@ -5424,7 +5419,7 @@ esp_err_t mdns_service_subtype_add_for_host(const char *instance_name, const cha
return ESP_OK;
}
esp_err_t mdns_service_instance_name_set_for_host(const char * service, const char * proto, const char * hostname,
esp_err_t mdns_service_instance_name_set_for_host(const char * instance_old, const char * service, const char * proto, const char * hostname,
const char * instance)
{
if (!_mdns_server || !_mdns_server->services || _str_null_or_empty(service) || _str_null_or_empty(proto)) {
@ -5433,7 +5428,7 @@ esp_err_t mdns_service_instance_name_set_for_host(const char * service, const ch
if (_str_null_or_empty(instance) || strlen(instance) > (MDNS_NAME_BUF_LEN - 1)) {
return ESP_ERR_INVALID_ARG;
}
mdns_srv_item_t * s = _mdns_get_service_item(service, proto, hostname);
mdns_srv_item_t * s = _mdns_get_service_item_instance(instance_old, service, proto, hostname);
if (!s) {
return ESP_ERR_NOT_FOUND;
}
@ -5464,15 +5459,15 @@ esp_err_t mdns_service_instance_name_set(const char * service, const char * prot
if (!_mdns_server) {
return ESP_ERR_INVALID_STATE;
}
return mdns_service_instance_name_set_for_host(service, proto, _mdns_server->hostname, instance);
return mdns_service_instance_name_set_for_host(NULL, service, proto, _mdns_server->hostname, instance);
}
esp_err_t mdns_service_remove_for_host(const char * service, const char * proto, const char * hostname)
esp_err_t mdns_service_remove_for_host(const char * instance, const char * service, const char * proto, const char * hostname)
{
if (!_mdns_server || !_mdns_server->services || _str_null_or_empty(service) || _str_null_or_empty(proto)) {
return ESP_ERR_INVALID_ARG;
}
mdns_srv_item_t * s = _mdns_get_service_item(service, proto, hostname);
mdns_srv_item_t * s = _mdns_get_service_item_instance(instance, service, proto, hostname);
if (!s) {
return ESP_ERR_NOT_FOUND;
}
@ -5496,7 +5491,7 @@ esp_err_t mdns_service_remove(const char * service_type, const char * proto)
if (!_mdns_server) {
return ESP_ERR_INVALID_STATE;
}
return mdns_service_remove_for_host(service_type, proto, _mdns_server->hostname);
return mdns_service_remove_for_host(NULL, service_type, proto, _mdns_server->hostname);
}
esp_err_t mdns_service_remove_all(void)