فهرست منبع

mdns: Revert support for queries in responses, mDNS non-strict mode

This reverts backporting commits to v4.1 related to mDNS non-strict mode
and the related fix for resolving the non-strict mode:
* Revert "mdns: Allow resolve its own non-strict answers"
  This reverts commit 0182a84c2be1f06e863851947ebb6233886da284.
* Revert "mdns: Support queries in responses in mDNS non-strict mode"
  This reverts commit 12e86a7c1b58470f1ec41a68cdc2d011a2699ec9.
David Cermak 5 سال پیش
والد
کامیت
31ecdcd3f6
2فایلهای تغییر یافته به همراه7 افزوده شده و 35 حذف شده
  1. 7 19
      components/mdns/mdns.c
  2. 0 16
      components/mdns/private_include/mdns_private.h

+ 7 - 19
components/mdns/mdns.c

@@ -1313,17 +1313,6 @@ static void _mdns_create_answer_from_parsed_packet(mdns_parsed_packet_t * parsed
                     _mdns_free_tx_packet(packet);
                     return;
                 }
-#ifdef MDNS_REPEAT_QUERY_IN_RESPONSE
-                mdns_out_question_t * out_question = malloc(sizeof(mdns_out_question_t));
-                if (out_question == NULL) {
-                    HOOK_MALLOC_FAILED;
-                    _mdns_free_tx_packet(packet);
-                    return;
-                }
-                memcpy(out_question, q, sizeof(mdns_out_question_t));
-                out_question->next = NULL;
-                queueToEnd(mdns_out_question_t, packet->questions, out_question);
-#endif // MDNS_REPEAT_QUERY_IN_RESPONSE
             } else if (!_mdns_alloc_answer(&packet->answers, q->type, NULL, send_flush, false)) {
                 _mdns_free_tx_packet(packet);
                 return;
@@ -2753,7 +2742,7 @@ void mdns_parse_packet(mdns_rx_packet_t * packet)
         }
     }
 
-    if (header.questions && !parsed_packet->questions && !parsed_packet->discovery && !header.answers) {
+    if (header.questions && !parsed_packet->questions && !parsed_packet->discovery) {
         goto clear_rx_packet;
     } else if (header.answers || header.servers || header.additional) {
         uint16_t recordIndex = 0;
@@ -2796,14 +2785,13 @@ void mdns_parse_packet(mdns_rx_packet_t * packet)
 
             if (parsed_packet->discovery && _mdns_name_is_discovery(name, type)) {
                 discovery = true;
-            } else {
-                if (!name->sub && _mdns_name_is_ours(name)) {
-                    ours = true;
-                    if (name->service && name->service[0] && name->proto && name->proto[0]) {
-                        service = _mdns_get_service_item(name->service, name->proto);
-                    }
+            } else if (!name->sub && _mdns_name_is_ours(name)) {
+                ours = true;
+                if (name->service && name->service[0] && name->proto && name->proto[0]) {
+                    service = _mdns_get_service_item(name->service, name->proto);
                 }
-                if (!parsed_packet->authoritative || record_type == MDNS_NS) {
+            } else {
+                if (header.questions || !parsed_packet->authoritative || record_type == MDNS_NS) {
                     //skip this record
                     continue;
                 }

+ 0 - 16
components/mdns/private_include/mdns_private.h

@@ -23,22 +23,6 @@
 #define _mdns_dbg_printf(...) printf(__VA_ARGS__)
 #endif
 
-/** mDNS strict mode: Set this to 1 for the mDNS library to strictly follow the RFC6762:
- * Strict features:
- *   - to do not set original questions in response packets per RFC6762, sec 6
- *
- * The actual configuration is 0, i.e. non-strict mode, since some implementations,
- * such as lwIP mdns resolver (used by standard POSIX API like getaddrinfo, gethostbyname)
- * could not correctly resolve advertised names.
- */
-#define MDNS_STRICT_MODE 0
-
-#if !MDNS_STRICT_MODE
-/* mDNS responders sometimes repeat queries in responses
- * but according to RFC6762, sec 6: Responses MUST NOT contain
- * any item in question field */
-#define  MDNS_REPEAT_QUERY_IN_RESPONSE 1
-#endif
 /** The maximum number of services */
 #define MDNS_MAX_SERVICES           CONFIG_MDNS_MAX_SERVICES