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 * @brief Remove service from mDNS server with hostname
* *
* @param instance instance name
* @param service_type service type (_http, _ftp, etc) * @param service_type service type (_http, _ftp, etc)
* @param proto service protocol (_tcp, _udp) * @param proto service protocol (_tcp, _udp)
* @param hostname service hostname. If NULL, local hostname will be used. * @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_NOT_FOUND Service not found
* - ESP_ERR_NO_MEM memory error * - 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 * @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 * @brief Set instance name for service with hostname
* *
* @param instance_old original instance name
* @param service_type service type (_http, _ftp, etc) * @param service_type service type (_http, _ftp, etc)
* @param proto service protocol (_tcp, _udp) * @param proto service protocol (_tcp, _udp)
* @param hostname service hostname. If NULL, local hostname will be used. * @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_NOT_FOUND Service not found
* - ESP_ERR_NO_MEM memory error * - 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); 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 * @brief Set service port with hostname
* *
* @param instance instance name
* @param service_type service type (_http, _ftp, etc) * @param service_type service type (_http, _ftp, etc)
* @param proto service protocol (_tcp, _udp) * @param proto service protocol (_tcp, _udp)
* @param hostname service hostname. If NULL, local hostname will be used. * @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_NOT_FOUND Service not found
* - ESP_ERR_NO_MEM memory error * - 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); 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 * @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 service_type service type (_http, _ftp, etc)
* @param proto service protocol (_tcp, _udp) * @param proto service protocol (_tcp, _udp)
* @param hostname service hostname. If NULL, local hostname will be used. * @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_NOT_FOUND Service not found
* - ESP_ERR_NO_MEM memory error * - 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); 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 * @note The value length will be automatically decided by strlen
* *
* @param instance instance name
* @param service_type service type (_http, _ftp, etc) * @param service_type service type (_http, _ftp, etc)
* @param proto service protocol (_tcp, _udp) * @param proto service protocol (_tcp, _udp)
* @param hostname service hostname. If NULL, local hostname will be used. * @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_NOT_FOUND Service not found
* - ESP_ERR_NO_MEM memory error * - 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); const char * key, const char * value);
/** /**
* @brief Set/Add TXT item for service TXT record with hostname and txt value length * @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 service_type service type (_http, _ftp, etc)
* @param proto service protocol (_tcp, _udp) * @param proto service protocol (_tcp, _udp)
* @param hostname service hostname. If NULL, local hostname will be used. * @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_NOT_FOUND Service not found
* - ESP_ERR_NO_MEM memory error * - 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 *hostname, const char *key,
const char *value, uint8_t value_len); 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 * @brief Remove TXT item for service TXT record with hostname
* *
* @param instance instance name
* @param service_type service type (_http, _ftp, etc) * @param service_type service type (_http, _ftp, etc)
* @param proto service protocol (_tcp, _udp) * @param proto service protocol (_tcp, _udp)
* @param hostname service hostname. If NULL, local hostname will be used. * @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_NOT_FOUND Service not found
* - ESP_ERR_NO_MEM memory error * - 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); 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; return ESP_ERR_NO_MEM;
} }
#if CONFIG_MDNS_MULTIPLE_INSTANCE
mdns_srv_item_t * item = _mdns_get_service_item_instance(instance, service, proto, hostname); 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) { if (item) {
return ESP_ERR_INVALID_ARG; 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 start = xTaskGetTickCount();
size_t timeout_ticks = pdMS_TO_TICKS(MDNS_SERVICE_ADD_TIMEOUT_MS); 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; uint32_t expired = xTaskGetTickCount() - start;
if (expired >= timeout_ticks) { if (expired >= timeout_ticks) {
return ESP_FAIL; // Timeout 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; 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) { if (!_mdns_server || !_mdns_server->services || _str_null_or_empty(service) || _str_null_or_empty(proto) || !port) {
return ESP_ERR_INVALID_ARG; 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) { if (!s) {
return ESP_ERR_NOT_FOUND; 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) { if (!_mdns_server) {
return ESP_ERR_INVALID_STATE; 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) 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)) { 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; 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) { if (!s) {
return ESP_ERR_NOT_FOUND; 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) { if (!_mdns_server) {
return ESP_ERR_INVALID_STATE; 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 *hostname, const char *key,
const char *value, uint8_t value_len) 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) { _str_null_or_empty(key) || !value) {
return ESP_ERR_INVALID_ARG; 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) { if (!s) {
return ESP_ERR_NOT_FOUND; 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; 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) 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)); strlen(value));
} }
@ -5337,7 +5333,7 @@ esp_err_t mdns_service_txt_item_set(const char *service, const char *proto, cons
if (!_mdns_server) { if (!_mdns_server) {
return ESP_ERR_INVALID_STATE; 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)); 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) { if (!_mdns_server) {
return ESP_ERR_INVALID_STATE; 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); 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) const char * key)
{ {
if (!_mdns_server || !_mdns_server->services || _str_null_or_empty(service) || _str_null_or_empty(proto) || _str_null_or_empty(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; 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) { if (!s) {
return ESP_ERR_NOT_FOUND; 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) { if (!_mdns_server) {
return ESP_ERR_INVALID_STATE; 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, 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; return ESP_ERR_INVALID_ARG;
} }
mdns_srv_item_t * s = _mdns_get_service_item_instance(instance_name, service, proto, hostname); mdns_srv_item_t * s = _mdns_get_service_item_instance(instance_name, service, proto, hostname);
if (!s) { if (!s) {
return ESP_ERR_NOT_FOUND; 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; 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) const char * instance)
{ {
if (!_mdns_server || !_mdns_server->services || _str_null_or_empty(service) || _str_null_or_empty(proto)) { 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)) { if (_str_null_or_empty(instance) || strlen(instance) > (MDNS_NAME_BUF_LEN - 1)) {
return ESP_ERR_INVALID_ARG; 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) { if (!s) {
return ESP_ERR_NOT_FOUND; 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) { if (!_mdns_server) {
return ESP_ERR_INVALID_STATE; 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)) { if (!_mdns_server || !_mdns_server->services || _str_null_or_empty(service) || _str_null_or_empty(proto)) {
return ESP_ERR_INVALID_ARG; 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) { if (!s) {
return ESP_ERR_NOT_FOUND; 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) { if (!_mdns_server) {
return ESP_ERR_INVALID_STATE; 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) esp_err_t mdns_service_remove_all(void)