| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451 |
- /*
- * SPDX-FileCopyrightText: 2015-2024 Espressif Systems (Shanghai) CO LTD
- *
- * SPDX-License-Identifier: Apache-2.0
- */
- #include <stdio.h>
- #include <string.h>
- #include "esp_console.h"
- #include "argtable3/argtable3.h"
- #include "mdns.h"
- #include "mdns_private.h"
- #include "inttypes.h"
- static const char *ip_protocol_str[] = {"V4", "V6", "MAX"};
- static void mdns_print_results(mdns_result_t *results)
- {
- mdns_result_t *r = results;
- mdns_ip_addr_t *a = NULL;
- int i = 1;
- while (r) {
- if (r->esp_netif) {
- printf("%d: Interface: %s, Type: %s, TTL: %" PRIu32 "\n", i++, esp_netif_get_ifkey(r->esp_netif),
- ip_protocol_str[r->ip_protocol], r->ttl);
- }
- if (r->instance_name) {
- printf(" PTR : %s\n", r->instance_name);
- }
- if (r->hostname) {
- printf(" SRV : %s.local:%u\n", r->hostname, r->port);
- }
- if (r->txt_count) {
- printf(" TXT : [%u] ", (int)r->txt_count);
- for (size_t t = 0; t < r->txt_count; t++) {
- printf("%s=%s; ", r->txt[t].key, r->txt[t].value);
- }
- printf("\n");
- }
- a = r->addr;
- while (a) {
- if (a->addr.type == ESP_IPADDR_TYPE_V6) {
- printf(" AAAA: " IPV6STR "\n", IPV62STR(a->addr.u_addr.ip6));
- } else {
- printf(" A : " IPSTR "\n", IP2STR(&(a->addr.u_addr.ip4)));
- }
- a = a->next;
- }
- r = r->next;
- }
- }
- static struct {
- struct arg_str *hostname;
- struct arg_int *timeout;
- struct arg_end *end;
- } mdns_query_a_args;
- #ifdef CONFIG_LWIP_IPV4
- static int cmd_mdns_query_a(int argc, char **argv)
- {
- int nerrors = arg_parse(argc, argv, (void **) &mdns_query_a_args);
- if (nerrors != 0) {
- arg_print_errors(stderr, mdns_query_a_args.end, argv[0]);
- return 1;
- }
- const char *hostname = mdns_query_a_args.hostname->sval[0];
- int timeout = mdns_query_a_args.timeout->ival[0];
- if (!hostname || !hostname[0]) {
- printf("ERROR: Hostname not supplied\n");
- return 1;
- }
- if (timeout <= 0) {
- timeout = 1000;
- }
- printf("Query A: %s.local, Timeout: %d\n", hostname, timeout);
- struct esp_ip4_addr addr;
- addr.addr = 0;
- esp_err_t err = mdns_query_a(hostname, timeout, &addr);
- if (err) {
- if (err == ESP_ERR_NOT_FOUND) {
- printf("ERROR: Host was not found!\n");
- return 0;
- }
- printf("ERROR: Query Failed\n");
- return 1;
- }
- printf(IPSTR "\n", IP2STR(&addr));
- return 0;
- }
- static void register_mdns_query_a(void)
- {
- mdns_query_a_args.hostname = arg_str1(NULL, NULL, "<hostname>", "Hostname that is searched for");
- mdns_query_a_args.timeout = arg_int0("t", "timeout", "<timeout>", "Timeout for this query");
- mdns_query_a_args.end = arg_end(2);
- const esp_console_cmd_t cmd_init = {
- .command = "mdns_query_a",
- .help = "Query MDNS for IPv4",
- .hint = NULL,
- .func = &cmd_mdns_query_a,
- .argtable = &mdns_query_a_args
- };
- ESP_ERROR_CHECK( esp_console_cmd_register(&cmd_init) );
- }
- #endif /* CONFIG_LWIP_IPV4 */
- #ifdef CONFIG_LWIP_IPV6
- static int cmd_mdns_query_aaaa(int argc, char **argv)
- {
- int nerrors = arg_parse(argc, argv, (void **) &mdns_query_a_args);
- if (nerrors != 0) {
- arg_print_errors(stderr, mdns_query_a_args.end, argv[0]);
- return 1;
- }
- const char *hostname = mdns_query_a_args.hostname->sval[0];
- int timeout = mdns_query_a_args.timeout->ival[0];
- if (!hostname || !hostname[0]) {
- printf("ERROR: Hostname not supplied\n");
- return 1;
- }
- if (timeout <= 0) {
- timeout = 1000;
- }
- printf("Query AAAA: %s.local, Timeout: %d\n", hostname, timeout);
- struct esp_ip6_addr addr;
- memset(addr.addr, 0, 16);
- esp_err_t err = mdns_query_aaaa(hostname, timeout, &addr);
- if (err) {
- if (err == ESP_ERR_NOT_FOUND) {
- printf("Host was not found!\n");
- return 0;
- }
- printf("ERROR: Query Failed\n");
- return 1;
- }
- printf(IPV6STR "\n", IPV62STR(addr));
- return 0;
- }
- static void register_mdns_query_aaaa(void)
- {
- mdns_query_a_args.hostname = arg_str1(NULL, NULL, "<hostname>", "Hostname that is searched for");
- mdns_query_a_args.timeout = arg_int0("t", "timeout", "<timeout>", "Timeout for this query");
- mdns_query_a_args.end = arg_end(2);
- const esp_console_cmd_t cmd_init = {
- .command = "mdns_query_aaaa",
- .help = "Query MDNS for IPv6",
- .hint = NULL,
- .func = &cmd_mdns_query_aaaa,
- .argtable = &mdns_query_a_args
- };
- ESP_ERROR_CHECK( esp_console_cmd_register(&cmd_init) );
- }
- #endif /* CONFIG_LWIP_IPV6 */
- static struct {
- struct arg_str *instance;
- struct arg_str *service;
- struct arg_str *proto;
- struct arg_int *timeout;
- struct arg_end *end;
- } mdns_query_srv_args;
- static int cmd_mdns_query_srv(int argc, char **argv)
- {
- int nerrors = arg_parse(argc, argv, (void **) &mdns_query_srv_args);
- if (nerrors != 0) {
- arg_print_errors(stderr, mdns_query_srv_args.end, argv[0]);
- return 1;
- }
- const char *instance = mdns_query_srv_args.instance->sval[0];
- const char *service = mdns_query_srv_args.service->sval[0];
- const char *proto = mdns_query_srv_args.proto->sval[0];
- int timeout = mdns_query_srv_args.timeout->ival[0];
- if (timeout <= 0) {
- timeout = 1000;
- }
- printf("Query SRV: %s.%s.%s.local, Timeout: %d\n", instance, service, proto, timeout);
- mdns_result_t *results = NULL;
- esp_err_t err = mdns_query_srv(instance, service, proto, timeout, &results);
- if (err) {
- printf("ERROR: Query Failed\n");
- return 1;
- }
- if (!results) {
- printf("No results found!\n");
- return 0;
- }
- mdns_print_results(results);
- mdns_query_results_free(results);
- return 0;
- }
- static void register_mdns_query_srv(void)
- {
- mdns_query_srv_args.instance = arg_str1(NULL, NULL, "<instance>", "Instance to search for");
- mdns_query_srv_args.service = arg_str1(NULL, NULL, "<service>", "Service to search for (ex. _http, _smb, etc.)");
- mdns_query_srv_args.proto = arg_str1(NULL, NULL, "<proto>", "Protocol to search for (_tcp, _udp, etc.)");
- mdns_query_srv_args.timeout = arg_int0("t", "timeout", "<timeout>", "Timeout for this query");
- mdns_query_srv_args.end = arg_end(2);
- const esp_console_cmd_t cmd_init = {
- .command = "mdns_query_srv",
- .help = "Query MDNS for Service SRV",
- .hint = NULL,
- .func = &cmd_mdns_query_srv,
- .argtable = &mdns_query_srv_args
- };
- ESP_ERROR_CHECK( esp_console_cmd_register(&cmd_init) );
- }
- static struct {
- struct arg_str *instance;
- struct arg_str *service;
- struct arg_str *proto;
- struct arg_int *timeout;
- struct arg_end *end;
- } mdns_query_txt_args;
- static int cmd_mdns_query_txt(int argc, char **argv)
- {
- int nerrors = arg_parse(argc, argv, (void **) &mdns_query_txt_args);
- if (nerrors != 0) {
- arg_print_errors(stderr, mdns_query_txt_args.end, argv[0]);
- return 1;
- }
- const char *instance = mdns_query_txt_args.instance->sval[0];
- const char *service = mdns_query_txt_args.service->sval[0];
- const char *proto = mdns_query_txt_args.proto->sval[0];
- int timeout = mdns_query_txt_args.timeout->ival[0];
- printf("Query TXT: %s.%s.%s.local, Timeout: %d\n", instance, service, proto, timeout);
- if (timeout <= 0) {
- timeout = 5000;
- }
- mdns_result_t *results = NULL;
- esp_err_t err = mdns_query_txt(instance, service, proto, timeout, &results);
- if (err) {
- printf("ERROR: Query Failed\n");
- return 1;
- }
- if (!results) {
- printf("No results found!\n");
- return 0;
- }
- mdns_print_results(results);
- mdns_query_results_free(results);
- return 0;
- }
- static void register_mdns_query_txt(void)
- {
- mdns_query_txt_args.instance = arg_str1(NULL, NULL, "<instance>", "Instance to search for");
- mdns_query_txt_args.service = arg_str1(NULL, NULL, "<service>", "Service to search for (ex. _http, _smb, etc.)");
- mdns_query_txt_args.proto = arg_str1(NULL, NULL, "<proto>", "Protocol to search for (_tcp, _udp, etc.)");
- mdns_query_txt_args.timeout = arg_int0("t", "timeout", "<timeout>", "Timeout for this query");
- mdns_query_txt_args.end = arg_end(2);
- const esp_console_cmd_t cmd_init = {
- .command = "mdns_query_txt",
- .help = "Query MDNS for Service TXT",
- .hint = NULL,
- .func = &cmd_mdns_query_txt,
- .argtable = &mdns_query_txt_args
- };
- ESP_ERROR_CHECK( esp_console_cmd_register(&cmd_init) );
- }
- static struct {
- struct arg_str *service;
- struct arg_str *proto;
- struct arg_int *timeout;
- struct arg_int *max_results;
- struct arg_end *end;
- } mdns_query_ptr_args;
- static int cmd_mdns_query_ptr(int argc, char **argv)
- {
- int nerrors = arg_parse(argc, argv, (void **) &mdns_query_ptr_args);
- if (nerrors != 0) {
- arg_print_errors(stderr, mdns_query_ptr_args.end, argv[0]);
- return 1;
- }
- const char *service = mdns_query_ptr_args.service->sval[0];
- const char *proto = mdns_query_ptr_args.proto->sval[0];
- int timeout = mdns_query_ptr_args.timeout->ival[0];
- int max_results = mdns_query_ptr_args.max_results->ival[0];
- if (timeout <= 0) {
- timeout = 5000;
- }
- if (max_results <= 0 || max_results > 255) {
- max_results = 255;
- }
- printf("Query PTR: %s.%s.local, Timeout: %d, Max Results: %d\n", service, proto, timeout, max_results);
- mdns_result_t *results = NULL;
- esp_err_t err = mdns_query_ptr(service, proto, timeout, max_results, &results);
- if (err) {
- printf("ERROR: Query Failed\n");
- return 1;
- }
- if (!results) {
- printf("No results found!\n");
- return 0;
- }
- mdns_print_results(results);
- mdns_query_results_free(results);
- return 0;
- }
- static void register_mdns_query_ptr(void)
- {
- mdns_query_ptr_args.service = arg_str1(NULL, NULL, "<service>", "Service to search for (ex. _http, _smb, etc.)");
- mdns_query_ptr_args.proto = arg_str1(NULL, NULL, "<proto>", "Protocol to search for (_tcp, _udp, etc.)");
- mdns_query_ptr_args.timeout = arg_int0("t", "timeout", "<timeout>", "Timeout for this query");
- mdns_query_ptr_args.max_results = arg_int0("m", "max_results", "<max_results>", "Maximum results returned");
- mdns_query_ptr_args.end = arg_end(2);
- const esp_console_cmd_t cmd_init = {
- .command = "mdns_query_ptr",
- .help = "Query MDNS for Service",
- .hint = NULL,
- .func = &cmd_mdns_query_ptr,
- .argtable = &mdns_query_ptr_args
- };
- ESP_ERROR_CHECK( esp_console_cmd_register(&cmd_init) );
- }
- static struct {
- struct arg_str *hostname;
- struct arg_int *timeout;
- struct arg_int *max_results;
- struct arg_end *end;
- } mdns_query_ip_args;
- static int cmd_mdns_query_ip(int argc, char **argv)
- {
- int nerrors = arg_parse(argc, argv, (void **) &mdns_query_ip_args);
- if (nerrors != 0) {
- arg_print_errors(stderr, mdns_query_ip_args.end, argv[0]);
- return 1;
- }
- const char *hostname = mdns_query_ip_args.hostname->sval[0];
- int timeout = mdns_query_ip_args.timeout->ival[0];
- int max_results = mdns_query_ip_args.max_results->ival[0];
- if (!hostname || !hostname[0]) {
- printf("ERROR: Hostname not supplied\n");
- return 1;
- }
- if (timeout <= 0) {
- timeout = 1000;
- }
- if (max_results < 0 || max_results > 255) {
- max_results = 255;
- }
- printf("Query IP: %s.local, Timeout: %d, Max Results: %d\n", hostname, timeout, max_results);
- mdns_result_t *results = NULL;
- esp_err_t err = mdns_query(hostname, NULL, NULL, MDNS_TYPE_ANY, timeout, max_results, &results);
- if (err) {
- printf("ERROR: Query Failed\n");
- return 1;
- }
- if (!results) {
- printf("No results found!\n");
- return 0;
- }
- mdns_print_results(results);
- mdns_query_results_free(results);
- return 0;
- }
- static void register_mdns_query_ip(void)
- {
- mdns_query_ip_args.hostname = arg_str1(NULL, NULL, "<hostname>", "Hostname that is searched for");
- mdns_query_ip_args.timeout = arg_int0("t", "timeout", "<timeout>", "Timeout for this query");
- mdns_query_ip_args.max_results = arg_int0("m", "max_results", "<max_results>", "Maximum results returned");
- mdns_query_ip_args.end = arg_end(2);
- const esp_console_cmd_t cmd_init = {
- .command = "mdns_query_ip",
- .help = "Query MDNS for IP",
- .hint = NULL,
- .func = &cmd_mdns_query_ip,
- .argtable = &mdns_query_ip_args
- };
- ESP_ERROR_CHECK( esp_console_cmd_register(&cmd_init) );
- }
- static struct {
- struct arg_str *instance;
- struct arg_str *service;
- struct arg_str *proto;
- struct arg_int *timeout;
- struct arg_int *max_results;
- struct arg_end *end;
- } mdns_query_svc_args;
- static int cmd_mdns_query_svc(int argc, char **argv)
- {
- int nerrors = arg_parse(argc, argv, (void **) &mdns_query_svc_args);
- if (nerrors != 0) {
- arg_print_errors(stderr, mdns_query_svc_args.end, argv[0]);
- return 1;
- }
- const char *instance = mdns_query_svc_args.instance->sval[0];
- const char *service = mdns_query_svc_args.service->sval[0];
- const char *proto = mdns_query_svc_args.proto->sval[0];
- int timeout = mdns_query_svc_args.timeout->ival[0];
- int max_results = mdns_query_svc_args.max_results->ival[0];
- if (timeout <= 0) {
- timeout = 5000;
- }
- if (max_results < 0 || max_results > 255) {
- max_results = 255;
- }
- printf("Query SVC: %s.%s.%s.local, Timeout: %d, Max Results: %d\n", instance, service, proto, timeout, max_results);
- mdns_result_t *results = NULL;
- esp_err_t err = mdns_query(instance, service, proto, MDNS_TYPE_ANY, timeout, max_results, &results);
- if (err) {
- printf("ERROR: Query Failed\n");
- return 1;
- }
- if (!results) {
- printf("No results found!\n");
- return 0;
- }
- mdns_print_results(results);
- mdns_query_results_free(results);
- return 0;
- }
- static void register_mdns_query_svc(void)
- {
- mdns_query_svc_args.instance = arg_str1(NULL, NULL, "<instance>", "Instance to search for");
- mdns_query_svc_args.service = arg_str1(NULL, NULL, "<service>", "Service to search for (ex. _http, _smb, etc.)");
- mdns_query_svc_args.proto = arg_str1(NULL, NULL, "<proto>", "Protocol to search for (_tcp, _udp, etc.)");
- mdns_query_svc_args.timeout = arg_int0("t", "timeout", "<timeout>", "Timeout for this query");
- mdns_query_svc_args.max_results = arg_int0("m", "max_results", "<max_results>", "Maximum results returned");
- mdns_query_svc_args.end = arg_end(2);
- const esp_console_cmd_t cmd_init = {
- .command = "mdns_query_svc",
- .help = "Query MDNS for Service TXT & SRV",
- .hint = NULL,
- .func = &cmd_mdns_query_svc,
- .argtable = &mdns_query_svc_args
- };
- ESP_ERROR_CHECK( esp_console_cmd_register(&cmd_init) );
- }
- static struct {
- struct arg_str *hostname;
- struct arg_str *instance;
- struct arg_end *end;
- } mdns_init_args;
- static int cmd_mdns_init(int argc, char **argv)
- {
- int nerrors = arg_parse(argc, argv, (void **) &mdns_init_args);
- if (nerrors != 0) {
- arg_print_errors(stderr, mdns_init_args.end, argv[0]);
- return 1;
- }
- ESP_ERROR_CHECK( mdns_init() );
- if (mdns_init_args.hostname->sval[0]) {
- ESP_ERROR_CHECK( mdns_hostname_set(mdns_init_args.hostname->sval[0]) );
- printf("MDNS: Hostname: %s\n", mdns_init_args.hostname->sval[0]);
- }
- if (mdns_init_args.instance->count) {
- ESP_ERROR_CHECK( mdns_instance_name_set(mdns_init_args.instance->sval[0]) );
- printf("MDNS: Instance: %s\n", mdns_init_args.instance->sval[0]);
- }
- return 0;
- }
- static void register_mdns_init(void)
- {
- mdns_init_args.hostname = arg_str0("h", "hostname", "<hostname>", "Hostname that the server will advertise");
- mdns_init_args.instance = arg_str0("i", "instance", "<instance>", "Default instance name for services");
- mdns_init_args.end = arg_end(2);
- const esp_console_cmd_t cmd_init = {
- .command = "mdns_init",
- .help = "Start MDNS Server",
- .hint = NULL,
- .func = &cmd_mdns_init,
- .argtable = &mdns_init_args
- };
- ESP_ERROR_CHECK( esp_console_cmd_register(&cmd_init) );
- }
- static int cmd_mdns_free(int argc, char **argv)
- {
- mdns_free();
- return 0;
- }
- static void register_mdns_free(void)
- {
- const esp_console_cmd_t cmd_free = {
- .command = "mdns_free",
- .help = "Stop MDNS Server",
- .hint = NULL,
- .func = &cmd_mdns_free,
- .argtable = NULL
- };
- ESP_ERROR_CHECK( esp_console_cmd_register(&cmd_free) );
- }
- static struct {
- struct arg_str *hostname;
- struct arg_end *end;
- } mdns_set_hostname_args;
- static int cmd_mdns_set_hostname(int argc, char **argv)
- {
- int nerrors = arg_parse(argc, argv, (void **) &mdns_set_hostname_args);
- if (nerrors != 0) {
- arg_print_errors(stderr, mdns_set_hostname_args.end, argv[0]);
- return 1;
- }
- if (mdns_set_hostname_args.hostname->sval[0] == NULL) {
- printf("ERROR: Bad arguments!\n");
- return 1;
- }
- ESP_ERROR_CHECK( mdns_hostname_set(mdns_set_hostname_args.hostname->sval[0]) );
- return 0;
- }
- static void register_mdns_set_hostname(void)
- {
- mdns_set_hostname_args.hostname = arg_str1(NULL, NULL, "<hostname>", "Hostname that the server will advertise");
- mdns_set_hostname_args.end = arg_end(2);
- const esp_console_cmd_t cmd_set_hostname = {
- .command = "mdns_set_hostname",
- .help = "Set MDNS Server hostname",
- .hint = NULL,
- .func = &cmd_mdns_set_hostname,
- .argtable = &mdns_set_hostname_args
- };
- ESP_ERROR_CHECK( esp_console_cmd_register(&cmd_set_hostname) );
- }
- static struct {
- struct arg_str *instance;
- struct arg_end *end;
- } mdns_set_instance_args;
- static int cmd_mdns_set_instance(int argc, char **argv)
- {
- int nerrors = arg_parse(argc, argv, (void **) &mdns_set_instance_args);
- if (nerrors != 0) {
- arg_print_errors(stderr, mdns_set_instance_args.end, argv[0]);
- return 1;
- }
- if (mdns_set_instance_args.instance->sval[0] == NULL) {
- printf("ERROR: Bad arguments!\n");
- return 1;
- }
- ESP_ERROR_CHECK( mdns_instance_name_set(mdns_set_instance_args.instance->sval[0]) );
- return 0;
- }
- static void register_mdns_set_instance(void)
- {
- mdns_set_instance_args.instance = arg_str1(NULL, NULL, "<instance>", "Default instance name for services");
- mdns_set_instance_args.end = arg_end(2);
- const esp_console_cmd_t cmd_set_instance = {
- .command = "mdns_set_instance",
- .help = "Set MDNS Server Istance Name",
- .hint = NULL,
- .func = &cmd_mdns_set_instance,
- .argtable = &mdns_set_instance_args
- };
- ESP_ERROR_CHECK( esp_console_cmd_register(&cmd_set_instance) );
- }
- static mdns_txt_item_t *_convert_items(const char **values, int count)
- {
- int i = 0, e;
- const char *value = NULL;
- mdns_txt_item_t *items = (mdns_txt_item_t *) malloc(sizeof(mdns_txt_item_t) * count);
- if (!items) {
- printf("ERROR: No Memory!\n");
- goto fail;
- }
- memset(items, 0, sizeof(mdns_txt_item_t) * count);
- for (i = 0; i < count; i++) {
- value = values[i];
- char *esign = strchr(value, '=');
- if (!esign) {
- printf("ERROR: Equal sign not found in '%s'!\n", value);
- goto fail;
- }
- int var_len = esign - value;
- int val_len = strlen(value) - var_len - 1;
- char *var = (char *)malloc(var_len + 1);
- if (var == NULL) {
- printf("ERROR: No Memory!\n");
- goto fail;
- }
- char *val = (char *)malloc(val_len + 1);
- if (val == NULL) {
- printf("ERROR: No Memory!\n");
- free(var);
- goto fail;
- }
- memcpy(var, value, var_len);
- var[var_len] = 0;
- memcpy(val, esign + 1, val_len);
- val[val_len] = 0;
- items[i].key = var;
- items[i].value = val;
- }
- return items;
- fail:
- for (e = 0; e < i; e++) {
- free((char *)items[e].key);
- free((char *)items[e].value);
- }
- free(items);
- return NULL;
- }
- static struct {
- struct arg_str *service;
- struct arg_str *proto;
- struct arg_int *port;
- struct arg_str *instance;
- struct arg_str *host;
- struct arg_str *txt;
- struct arg_end *end;
- } mdns_add_args;
- static int cmd_mdns_service_add(int argc, char **argv)
- {
- int nerrors = arg_parse(argc, argv, (void **) &mdns_add_args);
- if (nerrors != 0) {
- arg_print_errors(stderr, mdns_add_args.end, argv[0]);
- return 1;
- }
- if (!mdns_add_args.service->sval[0] || !mdns_add_args.proto->sval[0] || !mdns_add_args.port->ival[0]) {
- printf("ERROR: Bad arguments!\n");
- return 1;
- }
- const char *instance = NULL;
- if (mdns_add_args.instance->sval[0] && mdns_add_args.instance->sval[0][0]) {
- instance = mdns_add_args.instance->sval[0];
- printf("MDNS: Service Instance: %s\n", instance);
- }
- const char *host = NULL;
- if (mdns_add_args.host->count && mdns_add_args.host->sval[0]) {
- host = mdns_add_args.host->sval[0];
- printf("MDNS: Service for delegated host: %s\n", host);
- }
- mdns_txt_item_t *items = NULL;
- if (mdns_add_args.txt->count) {
- items = _convert_items(mdns_add_args.txt->sval, mdns_add_args.txt->count);
- if (!items) {
- printf("ERROR: No Memory!\n");
- return 1;
- }
- }
- ESP_ERROR_CHECK( mdns_service_add_for_host(instance, mdns_add_args.service->sval[0], mdns_add_args.proto->sval[0],
- host, mdns_add_args.port->ival[0], items, mdns_add_args.txt->count) );
- free(items);
- return 0;
- }
- static void register_mdns_service_add(void)
- {
- mdns_add_args.service = arg_str1(NULL, NULL, "<service>", "MDNS Service");
- mdns_add_args.proto = arg_str1(NULL, NULL, "<proto>", "IP Protocol");
- mdns_add_args.port = arg_int1(NULL, NULL, "<port>", "Service Port");
- mdns_add_args.instance = arg_str0("i", "instance", "<instance>", "Instance name");
- mdns_add_args.host = arg_str0("h", "host", "<hostname>", "Service for this (delegated) host");
- mdns_add_args.txt = arg_strn(NULL, NULL, "item", 0, 30, "TXT Items (name=value)");
- mdns_add_args.end = arg_end(2);
- const esp_console_cmd_t cmd_add = {
- .command = "mdns_service_add",
- .help = "Add service to MDNS",
- .hint = NULL,
- .func = &cmd_mdns_service_add,
- .argtable = &mdns_add_args
- };
- ESP_ERROR_CHECK( esp_console_cmd_register(&cmd_add) );
- }
- static struct {
- struct arg_str *instance;
- struct arg_str *service;
- struct arg_str *proto;
- struct arg_str *host;
- struct arg_end *end;
- } mdns_remove_args;
- static int cmd_mdns_service_remove(int argc, char **argv)
- {
- int nerrors = arg_parse(argc, argv, (void **) &mdns_remove_args);
- if (nerrors != 0) {
- arg_print_errors(stderr, mdns_remove_args.end, argv[0]);
- return 1;
- }
- if (!mdns_remove_args.service->sval[0] || !mdns_remove_args.proto->sval[0]) {
- printf("ERROR: Bad arguments!\n");
- return 1;
- }
- const char *instance = NULL;
- if (mdns_remove_args.instance->count && mdns_remove_args.instance->sval[0]) {
- instance = mdns_remove_args.instance->sval[0];
- }
- const char *host = NULL;
- if (mdns_remove_args.host->count && mdns_remove_args.host->sval[0]) {
- host = mdns_remove_args.host->sval[0];
- }
- ESP_ERROR_CHECK( mdns_service_remove_for_host(instance, mdns_remove_args.service->sval[0], mdns_remove_args.proto->sval[0], host) );
- return 0;
- }
- static void register_mdns_service_remove(void)
- {
- mdns_remove_args.service = arg_str1(NULL, NULL, "<service>", "MDNS Service");
- mdns_remove_args.proto = arg_str1(NULL, NULL, "<proto>", "IP Protocol");
- mdns_remove_args.host = arg_str0("h", "host", "<hostname>", "Service for this (delegated) host");
- mdns_remove_args.instance = arg_str0("i", "instance", "<instance>", "Instance name");
- mdns_remove_args.end = arg_end(4);
- const esp_console_cmd_t cmd_remove = {
- .command = "mdns_service_remove",
- .help = "Remove service from MDNS",
- .hint = NULL,
- .func = &cmd_mdns_service_remove,
- .argtable = &mdns_remove_args
- };
- ESP_ERROR_CHECK( esp_console_cmd_register(&cmd_remove) );
- }
- static struct {
- struct arg_str *service;
- struct arg_str *proto;
- struct arg_str *instance;
- struct arg_str *host;
- struct arg_str *old_instance;
- struct arg_end *end;
- } mdns_service_instance_set_args;
- static int cmd_mdns_service_instance_set(int argc, char **argv)
- {
- int nerrors = arg_parse(argc, argv, (void **) &mdns_service_instance_set_args);
- if (nerrors != 0) {
- arg_print_errors(stderr, mdns_service_instance_set_args.end, argv[0]);
- return 1;
- }
- if (!mdns_service_instance_set_args.service->sval[0] || !mdns_service_instance_set_args.proto->sval[0] || !mdns_service_instance_set_args.instance->sval[0]) {
- printf("ERROR: Bad arguments!\n");
- return 1;
- }
- const char *host = NULL;
- if (mdns_service_instance_set_args.host->count && mdns_service_instance_set_args.host->sval[0]) {
- host = mdns_service_instance_set_args.host->sval[0];
- }
- const char *old_instance = NULL;
- if (mdns_service_instance_set_args.old_instance->count && mdns_service_instance_set_args.old_instance->sval[0]) {
- old_instance = mdns_service_instance_set_args.old_instance->sval[0];
- }
- esp_err_t err = mdns_service_instance_name_set_for_host(old_instance, mdns_service_instance_set_args.service->sval[0], mdns_service_instance_set_args.proto->sval[0], host, mdns_service_instance_set_args.instance->sval[0]);
- if (err != ESP_OK) {
- printf("mdns_service_instance_name_set_for_host() failed with %s\n", esp_err_to_name(err));
- return 1;
- }
- return 0;
- }
- static void register_mdns_service_instance_set(void)
- {
- mdns_service_instance_set_args.service = arg_str1(NULL, NULL, "<service>", "MDNS Service");
- mdns_service_instance_set_args.proto = arg_str1(NULL, NULL, "<proto>", "IP Protocol");
- mdns_service_instance_set_args.instance = arg_str1(NULL, NULL, "<instance>", "Instance name");
- mdns_service_instance_set_args.host = arg_str0("h", "host", "<hostname>", "Service for this (delegated) host");
- mdns_service_instance_set_args.old_instance = arg_str0("i", "old_instance", "<old_instance>", "Instance name before update");
- mdns_service_instance_set_args.end = arg_end(4);
- const esp_console_cmd_t cmd_add = {
- .command = "mdns_service_instance_set",
- .help = "Set MDNS Service Instance Name",
- .hint = NULL,
- .func = &cmd_mdns_service_instance_set,
- .argtable = &mdns_service_instance_set_args
- };
- ESP_ERROR_CHECK( esp_console_cmd_register(&cmd_add) );
- }
- 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;
- static int cmd_mdns_service_port_set(int argc, char **argv)
- {
- int nerrors = arg_parse(argc, argv, (void **) &mdns_service_port_set_args);
- if (nerrors != 0) {
- arg_print_errors(stderr, mdns_service_port_set_args.end, argv[0]);
- return 1;
- }
- if (!mdns_service_port_set_args.service->sval[0] || !mdns_service_port_set_args.proto->sval[0] || !mdns_service_port_set_args.port->ival[0]) {
- printf("ERROR: Bad arguments!\n");
- return 1;
- }
- 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;
- }
- static void register_mdns_service_port_set(void)
- {
- mdns_service_port_set_args.service = arg_str1(NULL, NULL, "<service>", "MDNS Service");
- mdns_service_port_set_args.proto = arg_str1(NULL, NULL, "<proto>", "IP Protocol");
- mdns_service_port_set_args.port = arg_int1(NULL, NULL, "<port>", "Service Port");
- mdns_service_port_set_args.host = arg_str0("h", "host", "<hostname>", "Service for this (delegated) host");
- mdns_service_port_set_args.instance = arg_str0("i", "instance", "<instance>", "Instance name");
- mdns_service_port_set_args.end = arg_end(2);
- const esp_console_cmd_t cmd_add = {
- .command = "mdns_service_port_set",
- .help = "Set MDNS Service port",
- .hint = NULL,
- .func = &cmd_mdns_service_port_set,
- .argtable = &mdns_service_port_set_args
- };
- ESP_ERROR_CHECK( esp_console_cmd_register(&cmd_add) );
- }
- static struct {
- struct arg_str *service;
- struct arg_str *proto;
- struct arg_str *instance;
- struct arg_str *host;
- struct arg_str *txt;
- struct arg_end *end;
- } mdns_txt_replace_args;
- static int cmd_mdns_service_txt_replace(int argc, char **argv)
- {
- mdns_txt_item_t *items = NULL;
- int nerrors = arg_parse(argc, argv, (void **) &mdns_txt_replace_args);
- if (nerrors != 0) {
- arg_print_errors(stderr, mdns_txt_replace_args.end, argv[0]);
- return 1;
- }
- if (!mdns_txt_replace_args.service->sval[0] || !mdns_txt_replace_args.proto->sval[0]) {
- printf("ERROR: Bad arguments!\n");
- return 1;
- }
- const char *instance = NULL;
- if (mdns_txt_replace_args.instance->count && mdns_txt_replace_args.instance->sval[0]) {
- instance = mdns_txt_replace_args.instance->sval[0];
- printf("MDNS: Service Instance: %s\n", instance);
- }
- const char *host = NULL;
- if (mdns_txt_replace_args.host->count && mdns_txt_replace_args.host->sval[0]) {
- host = mdns_txt_replace_args.host->sval[0];
- printf("MDNS: Service for delegated host: %s\n", host);
- }
- if (mdns_txt_replace_args.txt->count) {
- items = _convert_items(mdns_txt_replace_args.txt->sval, mdns_txt_replace_args.txt->count);
- if (!items) {
- printf("ERROR: No Memory!\n");
- return 1;
- }
- }
- ESP_ERROR_CHECK( mdns_service_txt_set_for_host(instance, mdns_txt_replace_args.service->sval[0], mdns_txt_replace_args.proto->sval[0], host, items, mdns_txt_replace_args.txt->count) );
- free(items);
- return 0;
- }
- static void register_mdns_service_txt_replace(void)
- {
- mdns_txt_replace_args.service = arg_str1(NULL, NULL, "<service>", "MDNS Service");
- mdns_txt_replace_args.proto = arg_str1(NULL, NULL, "<proto>", "IP Protocol");
- mdns_txt_replace_args.instance = arg_str0("i", "instance", "<instance>", "Instance name");
- mdns_txt_replace_args.host = arg_str0("h", "host", "<hostname>", "Service for this (delegated) host");
- mdns_txt_replace_args.txt = arg_strn(NULL, NULL, "item", 0, 30, "TXT Items (name=value)");
- mdns_txt_replace_args.end = arg_end(5);
- const esp_console_cmd_t cmd_txt_set = {
- .command = "mdns_service_txt_replace",
- .help = "Replace MDNS service TXT items",
- .hint = NULL,
- .func = &cmd_mdns_service_txt_replace,
- .argtable = &mdns_txt_replace_args
- };
- ESP_ERROR_CHECK( esp_console_cmd_register(&cmd_txt_set) );
- }
- static struct {
- struct arg_str *service;
- struct arg_str *proto;
- struct arg_str *instance;
- struct arg_str *host;
- struct arg_str *var;
- struct arg_str *value;
- struct arg_end *end;
- } mdns_txt_set_args;
- static int cmd_mdns_service_txt_set(int argc, char **argv)
- {
- int nerrors = arg_parse(argc, argv, (void **) &mdns_txt_set_args);
- if (nerrors != 0) {
- arg_print_errors(stderr, mdns_txt_set_args.end, argv[0]);
- return 1;
- }
- if (!mdns_txt_set_args.service->sval[0] || !mdns_txt_set_args.proto->sval[0] || !mdns_txt_set_args.var->sval[0]) {
- printf("ERROR: Bad arguments!\n");
- return 1;
- }
- const char *instance = NULL;
- if (mdns_txt_set_args.instance->count && mdns_txt_set_args.instance->sval[0]) {
- instance = mdns_txt_set_args.instance->sval[0];
- printf("MDNS: Service Instance: %s\n", instance);
- }
- const char *host = NULL;
- if (mdns_txt_set_args.host->count && mdns_txt_set_args.host->sval[0]) {
- host = mdns_txt_set_args.host->sval[0];
- printf("MDNS: Service for delegated host: %s\n", host);
- }
- ESP_ERROR_CHECK( mdns_service_txt_item_set_for_host(instance, mdns_txt_set_args.service->sval[0], mdns_txt_set_args.proto->sval[0], host, mdns_txt_set_args.var->sval[0], mdns_txt_set_args.value->sval[0]) );
- return 0;
- }
- static void register_mdns_service_txt_set(void)
- {
- mdns_txt_set_args.service = arg_str1(NULL, NULL, "<service>", "MDNS Service");
- mdns_txt_set_args.proto = arg_str1(NULL, NULL, "<proto>", "IP Protocol");
- mdns_txt_set_args.var = arg_str1(NULL, NULL, "<var>", "Item Name");
- mdns_txt_set_args.value = arg_str1(NULL, NULL, "<value>", "Item Value");
- mdns_txt_set_args.instance = arg_str0("i", "instance", "<instance>", "Instance name");
- mdns_txt_set_args.host = arg_str0("h", "host", "<hostname>", "Service for this (delegated) host");
- mdns_txt_set_args.end = arg_end(6);
- const esp_console_cmd_t cmd_txt_set = {
- .command = "mdns_service_txt_set",
- .help = "Add/Set MDNS service TXT item",
- .hint = NULL,
- .func = &cmd_mdns_service_txt_set,
- .argtable = &mdns_txt_set_args
- };
- ESP_ERROR_CHECK( esp_console_cmd_register(&cmd_txt_set) );
- }
- static struct {
- struct arg_str *service;
- struct arg_str *proto;
- struct arg_str *var;
- struct arg_str *instance;
- struct arg_str *host;
- struct arg_end *end;
- } mdns_txt_remove_args;
- static int cmd_mdns_service_txt_remove(int argc, char **argv)
- {
- int nerrors = arg_parse(argc, argv, (void **) &mdns_txt_remove_args);
- if (nerrors != 0) {
- arg_print_errors(stderr, mdns_txt_remove_args.end, argv[0]);
- return 1;
- }
- if (!mdns_txt_remove_args.service->sval[0] || !mdns_txt_remove_args.proto->sval[0] || !mdns_txt_remove_args.var->sval[0]) {
- printf("ERROR: Bad arguments!\n");
- return 1;
- }
- const char *instance = NULL;
- if (mdns_txt_remove_args.instance->count && mdns_txt_remove_args.instance->sval[0]) {
- instance = mdns_txt_remove_args.instance->sval[0];
- }
- const char *host = NULL;
- if (mdns_txt_remove_args.host->count && mdns_txt_remove_args.host->sval[0]) {
- host = mdns_txt_remove_args.host->sval[0];
- }
- ESP_ERROR_CHECK( mdns_service_txt_item_remove_for_host(instance, mdns_txt_remove_args.service->sval[0], mdns_txt_remove_args.proto->sval[0], host, mdns_txt_remove_args.var->sval[0]) );
- return 0;
- }
- static void register_mdns_service_txt_remove(void)
- {
- mdns_txt_remove_args.service = arg_str1(NULL, NULL, "<service>", "MDNS Service");
- mdns_txt_remove_args.proto = arg_str1(NULL, NULL, "<proto>", "IP Protocol");
- mdns_txt_remove_args.var = arg_str1(NULL, NULL, "<var>", "Item Name");
- mdns_txt_remove_args.instance = arg_str0("i", "instance", "<instance>", "Instance name");
- mdns_txt_remove_args.host = arg_str0("h", "host", "<hostname>", "Service for this (delegated) host");
- mdns_txt_remove_args.end = arg_end(2);
- const esp_console_cmd_t cmd_txt_remove = {
- .command = "mdns_service_txt_remove",
- .help = "Remove MDNS service TXT item",
- .hint = NULL,
- .func = &cmd_mdns_service_txt_remove,
- .argtable = &mdns_txt_remove_args
- };
- ESP_ERROR_CHECK( esp_console_cmd_register(&cmd_txt_remove) );
- }
- static int cmd_mdns_service_remove_all(int argc, char **argv)
- {
- mdns_service_remove_all();
- return 0;
- }
- static void register_mdns_service_remove_all(void)
- {
- const esp_console_cmd_t cmd_free = {
- .command = "mdns_service_remove_all",
- .help = "Remove all MDNS services",
- .hint = NULL,
- .func = &cmd_mdns_service_remove_all,
- .argtable = NULL
- };
- ESP_ERROR_CHECK( esp_console_cmd_register(&cmd_free) );
- }
- #define MDNS_MAX_LOOKUP_RESULTS CONFIG_MDNS_MAX_SERVICES
- static struct {
- struct arg_str *instance;
- struct arg_str *service;
- struct arg_str *proto;
- struct arg_lit *delegated;
- struct arg_end *end;
- } mdns_lookup_service_args;
- static esp_err_t lookup_service(const char *instance, const char *service, const char *proto, size_t max_results,
- mdns_result_t **result, bool delegated)
- {
- if (delegated) {
- return mdns_lookup_delegated_service(instance, service, proto, max_results, result);
- }
- return mdns_lookup_selfhosted_service(instance, service, proto, max_results, result);
- }
- static int cmd_mdns_lookup_service(int argc, char **argv)
- {
- int nerrors = arg_parse(argc, argv, (void **) &mdns_lookup_service_args);
- if (nerrors != 0) {
- arg_print_errors(stderr, mdns_lookup_service_args.end, argv[0]);
- return 1;
- }
- if (!mdns_lookup_service_args.instance->sval[0] || !mdns_lookup_service_args.service->sval[0] || !mdns_lookup_service_args.proto->sval[0]) {
- printf("ERROR: Bad arguments!\n");
- return 1;
- }
- mdns_result_t *results = NULL;
- esp_err_t err = lookup_service(mdns_lookup_service_args.instance->count ? mdns_lookup_service_args.instance->sval[0] : NULL,
- mdns_lookup_service_args.service->sval[0], mdns_lookup_service_args.proto->sval[0],
- MDNS_MAX_LOOKUP_RESULTS, &results, mdns_lookup_service_args.delegated->count);
- if (err) {
- printf("Service lookup failed\n");
- return 1;
- }
- if (!results) {
- printf("No results found!\n");
- return 0;
- }
- mdns_print_results(results);
- mdns_query_results_free(results);
- return 0;
- }
- static void register_mdns_lookup_service(void)
- {
- mdns_lookup_service_args.service = arg_str1(NULL, NULL, "<service>", "MDNS Service");
- mdns_lookup_service_args.proto = arg_str1(NULL, NULL, "<proto>", "IP Protocol");
- mdns_lookup_service_args.instance = arg_str0("i", "instance", "<instance>", "Instance name");
- mdns_lookup_service_args.delegated = arg_lit0("d", "delegated", "Lookup delegated services");
- mdns_lookup_service_args.end = arg_end(4);
- const esp_console_cmd_t cmd_lookup_service = {
- .command = "mdns_service_lookup",
- .help = "Lookup registered service",
- .hint = NULL,
- .func = &cmd_mdns_lookup_service,
- .argtable = &mdns_lookup_service_args
- };
- ESP_ERROR_CHECK( esp_console_cmd_register(&cmd_lookup_service) );
- }
- static struct {
- struct arg_str *hostname;
- struct arg_str *address;
- struct arg_end *end;
- } mdns_delegate_host_args;
- static int cmd_mdns_delegate_host(int argc, char **argv)
- {
- int nerrors = arg_parse(argc, argv, (void **) &mdns_delegate_host_args);
- if (nerrors != 0) {
- arg_print_errors(stderr, mdns_delegate_host_args.end, argv[0]);
- return 1;
- }
- if (!mdns_delegate_host_args.hostname->sval[0] || !mdns_delegate_host_args.address->sval[0]) {
- printf("ERROR: Bad arguments!\n");
- return 1;
- }
- mdns_ip_addr_t addr = { .next = NULL};
- esp_netif_str_to_ip4(mdns_delegate_host_args.address->sval[0], &addr.addr.u_addr.ip4);
- addr.addr.type = ESP_IPADDR_TYPE_V4;
- esp_err_t err = mdns_delegate_hostname_add(mdns_delegate_host_args.hostname->sval[0], &addr);
- if (err) {
- printf("mdns_delegate_hostname_add() failed\n");
- return 1;
- }
- return 0;
- }
- static void register_mdns_delegate_host(void)
- {
- mdns_delegate_host_args.hostname = arg_str1(NULL, NULL, "<hostname>", "Delegated hostname");
- mdns_delegate_host_args.address = arg_str1(NULL, NULL, "<address>", "Delegated hosts address");
- mdns_delegate_host_args.end = arg_end(2);
- const esp_console_cmd_t cmd_delegate_host = {
- .command = "mdns_delegate_host",
- .help = "Add delegated hostname",
- .hint = NULL,
- .func = &cmd_mdns_delegate_host,
- .argtable = &mdns_delegate_host_args
- };
- ESP_ERROR_CHECK( esp_console_cmd_register(&cmd_delegate_host) );
- }
- static struct {
- struct arg_str *hostname;
- struct arg_end *end;
- } mdns_undelegate_host_args;
- static int cmd_mdns_undelegate_host(int argc, char **argv)
- {
- int nerrors = arg_parse(argc, argv, (void **) &mdns_undelegate_host_args);
- if (nerrors != 0) {
- arg_print_errors(stderr, mdns_undelegate_host_args.end, argv[0]);
- return 1;
- }
- if (!mdns_undelegate_host_args.hostname->sval[0]) {
- printf("ERROR: Bad arguments!\n");
- return 1;
- }
- if (mdns_delegate_hostname_remove(mdns_undelegate_host_args.hostname->sval[0]) != ESP_OK) {
- printf("mdns_delegate_hostname_remove() failed\n");
- return 1;
- }
- return 0;
- }
- static void register_mdns_undelegate_host(void)
- {
- mdns_undelegate_host_args.hostname = arg_str1(NULL, NULL, "<hostname>", "Delegated hostname");
- mdns_undelegate_host_args.end = arg_end(2);
- const esp_console_cmd_t cmd_undelegate_host = {
- .command = "mdns_undelegate_host",
- .help = "Remove delegated hostname",
- .hint = NULL,
- .func = &cmd_mdns_undelegate_host,
- .argtable = &mdns_undelegate_host_args
- };
- ESP_ERROR_CHECK( esp_console_cmd_register(&cmd_undelegate_host) );
- }
- static struct {
- struct arg_str *service;
- struct arg_str *proto;
- struct arg_str *sub;
- struct arg_str *instance;
- struct arg_str *host;
- struct arg_end *end;
- } mdns_service_subtype_args;
- static int cmd_mdns_service_subtype(int argc, char **argv)
- {
- int nerrors = arg_parse(argc, argv, (void **) &mdns_service_subtype_args);
- if (nerrors != 0) {
- arg_print_errors(stderr, mdns_service_subtype_args.end, argv[0]);
- return 1;
- }
- if (!mdns_service_subtype_args.service->sval[0] || !mdns_service_subtype_args.proto->sval[0] || !mdns_service_subtype_args.sub->sval[0]) {
- printf("ERROR: Bad arguments!\n");
- return 1;
- }
- const char *instance = NULL;
- if (mdns_service_subtype_args.instance->count && mdns_service_subtype_args.instance->sval[0]) {
- instance = mdns_service_subtype_args.instance->sval[0];
- }
- const char *host = NULL;
- if (mdns_service_subtype_args.host->count && mdns_service_subtype_args.host->sval[0]) {
- host = mdns_service_subtype_args.host->sval[0];
- }
- ESP_ERROR_CHECK( mdns_service_subtype_add_for_host(instance, mdns_service_subtype_args.service->sval[0], mdns_service_subtype_args.proto->sval[0], host, mdns_service_subtype_args.sub->sval[0]) );
- return 0;
- }
- static void register_mdns_service_subtype_set(void)
- {
- mdns_service_subtype_args.service = arg_str1(NULL, NULL, "<service>", "MDNS Service");
- mdns_service_subtype_args.proto = arg_str1(NULL, NULL, "<proto>", "IP Protocol");
- mdns_service_subtype_args.sub = arg_str1(NULL, NULL, "<sub>", "Subtype");
- mdns_service_subtype_args.instance = arg_str0("i", "instance", "<instance>", "Instance name");
- mdns_service_subtype_args.host = arg_str0("h", "host", "<hostname>", "Service for this (delegated) host");
- mdns_service_subtype_args.end = arg_end(5);
- const esp_console_cmd_t cmd_service_sub = {
- .command = "mdns_service_subtype",
- .help = "Adds subtype for service",
- .hint = NULL,
- .func = &cmd_mdns_service_subtype,
- .argtable = &mdns_service_subtype_args
- };
- ESP_ERROR_CHECK( esp_console_cmd_register(&cmd_service_sub) );
- }
- static struct {
- struct arg_str *service;
- struct arg_str *proto;
- struct arg_end *end;
- } mdns_browse_args;
- static void mdns_browse_notifier(mdns_result_t *result)
- {
- if (result) {
- mdns_print_results(result);
- }
- }
- static int cmd_mdns_browse(int argc, char **argv)
- {
- int nerrors = arg_parse(argc, argv, (void **) &mdns_browse_args);
- if (nerrors != 0) {
- arg_print_errors(stderr, mdns_browse_args.end, argv[0]);
- return 1;
- }
- if (!mdns_browse_args.service->sval[0] || !mdns_browse_args.proto->sval[0]) {
- printf("ERROR: Bad arguments!\n");
- return 1;
- }
- mdns_browse_t *handle = mdns_browse_new(mdns_browse_args.service->sval[0], mdns_browse_args.proto->sval[0], mdns_browse_notifier);
- return handle ? 0 : 1;
- }
- static void register_mdns_browse(void)
- {
- mdns_browse_args.service = arg_str1(NULL, NULL, "<service>", "MDNS Service");
- mdns_browse_args.proto = arg_str1(NULL, NULL, "<proto>", "IP Protocol");
- mdns_browse_args.end = arg_end(2);
- const esp_console_cmd_t cmd_browse = {
- .command = "mdns_browse",
- .help = "Start browsing",
- .hint = NULL,
- .func = &cmd_mdns_browse,
- .argtable = &mdns_browse_args
- };
- ESP_ERROR_CHECK( esp_console_cmd_register(&cmd_browse) );
- }
- static int cmd_mdns_browse_del(int argc, char **argv)
- {
- int nerrors = arg_parse(argc, argv, (void **) &mdns_browse_args);
- if (nerrors != 0) {
- arg_print_errors(stderr, mdns_browse_args.end, argv[0]);
- return 1;
- }
- if (!mdns_browse_args.service->sval[0] || !mdns_browse_args.proto->sval[0]) {
- printf("ERROR: Bad arguments!\n");
- return 1;
- }
- esp_err_t err = mdns_browse_delete(mdns_browse_args.service->sval[0], mdns_browse_args.proto->sval[0]);
- return err == ESP_OK ? 0 : 1;
- }
- static void register_mdns_browse_del(void)
- {
- mdns_browse_args.service = arg_str1(NULL, NULL, "<service>", "MDNS Service");
- mdns_browse_args.proto = arg_str1(NULL, NULL, "<proto>", "IP Protocol");
- mdns_browse_args.end = arg_end(2);
- const esp_console_cmd_t cmd_browse_del = {
- .command = "mdns_browse_del",
- .help = "Stop browsing",
- .hint = NULL,
- .func = &cmd_mdns_browse_del,
- .argtable = &mdns_browse_args
- };
- ESP_ERROR_CHECK( esp_console_cmd_register(&cmd_browse_del) );
- }
- void mdns_console_register(void)
- {
- register_mdns_init();
- register_mdns_free();
- register_mdns_set_hostname();
- register_mdns_set_instance();
- register_mdns_service_add();
- register_mdns_service_remove();
- register_mdns_service_instance_set();
- register_mdns_service_port_set();
- register_mdns_service_txt_replace();
- register_mdns_service_txt_set();
- register_mdns_service_txt_remove();
- register_mdns_service_remove_all();
- register_mdns_lookup_service();
- register_mdns_delegate_host();
- register_mdns_undelegate_host();
- register_mdns_service_subtype_set();
- register_mdns_browse();
- register_mdns_browse_del();
- #ifdef CONFIG_LWIP_IPV4
- register_mdns_query_a();
- #endif
- #ifdef CONFIG_LWIP_IPV6
- register_mdns_query_aaaa();
- #endif
- register_mdns_query_txt();
- register_mdns_query_srv();
- register_mdns_query_ptr();
- register_mdns_query_ip();
- register_mdns_query_svc();
- }
|