@@ -19,7 +19,10 @@ static void mdns_print_results(mdns_result_t *results)
19
19
mdns_ip_addr_t * a = NULL ;
20
20
int i = 1 ;
21
21
while (r ) {
22
- printf ("%d: Interface: %s, Type: %s\n" , i ++ , esp_netif_get_ifkey (r -> esp_netif ), ip_protocol_str [r -> ip_protocol ]);
22
+ if (r -> esp_netif ) {
23
+ printf ("%d: Interface: %s, Type: %s, TTL: %" PRIu32 "\n" , i ++ , esp_netif_get_ifkey (r -> esp_netif ),
24
+ ip_protocol_str [r -> ip_protocol ], r -> ttl );
25
+ }
23
26
if (r -> instance_name ) {
24
27
printf (" PTR : %s\n" , r -> instance_name );
25
28
}
@@ -1031,6 +1034,73 @@ static void register_mdns_service_remove_all(void)
1031
1034
ESP_ERROR_CHECK ( esp_console_cmd_register (& cmd_free ) );
1032
1035
}
1033
1036
1037
+ #define MDNS_MAX_LOOKUP_RESULTS CONFIG_MDNS_MAX_SERVICES
1038
+
1039
+ static struct {
1040
+ struct arg_str * instance ;
1041
+ struct arg_str * service ;
1042
+ struct arg_str * proto ;
1043
+ struct arg_lit * delegated ;
1044
+ struct arg_end * end ;
1045
+ } mdns_lookup_service_args ;
1046
+
1047
+ static esp_err_t lookup_service (const char * instance , const char * service , const char * proto , size_t max_results ,
1048
+ mdns_result_t * * result , bool delegated )
1049
+ {
1050
+ if (delegated ) {
1051
+ return mdns_lookup_delegated_service (instance , service , proto , max_results , result );
1052
+ }
1053
+ return mdns_lookup_selfhosted_service (instance , service , proto , max_results , result );
1054
+ }
1055
+
1056
+ static int cmd_mdns_lookup_service (int argc , char * * argv )
1057
+ {
1058
+ int nerrors = arg_parse (argc , argv , (void * * ) & mdns_lookup_service_args );
1059
+ if (nerrors != 0 ) {
1060
+ arg_print_errors (stderr , mdns_lookup_service_args .end , argv [0 ]);
1061
+ return 1 ;
1062
+ }
1063
+
1064
+ if (!mdns_lookup_service_args .instance -> sval [0 ] || !mdns_lookup_service_args .service -> sval [0 ] || !mdns_lookup_service_args .proto -> sval [0 ]) {
1065
+ printf ("ERROR: Bad arguments!\n" );
1066
+ return 1 ;
1067
+ }
1068
+ mdns_result_t * results = NULL ;
1069
+ esp_err_t err = lookup_service (mdns_lookup_service_args .instance -> count ? mdns_lookup_service_args .instance -> sval [0 ] : NULL ,
1070
+ mdns_lookup_service_args .service -> sval [0 ], mdns_lookup_service_args .proto -> sval [0 ],
1071
+ MDNS_MAX_LOOKUP_RESULTS , & results , mdns_lookup_service_args .delegated -> count );
1072
+ if (err ) {
1073
+ printf ("Service lookup failed\n" );
1074
+ return 1 ;
1075
+ }
1076
+ if (!results ) {
1077
+ printf ("No results found!\n" );
1078
+ return 0 ;
1079
+ }
1080
+ mdns_print_results (results );
1081
+ mdns_query_results_free (results );
1082
+ return 0 ;
1083
+ }
1084
+
1085
+ static void register_mdns_lookup_service (void )
1086
+ {
1087
+ mdns_lookup_service_args .service = arg_str1 (NULL , NULL , "<service>" , "MDNS Service" );
1088
+ mdns_lookup_service_args .proto = arg_str1 (NULL , NULL , "<proto>" , "IP Protocol" );
1089
+ mdns_lookup_service_args .instance = arg_str0 ("i" , "instance" , "<instance>" , "Instance name" );
1090
+ mdns_lookup_service_args .delegated = arg_lit0 ("d" , "delegated" , "Lookup delegated services" );
1091
+ mdns_lookup_service_args .end = arg_end (4 );
1092
+
1093
+ const esp_console_cmd_t cmd_lookup_service = {
1094
+ .command = "mdns_service_lookup" ,
1095
+ .help = "Lookup registered service" ,
1096
+ .hint = NULL ,
1097
+ .func = & cmd_mdns_lookup_service ,
1098
+ .argtable = & mdns_lookup_service_args
1099
+ };
1100
+
1101
+ ESP_ERROR_CHECK ( esp_console_cmd_register (& cmd_lookup_service ) );
1102
+ }
1103
+
1034
1104
void mdns_console_register (void )
1035
1105
{
1036
1106
register_mdns_init ();
@@ -1046,6 +1116,8 @@ void mdns_console_register(void)
1046
1116
register_mdns_service_txt_remove ();
1047
1117
register_mdns_service_remove_all ();
1048
1118
1119
+ register_mdns_lookup_service ();
1120
+
1049
1121
#ifdef CONFIG_LWIP_IPV4
1050
1122
register_mdns_query_a ();
1051
1123
#endif
0 commit comments