Browse Source

mdns: Support for One-Shot mDNS queries

David Cermak 4 năm trước cách đây
mục cha
commit
0e078d9481
1 tập tin đã thay đổi với 10 bổ sung8 xóa
  1. 10 8
      components/mdns/mdns.c

+ 10 - 8
components/mdns/mdns.c

@@ -1324,15 +1324,17 @@ static void _mdns_create_answer_from_parsed_packet(mdns_parsed_packet_t * parsed
                     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;
+                if (parsed_packet->src_port != MDNS_SERVICE_PORT) {
+                    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);
                 }
-                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);