Ticket #131: big-record.patch
| File big-record.patch, 4.4 kB (added by sjoerd, 2 years ago) |
|---|
-
avahi-core/dns.c
old new 786 787 goto fail; 787 788 788 789 size = avahi_dns_packet_extend(p, 0) - start; 789 assert(size <= 0xFFFF);790 assert(size <= AVAHI_DNS_MAX_RDATA); 790 791 791 792 /* avahi_log_debug("appended %u", size); */ 792 793 -
avahi-core/dns.h
old new 25 25 #include "rr.h" 26 26 #include "hashmap.h" 27 27 28 #define AVAHI_DNS_PACKET_SIZE_MAX 900029 28 #define AVAHI_DNS_PACKET_HEADER_SIZE 12 30 29 #define AVAHI_DNS_PACKET_EXTRA_SIZE 48 31 30 #define AVAHI_DNS_LABELS_MAX 127 31 #define AVAHI_DNS_MAX_RDATA 0xFFFF 32 #define AVAHI_DNS_PACKET_SIZE_MAX \ 33 AVAHI_DNS_MAX_RDATA + AVAHI_DNS_PACKET_HEADER_SIZE + AVAHI_DNS_LABELS_MAX 32 34 33 35 typedef struct AvahiDnsPacket { 34 36 size_t size, rindex, max_size; -
avahi-core/response-sched.c
old new 245 245 avahi_dns_packet_free(p); 246 246 247 247 /* OK, the packet was too small, so create one that fits */ 248 size = avahi_record_get_estimate_size(rj->record) + AVAHI_DNS_PACKET_HEADER_SIZE; 248 size = avahi_record_get_estimate_size(rj->record) 249 + AVAHI_DNS_PACKET_HEADER_SIZE + AVAHI_DNS_PACKET_EXTRA_SIZE; 249 250 250 if (size > AVAHI_DNS_PACKET_SIZE_MAX)251 size = AVAHI_DNS_PACKET_SIZE_MAX;252 253 251 if (!(p = avahi_dns_packet_new_response(size, 1))) 254 252 return; /* OOM */ 255 253 -
avahi-core/probe-sched.c
old new 248 248 size = 249 249 avahi_key_get_estimate_size(pj->record->key) + 250 250 avahi_record_get_estimate_size(pj->record) + 251 AVAHI_DNS_PACKET_HEADER_SIZE; 252 253 if (size > AVAHI_DNS_PACKET_SIZE_MAX) 254 size = AVAHI_DNS_PACKET_SIZE_MAX; 251 AVAHI_DNS_PACKET_HEADER_SIZE + AVAHI_DNS_PACKET_EXTRA_SIZE; 255 252 256 253 if (!(p = avahi_dns_packet_new_query(size))) 257 254 return; /* OOM */ -
avahi-core/server.c
old new 448 448 /* The record is too large for one packet, so create a larger packet */ 449 449 450 450 avahi_dns_packet_free(reply); 451 size = avahi_record_get_estimate_size(r) + AVAHI_DNS_PACKET_HEADER_SIZE;452 if (size > AVAHI_DNS_PACKET_SIZE_MAX)453 size = AVAHI_DNS_PACKET_SIZE_MAX;451 size = avahi_record_get_estimate_size(r) 452 + AVAHI_DNS_PACKET_HEADER_SIZE 453 + AVAHI_DNS_PACKET_EXTRA_SIZE; 454 454 455 455 if (!(reply = avahi_dns_packet_new_reply(p, size, 0, 1))) 456 456 break; /* OOM */ … … 458 458 if (!avahi_dns_packet_append_record(reply, r, flush_cache, 0)) { 459 459 char *t; 460 460 avahi_dns_packet_free(reply); 461 reply = NULL; 461 462 t = avahi_record_to_string(r); 462 463 avahi_log_warn("Record [%s] too large, doesn't fit in any packet!", t); 463 464 avahi_free(t); 464 465 break; 465 } else 466 avahi_dns_packet_inc_field(reply, AVAHI_DNS_FIELD_ANCOUNT); 466 } 467 /* Packet specifically made so this record fits.. no 468 * more records can be added so sent it out */ 469 avahi_dns_packet_inc_field(reply, AVAHI_DNS_FIELD_ANCOUNT); 470 avahi_interface_send_packet_unicast(i, reply, a, port); 471 avahi_dns_packet_free(reply); 472 reply = NULL; 473 break; 467 474 } 468 475 469 476 /* Appending the record didn't succeeed, so let's send this packet, and create a new one */
