Skip to content

Commit 69902ea

Browse files
mdns: support multiple instance for mdns service txt set
* Original commit: espressif/esp-idf@50f6302
1 parent d5001e8 commit 69902ea

File tree

2 files changed

+36
-34
lines changed

2 files changed

+36
-34
lines changed

components/mdns/include/mdns.h

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,7 @@ esp_err_t mdns_service_remove(const char * service_type, const char * proto);
269269
/**
270270
* @brief Remove service from mDNS server with hostname
271271
*
272+
* @param instance instance name
272273
* @param service_type service type (_http, _ftp, etc)
273274
* @param proto service protocol (_tcp, _udp)
274275
* @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);
279280
* - ESP_ERR_NOT_FOUND Service not found
280281
* - ESP_ERR_NO_MEM memory error
281282
*/
282-
esp_err_t mdns_service_remove_for_host(const char * service_type, const char * proto, const char *hostname);
283+
esp_err_t mdns_service_remove_for_host(const char *instance, const char * service_type, const char * proto, const char *hostname);
283284

284285
/**
285286
* @brief Set instance name for service
@@ -299,6 +300,7 @@ esp_err_t mdns_service_instance_name_set(const char * service_type, const char *
299300
/**
300301
* @brief Set instance name for service with hostname
301302
*
303+
* @param instance_old original instance name
302304
* @param service_type service type (_http, _ftp, etc)
303305
* @param proto service protocol (_tcp, _udp)
304306
* @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 *
310312
* - ESP_ERR_NOT_FOUND Service not found
311313
* - ESP_ERR_NO_MEM memory error
312314
*/
313-
esp_err_t mdns_service_instance_name_set_for_host(const char * service_type, const char * proto, const char * hostname,
315+
esp_err_t mdns_service_instance_name_set_for_host(const char * instance_old, const char * service_type, const char * proto, const char * hostname,
314316
const char * instance_name);
315317

316318
/**
@@ -332,6 +334,7 @@ esp_err_t mdns_service_port_set(const char * service_type, const char * proto, u
332334
/**
333335
* @brief Set service port with hostname
334336
*
337+
* @param instance instance name
335338
* @param service_type service type (_http, _ftp, etc)
336339
* @param proto service protocol (_tcp, _udp)
337340
* @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
343346
* - ESP_ERR_NOT_FOUND Service not found
344347
* - ESP_ERR_NO_MEM memory error
345348
*/
346-
esp_err_t mdns_service_port_set_for_host(const char * service_type, const char * proto, const char * hostname,
349+
esp_err_t mdns_service_port_set_for_host(const char * instance, const char * service_type, const char * proto, const char * hostname,
347350
uint16_t port);
348351

349352
/**
@@ -369,6 +372,7 @@ esp_err_t mdns_service_txt_set(const char * service_type, const char * proto, md
369372
*
370373
* @note The value length of txt items will be automatically decided by strlen
371374
*
375+
* @param instance instance name
372376
* @param service_type service type (_http, _ftp, etc)
373377
* @param proto service protocol (_tcp, _udp)
374378
* @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
381385
* - ESP_ERR_NOT_FOUND Service not found
382386
* - ESP_ERR_NO_MEM memory error
383387
*/
384-
esp_err_t mdns_service_txt_set_for_host(const char * service_type, const char * proto, const char * hostname,
388+
esp_err_t mdns_service_txt_set_for_host(const char * instance, const char * service_type, const char * proto, const char * hostname,
385389
mdns_txt_item_t txt[], uint8_t num_items);
386390

387391
/**
@@ -425,6 +429,7 @@ esp_err_t mdns_service_txt_item_set_with_explicit_value_len(const char *service_
425429
*
426430
* @note The value length will be automatically decided by strlen
427431
*
432+
* @param instance instance name
428433
* @param service_type service type (_http, _ftp, etc)
429434
* @param proto service protocol (_tcp, _udp)
430435
* @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_
437442
* - ESP_ERR_NOT_FOUND Service not found
438443
* - ESP_ERR_NO_MEM memory error
439444
*/
440-
esp_err_t mdns_service_txt_item_set_for_host(const char * service_type, const char * proto, const char * hostname,
445+
esp_err_t mdns_service_txt_item_set_for_host(const char * instance, const char * service_type, const char * proto, const char * hostname,
441446
const char * key, const char * value);
442447

443448
/**
444449
* @brief Set/Add TXT item for service TXT record with hostname and txt value length
445450
*
451+
* @param instance instance name
446452
* @param service_type service type (_http, _ftp, etc)
447453
* @param proto service protocol (_tcp, _udp)
448454
* @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
456462
* - ESP_ERR_NOT_FOUND Service not found
457463
* - ESP_ERR_NO_MEM memory error
458464
*/
459-
esp_err_t mdns_service_txt_item_set_for_host_with_explicit_value_len(const char *service_type, const char *proto,
465+
esp_err_t mdns_service_txt_item_set_for_host_with_explicit_value_len(const char * instance, const char *service_type, const char *proto,
460466
const char *hostname, const char *key,
461467
const char *value, uint8_t value_len);
462468

@@ -478,6 +484,7 @@ esp_err_t mdns_service_txt_item_remove(const char * service_type, const char * p
478484
/**
479485
* @brief Remove TXT item for service TXT record with hostname
480486
*
487+
* @param instance instance name
481488
* @param service_type service type (_http, _ftp, etc)
482489
* @param proto service protocol (_tcp, _udp)
483490
* @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
489496
* - ESP_ERR_NOT_FOUND Service not found
490497
* - ESP_ERR_NO_MEM memory error
491498
*/
492-
esp_err_t mdns_service_txt_item_remove_for_host(const char * service_type, const char * proto, const char * hostname,
499+
esp_err_t mdns_service_txt_item_remove_for_host(const char * instance, const char * service_type, const char * proto, const char * hostname,
493500
const char * key);
494501

495502
/**

components/mdns/mdns.c

Lines changed: 22 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -5131,11 +5131,7 @@ esp_err_t mdns_service_add_for_host(const char * instance, const char * service,
51315131
return ESP_ERR_NO_MEM;
51325132
}
51335133

5134-
#if CONFIG_MDNS_MULTIPLE_INSTANCE
51355134
mdns_srv_item_t * item = _mdns_get_service_item_instance(instance, service, proto, hostname);
5136-
#else
5137-
mdns_srv_item_t * item = _mdns_get_service_item(service, proto, hostname);
5138-
#endif // CONFIG_MDNS_MULTIPLE_INSTANCE
51395135
if (item) {
51405136
return ESP_ERR_INVALID_ARG;
51415137
}
@@ -5173,7 +5169,7 @@ esp_err_t mdns_service_add_for_host(const char * instance, const char * service,
51735169

51745170
size_t start = xTaskGetTickCount();
51755171
size_t timeout_ticks = pdMS_TO_TICKS(MDNS_SERVICE_ADD_TIMEOUT_MS);
5176-
while (_mdns_get_service_item(service, proto, hostname) == NULL) {
5172+
while (_mdns_get_service_item_instance(instance, service, proto, hostname) == NULL) {
51775173
uint32_t expired = xTaskGetTickCount() - start;
51785174
if (expired >= timeout_ticks) {
51795175
return ESP_FAIL; // Timeout
@@ -5204,12 +5200,12 @@ bool mdns_service_exists_with_instance(const char *instance, const char *service
52045200
return _mdns_get_service_item_instance(instance, service_type, proto, hostname) != NULL;
52055201
}
52065202

5207-
esp_err_t mdns_service_port_set_for_host(const char * service, const char * proto, const char * hostname, uint16_t port)
5203+
esp_err_t mdns_service_port_set_for_host(const char *instance, const char * service, const char * proto, const char * hostname, uint16_t port)
52085204
{
52095205
if (!_mdns_server || !_mdns_server->services || _str_null_or_empty(service) || _str_null_or_empty(proto) || !port) {
52105206
return ESP_ERR_INVALID_ARG;
52115207
}
5212-
mdns_srv_item_t * s = _mdns_get_service_item(service, proto, hostname);
5208+
mdns_srv_item_t * s = _mdns_get_service_item_instance(instance, service, proto, hostname);
52135209
if (!s) {
52145210
return ESP_ERR_NOT_FOUND;
52155211
}
@@ -5234,16 +5230,16 @@ esp_err_t mdns_service_port_set(const char * service, const char * proto, uint16
52345230
if (!_mdns_server) {
52355231
return ESP_ERR_INVALID_STATE;
52365232
}
5237-
return mdns_service_port_set_for_host(service, proto, _mdns_server->hostname, port);
5233+
return mdns_service_port_set_for_host(NULL, service, proto, _mdns_server->hostname, port);
52385234
}
52395235

5240-
esp_err_t mdns_service_txt_set_for_host(const char * service, const char * proto, const char * hostname,
5236+
esp_err_t mdns_service_txt_set_for_host(const char * instance, const char * service, const char * proto, const char * hostname,
52415237
mdns_txt_item_t txt[], uint8_t num_items)
52425238
{
52435239
if (!_mdns_server || !_mdns_server->services || _str_null_or_empty(service) || _str_null_or_empty(proto) || (num_items && txt == NULL)) {
52445240
return ESP_ERR_INVALID_ARG;
52455241
}
5246-
mdns_srv_item_t * s = _mdns_get_service_item(service, proto, hostname);
5242+
mdns_srv_item_t * s = _mdns_get_service_item_instance(instance, service, proto, hostname);
52475243
if (!s) {
52485244
return ESP_ERR_NOT_FOUND;
52495245
}
@@ -5279,18 +5275,18 @@ esp_err_t mdns_service_txt_set(const char * service, const char * proto, mdns_tx
52795275
if (!_mdns_server) {
52805276
return ESP_ERR_INVALID_STATE;
52815277
}
5282-
return mdns_service_txt_set_for_host(service, proto, _mdns_server->hostname, txt, num_items);
5278+
return mdns_service_txt_set_for_host(NULL, service, proto, _mdns_server->hostname, txt, num_items);
52835279
}
52845280

5285-
esp_err_t mdns_service_txt_item_set_for_host_with_explicit_value_len(const char *service, const char *proto,
5281+
esp_err_t mdns_service_txt_item_set_for_host_with_explicit_value_len(const char * instance, const char *service, const char *proto,
52865282
const char *hostname, const char *key,
52875283
const char *value, uint8_t value_len)
52885284
{
52895285
if (!_mdns_server || !_mdns_server->services || _str_null_or_empty(service) || _str_null_or_empty(proto) ||
52905286
_str_null_or_empty(key) || !value) {
52915287
return ESP_ERR_INVALID_ARG;
52925288
}
5293-
mdns_srv_item_t *s = _mdns_get_service_item(service, proto, hostname);
5289+
mdns_srv_item_t *s = _mdns_get_service_item_instance(instance, service, proto, hostname);
52945290
if (!s) {
52955291
return ESP_ERR_NOT_FOUND;
52965292
}
@@ -5324,10 +5320,10 @@ esp_err_t mdns_service_txt_item_set_for_host_with_explicit_value_len(const char
53245320
return ESP_OK;
53255321
}
53265322

5327-
esp_err_t mdns_service_txt_item_set_for_host(const char *service, const char *proto, const char *hostname,
5323+
esp_err_t mdns_service_txt_item_set_for_host(const char * instance, const char *service, const char *proto, const char *hostname,
53285324
const char *key, const char *value)
53295325
{
5330-
return mdns_service_txt_item_set_for_host_with_explicit_value_len(service, proto, hostname, key, value,
5326+
return mdns_service_txt_item_set_for_host_with_explicit_value_len(instance, service, proto, hostname, key, value,
53315327
strlen(value));
53325328
}
53335329

@@ -5337,7 +5333,7 @@ esp_err_t mdns_service_txt_item_set(const char *service, const char *proto, cons
53375333
if (!_mdns_server) {
53385334
return ESP_ERR_INVALID_STATE;
53395335
}
5340-
return mdns_service_txt_item_set_for_host_with_explicit_value_len(service, proto, _mdns_server->hostname, key,
5336+
return mdns_service_txt_item_set_for_host_with_explicit_value_len(NULL, service, proto, _mdns_server->hostname, key,
53415337
value, strlen(value));
53425338
}
53435339

@@ -5347,17 +5343,17 @@ esp_err_t mdns_service_txt_item_set_with_explicit_value_len(const char *service,
53475343
if (!_mdns_server) {
53485344
return ESP_ERR_INVALID_STATE;
53495345
}
5350-
return mdns_service_txt_item_set_for_host_with_explicit_value_len(service, proto, _mdns_server->hostname, key,
5346+
return mdns_service_txt_item_set_for_host_with_explicit_value_len(NULL, service, proto, _mdns_server->hostname, key,
53515347
value, value_len);
53525348
}
53535349

5354-
esp_err_t mdns_service_txt_item_remove_for_host(const char * service, const char * proto, const char * hostname,
5350+
esp_err_t mdns_service_txt_item_remove_for_host(const char * instance, const char * service, const char * proto, const char * hostname,
53555351
const char * key)
53565352
{
53575353
if (!_mdns_server || !_mdns_server->services || _str_null_or_empty(service) || _str_null_or_empty(proto) || _str_null_or_empty(key)) {
53585354
return ESP_ERR_INVALID_ARG;
53595355
}
5360-
mdns_srv_item_t * s = _mdns_get_service_item(service, proto, hostname);
5356+
mdns_srv_item_t * s = _mdns_get_service_item_instance(instance, service, proto, hostname);
53615357
if (!s) {
53625358
return ESP_ERR_NOT_FOUND;
53635359
}
@@ -5387,7 +5383,7 @@ esp_err_t mdns_service_txt_item_remove(const char * service, const char * proto,
53875383
if (!_mdns_server) {
53885384
return ESP_ERR_INVALID_STATE;
53895385
}
5390-
return mdns_service_txt_item_remove_for_host(service, proto, _mdns_server->hostname, key);
5386+
return mdns_service_txt_item_remove_for_host(NULL, service, proto, _mdns_server->hostname, key);
53915387
}
53925388

53935389
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
53985394
return ESP_ERR_INVALID_ARG;
53995395
}
54005396
mdns_srv_item_t * s = _mdns_get_service_item_instance(instance_name, service, proto, hostname);
5401-
54025397
if (!s) {
54035398
return ESP_ERR_NOT_FOUND;
54045399
}
@@ -5424,7 +5419,7 @@ esp_err_t mdns_service_subtype_add_for_host(const char *instance_name, const cha
54245419
return ESP_OK;
54255420
}
54265421

5427-
esp_err_t mdns_service_instance_name_set_for_host(const char * service, const char * proto, const char * hostname,
5422+
esp_err_t mdns_service_instance_name_set_for_host(const char * instance_old, const char * service, const char * proto, const char * hostname,
54285423
const char * instance)
54295424
{
54305425
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
54335428
if (_str_null_or_empty(instance) || strlen(instance) > (MDNS_NAME_BUF_LEN - 1)) {
54345429
return ESP_ERR_INVALID_ARG;
54355430
}
5436-
mdns_srv_item_t * s = _mdns_get_service_item(service, proto, hostname);
5431+
mdns_srv_item_t * s = _mdns_get_service_item_instance(instance_old, service, proto, hostname);
54375432
if (!s) {
54385433
return ESP_ERR_NOT_FOUND;
54395434
}
@@ -5464,15 +5459,15 @@ esp_err_t mdns_service_instance_name_set(const char * service, const char * prot
54645459
if (!_mdns_server) {
54655460
return ESP_ERR_INVALID_STATE;
54665461
}
5467-
return mdns_service_instance_name_set_for_host(service, proto, _mdns_server->hostname, instance);
5462+
return mdns_service_instance_name_set_for_host(NULL, service, proto, _mdns_server->hostname, instance);
54685463
}
54695464

5470-
esp_err_t mdns_service_remove_for_host(const char * service, const char * proto, const char * hostname)
5465+
esp_err_t mdns_service_remove_for_host(const char * instance, const char * service, const char * proto, const char * hostname)
54715466
{
54725467
if (!_mdns_server || !_mdns_server->services || _str_null_or_empty(service) || _str_null_or_empty(proto)) {
54735468
return ESP_ERR_INVALID_ARG;
54745469
}
5475-
mdns_srv_item_t * s = _mdns_get_service_item(service, proto, hostname);
5470+
mdns_srv_item_t * s = _mdns_get_service_item_instance(instance, service, proto, hostname);
54765471
if (!s) {
54775472
return ESP_ERR_NOT_FOUND;
54785473
}
@@ -5496,7 +5491,7 @@ esp_err_t mdns_service_remove(const char * service_type, const char * proto)
54965491
if (!_mdns_server) {
54975492
return ESP_ERR_INVALID_STATE;
54985493
}
5499-
return mdns_service_remove_for_host(service_type, proto, _mdns_server->hostname);
5494+
return mdns_service_remove_for_host(NULL, service_type, proto, _mdns_server->hostname);
55005495
}
55015496

55025497
esp_err_t mdns_service_remove_all(void)

0 commit comments

Comments
 (0)