diff --git a/components/mdns/mdns_console.c b/components/mdns/mdns_console.c index 73325d3f2..55f7a44df 100644 --- a/components/mdns/mdns_console.c +++ b/components/mdns/mdns_console.c @@ -860,6 +860,8 @@ static struct { struct arg_str *service; struct arg_str *proto; struct arg_int *port; + struct arg_str *host; + struct arg_str *instance; struct arg_end *end; } mdns_service_port_set_args; @@ -876,7 +878,19 @@ static int cmd_mdns_service_port_set(int argc, char **argv) return 1; } - ESP_ERROR_CHECK( mdns_service_port_set(mdns_service_port_set_args.service->sval[0], mdns_service_port_set_args.proto->sval[0], mdns_service_port_set_args.port->ival[0]) ); + const char *host = NULL; + if (mdns_service_port_set_args.host->count && mdns_service_port_set_args.host->sval[0]) { + host = mdns_service_port_set_args.host->sval[0]; + } + const char *instance = NULL; + if (mdns_service_port_set_args.instance->count && mdns_service_port_set_args.instance->sval[0]) { + instance = mdns_service_port_set_args.instance->sval[0]; + } + esp_err_t err = mdns_service_port_set_for_host(instance, mdns_service_port_set_args.service->sval[0], mdns_service_port_set_args.proto->sval[0], host, mdns_service_port_set_args.port->ival[0]); + if (err != ESP_OK) { + printf("mdns_service_port_set_for_host() failed with %s\n", esp_err_to_name(err)); + return 1; + } return 0; } @@ -885,6 +899,8 @@ static void register_mdns_service_port_set(void) mdns_service_port_set_args.service = arg_str1(NULL, NULL, "", "MDNS Service"); mdns_service_port_set_args.proto = arg_str1(NULL, NULL, "", "IP Protocol"); mdns_service_port_set_args.port = arg_int1(NULL, NULL, "", "Service Port"); + mdns_service_port_set_args.host = arg_str0("h", "host", "", "Service for this (delegated) host"); + mdns_service_port_set_args.instance = arg_str0("i", "instance", "", "Instance name"); mdns_service_port_set_args.end = arg_end(2); const esp_console_cmd_t cmd_add = { diff --git a/components/mdns/tests/host_test/pytest_mdns.py b/components/mdns/tests/host_test/pytest_mdns.py index 5050f5130..7f7c37122 100644 --- a/components/mdns/tests/host_test/pytest_mdns.py +++ b/components/mdns/tests/host_test/pytest_mdns.py @@ -107,17 +107,18 @@ def test_remove_delegated_service(mdns_console, dig_app): mdns_console.get_output('MDNS: Service Instance: extern') -def check_txt_for_service(instance, service, proto, mdns_console, dig_app, host=None): +def check_txt_for_service(instance, service, proto, mdns_console, dig_app, host=None, with_inst=False): for_host_arg = f'-h {host}' if host is not None else '' - mdns_console.send_input(f'mdns_service_txt_set {service} {proto} {for_host_arg} key1 value1') + for_inst_arg = f'-i {instance}' if with_inst else '' + mdns_console.send_input(f'mdns_service_txt_set {service} {proto} {for_host_arg} {for_inst_arg} key1 value1') dig_app.check_record(f'{instance}.{service}.{proto}.local', query_type='SRV', expected=True) dig_app.check_record(f'{service}.{proto}.local', query_type='TXT', expected=True, expect='key1=value1') - mdns_console.send_input(f'mdns_service_txt_set {service} {proto} {for_host_arg} key2 value2') + mdns_console.send_input(f'mdns_service_txt_set {service} {proto} {for_host_arg} {for_inst_arg} key2 value2') dig_app.check_record(f'{service}.{proto}.local', query_type='TXT', expected=True, expect='key2=value2') - mdns_console.send_input(f'mdns_service_txt_remove {service} {proto} {for_host_arg} key2') + mdns_console.send_input(f'mdns_service_txt_remove {service} {proto} {for_host_arg} {for_inst_arg} key2') dig_app.check_record(f'{service}.{proto}.local', query_type='TXT', expected=False, expect='key2=value2') dig_app.check_record(f'{service}.{proto}.local', query_type='TXT', expected=True, expect='key1=value1') - mdns_console.send_input(f'mdns_service_txt_replace {service} {proto} {for_host_arg} key3=value3 key4=value4') + mdns_console.send_input(f'mdns_service_txt_replace {service} {proto} {for_host_arg} {for_inst_arg} key3=value3 key4=value4') dig_app.check_record(f'{service}.{proto}.local', query_type='TXT', expected=False, expect='key1=value1') dig_app.check_record(f'{service}.{proto}.local', query_type='TXT', expected=True, expect='key3=value3') dig_app.check_record(f'{service}.{proto}.local', query_type='TXT', expected=True, expect='key4=value4') @@ -125,10 +126,25 @@ def check_txt_for_service(instance, service, proto, mdns_console, dig_app, host= def test_update_txt(mdns_console, dig_app): check_txt_for_service('local', '_test', '_tcp', mdns_console=mdns_console, dig_app=dig_app) + check_txt_for_service('local', '_test', '_tcp', mdns_console=mdns_console, dig_app=dig_app, with_inst=True) def test_update_delegated_txt(mdns_console, dig_app): check_txt_for_service('extern', '_test2', '_tcp', mdns_console=mdns_console, dig_app=dig_app, host='delegated') + check_txt_for_service('extern', '_test2', '_tcp', mdns_console=mdns_console, dig_app=dig_app, host='delegated', with_inst=True) + + +def test_service_port_set(mdns_console, dig_app): + dig_app.check_record('local._test._tcp.local', query_type='SRV', expected=True, expect='80') + mdns_console.send_input('mdns_service_port_set _test _tcp 81') + dig_app.check_record('local._test._tcp.local', query_type='SRV', expected=True, expect='81') + mdns_console.send_input('mdns_service_port_set _test2 _tcp -h delegated 82') + dig_app.check_record('extern._test2._tcp.local', query_type='SRV', expected=True, expect='82') + mdns_console.send_input('mdns_service_port_set _test2 _tcp -h delegated -i extern 83') + dig_app.check_record('extern._test2._tcp.local', query_type='SRV', expected=True, expect='83') + mdns_console.send_input('mdns_service_port_set _test2 _tcp -h delegated -i invalid_inst 84') + mdns_console.get_output('ESP_ERR_NOT_FOUND') + dig_app.check_record('extern._test2._tcp.local', query_type='SRV', expected=True, expect='83') if __name__ == '__main__':