X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;ds=sidebyside;f=avahi-core%2Fserver.c;h=387156b3cd238fa444dd5a0f2b8d6854af1a2fe9;hb=85b85902f68d51cd89b09f2789dbaf72c8d27f04;hp=952f09e1245a94dd64d73fc3d0c40606f40bb8cc;hpb=1c24d17c1001240306e054ea534c3aa69a45604b;p=catta diff --git a/avahi-core/server.c b/avahi-core/server.c index 952f09e..387156b 100644 --- a/avahi-core/server.c +++ b/avahi-core/server.c @@ -370,7 +370,7 @@ void avahi_server_generate_response(AvahiServer *s, AvahiInterface *i, AvahiDnsP AvahiDnsPacket *reply; AvahiRecord *r; - if (!(reply = avahi_dns_packet_new_reply(p, 512 /* unicast DNS maximum packet size is 512 */ , 1, 1))) + if (!(reply = avahi_dns_packet_new_reply(p, 512 + AVAHI_DNS_PACKET_EXTRA_SIZE /* unicast DNS maximum packet size is 512 */ , 1, 1))) return; /* OOM */ while ((r = avahi_record_list_next(s->record_list, NULL, NULL, NULL))) { @@ -438,7 +438,6 @@ void avahi_server_generate_response(AvahiServer *s, AvahiInterface *i, AvahiDnsP * the specific header field, and return to the caller */ avahi_dns_packet_inc_field(reply, AVAHI_DNS_FIELD_ANCOUNT); - break; } @@ -449,21 +448,32 @@ void avahi_server_generate_response(AvahiServer *s, AvahiInterface *i, AvahiDnsP avahi_dns_packet_free(reply); size = avahi_record_get_estimate_size(r) + AVAHI_DNS_PACKET_HEADER_SIZE; - if (size > AVAHI_DNS_PACKET_SIZE_MAX) - size = AVAHI_DNS_PACKET_SIZE_MAX; - if (!(reply = avahi_dns_packet_new_reply(p, size, 0, 1))) + if (!(reply = avahi_dns_packet_new_reply(p, size + AVAHI_DNS_PACKET_EXTRA_SIZE, 0, 1))) break; /* OOM */ - if (!avahi_dns_packet_append_record(reply, r, flush_cache, 0)) { + if (avahi_dns_packet_append_record(reply, r, flush_cache, 0)) { + + /* Appending this record succeeded, so incremeant + * the specific header field, and return to the caller */ + + avahi_dns_packet_inc_field(reply, AVAHI_DNS_FIELD_ANCOUNT); + break; + + } else { + + /* We completely fucked up, there's + * nothing we can do. The RR just doesn't + * fit in. Let's ignore it. */ + char *t; avahi_dns_packet_free(reply); + reply = NULL; t = avahi_record_to_string(r); avahi_log_warn("Record [%s] too large, doesn't fit in any packet!", t); avahi_free(t); break; - } else - avahi_dns_packet_inc_field(reply, AVAHI_DNS_FIELD_ANCOUNT); + } } /* Appending the record didn't succeeed, so let's send this packet, and create a new one */ @@ -600,11 +610,9 @@ static void handle_query_packet(AvahiServer *s, AvahiDnsPacket *p, AvahiInterfac goto fail; } - if (handle_conflict(s, i, record, unique)) { - avahi_response_scheduler_suppress(i->response_scheduler, record, a); - avahi_record_list_drop(s->record_list, record); - avahi_cache_stop_poof(i->cache, record, a); - } + avahi_response_scheduler_suppress(i->response_scheduler, record, a); + avahi_record_list_drop(s->record_list, record); + avahi_cache_stop_poof(i->cache, record, a); avahi_record_unref(record); } @@ -1553,7 +1561,7 @@ AvahiServerConfig* avahi_server_config_init(AvahiServerConfig *c) { c->use_iff_running = 0; c->enable_reflector = 0; c->reflect_ipv = 0; - c->add_service_cookie = 1; + c->add_service_cookie = 0; c->enable_wide_area = 0; c->n_wide_area_servers = 0; c->disallow_other_stacks = 0;