From d553a1c2d1cd3fcdd65ade64940b5bd3efc70675 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Thu, 31 Mar 2005 23:31:11 +0000 Subject: add client part of known answer suppresion git-svn-id: file:///home/lennart/svn/public/avahi/trunk@20 941a03a8-eaeb-0310-b9a0-b1bbd8fe43fe --- server.c | 37 +++++++++++++++++++++++++++---------- 1 file changed, 27 insertions(+), 10 deletions(-) (limited to 'server.c') diff --git a/server.c b/server.c index 6b3c2dd..ecf4457 100644 --- a/server.c +++ b/server.c @@ -24,9 +24,22 @@ static void handle_query_key(flxServer *s, flxKey *k, flxInterface *i, const flx flx_packet_scheduler_incoming_query(i->scheduler, k); - for (e = g_hash_table_lookup(s->rrset_by_key, k); e; e = e->by_key_next) - if (flx_interface_match(i, e->interface, e->protocol)) - flx_interface_post_response(i, e->record, FALSE); + if (k->type == FLX_DNS_TYPE_ANY) { + + /* Handle ANY query */ + + for (e = s->entries; e; e = e->entry_next) + if (flx_key_pattern_match(k, e->record->key)) + if (flx_interface_match(i, e->interface, e->protocol)) + flx_interface_post_response(i, e->record, FALSE); + } else { + + /* Handle all other queries */ + + for (e = g_hash_table_lookup(s->rrset_by_key, k); e; e = e->by_key_next) + if (flx_interface_match(i, e->interface, e->protocol)) + flx_interface_post_response(i, e->record, FALSE); + } } static void handle_query(flxServer *s, flxDnsPacket *p, flxInterface *i, const flxAddress *a) { @@ -69,13 +82,15 @@ static void handle_response(flxServer *s, flxDnsPacket *p, flxInterface *i, cons return; } - g_message("Handling response: %s", txt = flx_record_to_string(record)); - g_free(txt); - - flx_cache_update(i->cache, record, cache_flush, a); - - flx_packet_scheduler_incoming_response(i->scheduler, record); - flx_record_unref(record); + if (record->key->type != FLX_DNS_TYPE_ANY) { + g_message("Handling response: %s", txt = flx_record_to_string(record)); + g_free(txt); + + flx_cache_update(i->cache, record, cache_flush, a); + + flx_packet_scheduler_incoming_response(i->scheduler, record); + flx_record_unref(record); + } } } @@ -348,6 +363,8 @@ void flx_server_add( g_assert(s); g_assert(r); + g_assert(r->key->type != FLX_DNS_TYPE_ANY); + e = g_new(flxServerEntry, 1); e->record = flx_record_ref(r); e->id = id; -- cgit