17
17
#include "mdns_networking.h"
18
18
#include "esp_log.h"
19
19
#include "esp_random.h"
20
- #if CONFIG_ETH_ENABLED
20
+ #if __has_include ("bsd/string.h" )
21
+ #include "bsd/string.h"
22
+ #endif
23
+ #if CONFIG_ETH_ENABLED && CONFIG_MDNS_PREDEF_NETIF_ETH
21
24
#include "esp_eth.h"
22
25
#endif
26
+ #if CONFIG_MDNS_PREDEF_NETIF_STA || CONFIG_MDNS_PREDEF_NETIF_AP
23
27
#include "esp_wifi.h"
28
+ #endif
24
29
25
30
26
31
#ifdef MDNS_ENABLE_DEBUG
@@ -1102,10 +1107,11 @@ static uint16_t _mdns_append_question(uint8_t *packet, uint16_t *index, mdns_out
1102
1107
const char * str [6 ];
1103
1108
uint8_t str_index = 0 ;
1104
1109
uint8_t part_length ;
1110
+ char * host_dup = NULL ; // need to duplicate host-name for some cases
1105
1111
if (q -> host && strstr (q -> host , "in-addr" )) {
1106
- char * host = strdup (q -> host );
1112
+ host_dup = strdup (q -> host );
1107
1113
char * rest = NULL ;
1108
- for (char * p = strtok_r (host , "." , & rest ); p != NULL ; p = strtok_r (NULL , "." , & rest )) {
1114
+ for (char * p = strtok_r (host_dup , "." , & rest ); p != NULL ; p = strtok_r (NULL , "." , & rest )) {
1109
1115
str [str_index ++ ] = p ;
1110
1116
}
1111
1117
if (q -> domain ) {
@@ -1131,11 +1137,13 @@ static uint16_t _mdns_append_question(uint8_t *packet, uint16_t *index, mdns_out
1131
1137
1132
1138
part_length = _mdns_append_fqdn (packet , index , str , str_index , MDNS_MAX_PACKET_SIZE );
1133
1139
if (!part_length ) {
1140
+ free (host_dup );
1134
1141
return 0 ;
1135
1142
}
1136
1143
1137
1144
part_length += _mdns_append_u16 (packet , index , q -> type );
1138
1145
part_length += _mdns_append_u16 (packet , index , q -> unicast ? 0x8001 : 0x0001 );
1146
+ free (host_dup );
1139
1147
return part_length ;
1140
1148
}
1141
1149
@@ -1213,17 +1221,17 @@ static uint8_t _mdns_append_host_answer(uint8_t *packet, uint16_t *index, mdns_h
1213
1221
return num_records ;
1214
1222
}
1215
1223
1216
- static uint16_t _mdns_append_rev_ptr_record (uint8_t * packet , uint16_t * index , const char * name , bool flush , bool bye )
1224
+ static uint16_t _mdns_append_rev_ptr_record (uint8_t * packet , uint16_t * index , const char * name , bool flush , bool bye )
1217
1225
{
1218
- const char * str [6 ];
1226
+ const char * str [6 ];
1219
1227
int i = 0 ;
1220
1228
1221
1229
if (strstr (name , "in-addr" ) == NULL ) {
1222
1230
return 0 ;
1223
1231
}
1224
- char * host = strdup (name );
1232
+ char * host = strdup (name );
1225
1233
char * rest = NULL ;
1226
- for (char * p = strtok_r (host ,"." , & rest ); p != NULL ; p = strtok_r (NULL , "." , & rest )) {
1234
+ for (char * p = strtok_r (host , "." , & rest ); p != NULL ; p = strtok_r (NULL , "." , & rest )) {
1227
1235
str [i ++ ] = p ;
1228
1236
}
1229
1237
str [i ++ ] = "arpa" ;
@@ -1236,7 +1244,7 @@ static uint16_t _mdns_append_rev_ptr_record(uint8_t * packet, uint16_t * index,
1236
1244
}
1237
1245
record_length += part_length ;
1238
1246
1239
- part_length = _mdns_append_type (packet , index , MDNS_ANSWER_PTR , false, bye ? 0 : MDNS_ANSWER_PTR_TTL );
1247
+ part_length = _mdns_append_type (packet , index , MDNS_ANSWER_PTR , false, bye ? 0 : MDNS_ANSWER_PTR_TTL );
1240
1248
if (!part_length ) {
1241
1249
return 0 ;
1242
1250
}
@@ -1258,7 +1266,7 @@ static uint16_t _mdns_append_rev_ptr_record(uint8_t * packet, uint16_t * index,
1258
1266
}
1259
1267
1260
1268
1261
- static uint8_t _mdns_append_reverse_ptr_record (uint8_t * packet , uint16_t * index , const char * name , bool flush , bool bye )
1269
+ static uint8_t _mdns_append_reverse_ptr_record (uint8_t * packet , uint16_t * index , const char * name , bool flush , bool bye )
1262
1270
{
1263
1271
uint8_t appended_answers = 0 ;
1264
1272
@@ -1711,9 +1719,9 @@ static bool _mdns_create_answer_from_service(mdns_tx_packet_t *packet, mdns_serv
1711
1719
return true;
1712
1720
}
1713
1721
1714
- static bool _mdns_create_answer_from_reverse_query (mdns_tx_packet_t * packet , const char * hostname , bool send_flush )
1722
+ static bool _mdns_create_answer_from_reverse_query (mdns_tx_packet_t * packet , const char * hostname , bool send_flush )
1715
1723
{
1716
- mdns_host_item_t * host = mdns_get_host_item (hostname );
1724
+ mdns_host_item_t * host = mdns_get_host_item (hostname );
1717
1725
if (!_mdns_alloc_answer (& packet -> answers , MDNS_TYPE_PTR , NULL , host , send_flush , false)) {
1718
1726
return false;
1719
1727
}
@@ -3394,6 +3402,7 @@ void mdns_parse_packet(mdns_rx_packet_t *packet)
3394
3402
mdns_debug_packet (data , len );
3395
3403
#endif
3396
3404
3405
+ #ifndef CONFIG_MDNS_SKIP_SUPPRESSING_OWN_QUERIES
3397
3406
// Check if the packet wasn't sent by us
3398
3407
if (packet -> ip_protocol == MDNS_IP_PROTOCOL_V4 ) {
3399
3408
esp_netif_ip_info_t if_ip_info ;
@@ -3410,6 +3419,7 @@ void mdns_parse_packet(mdns_rx_packet_t *packet)
3410
3419
}
3411
3420
#endif
3412
3421
}
3422
+ #endif
3413
3423
3414
3424
// Check for the minimum size of mdns packet
3415
3425
if (len <= MDNS_HEAD_ADDITIONAL_OFFSET ) {
@@ -3977,6 +3987,7 @@ static inline void post_mdns_announce_pcb(mdns_predef_if_t preset_if, mdns_ip_pr
3977
3987
mdns_post_custom_action_tcpip_if (mdns_if_from_preset_if (preset_if ), protocol == MDNS_IP_PROTOCOL_V4 ? MDNS_EVENT_ANNOUNCE_IP4 : MDNS_EVENT_ANNOUNCE_IP6 );
3978
3988
}
3979
3989
3990
+ #if CONFIG_MDNS_PREDEF_NETIF_STA || CONFIG_MDNS_PREDEF_NETIF_AP || CONFIG_MDNS_PREDEF_NETIF_ETH
3980
3991
void mdns_preset_if_handle_system_event (void * arg , esp_event_base_t event_base ,
3981
3992
int32_t event_id , void * event_data )
3982
3993
{
@@ -4054,6 +4065,7 @@ void mdns_preset_if_handle_system_event(void *arg, esp_event_base_t event_base,
4054
4065
}
4055
4066
}
4056
4067
}
4068
+ #endif /* CONFIG_MDNS_PREDEF_NETIF_STA || CONFIG_MDNS_PREDEF_NETIF_AP || CONFIG_MDNS_PREDEF_NETIF_ETH */
4057
4069
4058
4070
/*
4059
4071
* MDNS Search
@@ -6151,19 +6163,19 @@ void mdns_debug_packet(const uint8_t *data, size_t len)
6151
6163
_mdns_dbg_printf ("Packet[%u]: " , t );
6152
6164
6153
6165
header .id = _mdns_read_u16 (data , MDNS_HEAD_ID_OFFSET );
6154
- header .flags . value = _mdns_read_u16 (data , MDNS_HEAD_FLAGS_OFFSET );
6166
+ header .flags = _mdns_read_u16 (data , MDNS_HEAD_FLAGS_OFFSET );
6155
6167
header .questions = _mdns_read_u16 (data , MDNS_HEAD_QUESTIONS_OFFSET );
6156
6168
header .answers = _mdns_read_u16 (data , MDNS_HEAD_ANSWERS_OFFSET );
6157
6169
header .servers = _mdns_read_u16 (data , MDNS_HEAD_SERVERS_OFFSET );
6158
6170
header .additional = _mdns_read_u16 (data , MDNS_HEAD_ADDITIONAL_OFFSET );
6159
6171
6160
6172
_mdns_dbg_printf ("%s" ,
6161
- (header .flags . value == MDNS_FLAGS_QR_AUTHORITATIVE ) ? "AUTHORITATIVE\n" :
6162
- (header .flags . value == MDNS_FLAGS_DISTRIBUTED ) ? "DISTRIBUTED\n" :
6163
- (header .flags . value == 0 ) ? "\n" : " "
6173
+ (header .flags == MDNS_FLAGS_QR_AUTHORITATIVE ) ? "AUTHORITATIVE\n" :
6174
+ (header .flags == MDNS_FLAGS_DISTRIBUTED ) ? "DISTRIBUTED\n" :
6175
+ (header .flags == 0 ) ? "\n" : " "
6164
6176
);
6165
- if (header .flags . value && header .flags . value != MDNS_FLAGS_QR_AUTHORITATIVE ) {
6166
- _mdns_dbg_printf ("0x%04X\n" , header .flags . value );
6177
+ if (header .flags && header .flags != MDNS_FLAGS_QR_AUTHORITATIVE ) {
6178
+ _mdns_dbg_printf ("0x%04X\n" , header .flags );
6167
6179
}
6168
6180
6169
6181
if (header .questions ) {
0 commit comments