Ticket #131: big-record.patch

File big-record.patch, 4.4 kB (added by sjoerd, 2 years ago)
  • avahi-core/dns.c

    old new  
    786787        goto fail; 
    787788     
    788789    size = avahi_dns_packet_extend(p, 0) - start; 
    789     assert(size <= 0xFFFF); 
     790    assert(size <= AVAHI_DNS_MAX_RDATA); 
    790791 
    791792/*     avahi_log_debug("appended %u", size); */ 
    792793 
  • avahi-core/dns.h

    old new  
    2525#include "rr.h" 
    2626#include "hashmap.h" 
    2727 
    28 #define AVAHI_DNS_PACKET_SIZE_MAX 9000 
    2928#define AVAHI_DNS_PACKET_HEADER_SIZE 12 
    3029#define AVAHI_DNS_PACKET_EXTRA_SIZE 48 
    3130#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 
    3234 
    3335typedef struct AvahiDnsPacket { 
    3436    size_t size, rindex, max_size; 
  • avahi-core/response-sched.c

    old new  
    245245        avahi_dns_packet_free(p); 
    246246 
    247247        /* 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; 
    249250 
    250         if (size > AVAHI_DNS_PACKET_SIZE_MAX) 
    251             size = AVAHI_DNS_PACKET_SIZE_MAX; 
    252          
    253251        if (!(p = avahi_dns_packet_new_response(size, 1))) 
    254252            return; /* OOM */ 
    255253 
  • avahi-core/probe-sched.c

    old new  
    248248        size = 
    249249            avahi_key_get_estimate_size(pj->record->key) + 
    250250            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; 
    255252 
    256253        if (!(p = avahi_dns_packet_new_query(size))) 
    257254            return; /* OOM */ 
  • avahi-core/server.c

    old new  
    448448                        /* The record is too large for one packet, so create a larger packet */ 
    449449 
    450450                        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
    454454 
    455455                        if (!(reply = avahi_dns_packet_new_reply(p, size, 0, 1))) 
    456456                            break; /* OOM */ 
     
    458458                        if (!avahi_dns_packet_append_record(reply, r, flush_cache, 0)) { 
    459459                            char *t; 
    460460                            avahi_dns_packet_free(reply); 
     461                            reply = NULL; 
    461462                            t = avahi_record_to_string(r); 
    462463                            avahi_log_warn("Record [%s] too large, doesn't fit in any packet!", t); 
    463464                            avahi_free(t); 
    464465                            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; 
    467474                    } 
    468475 
    469476                    /* Appending the record didn't succeeed, so let's send this packet, and create a new one */