summaryrefslogtreecommitdiffstats
path: root/server.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2005-03-31 23:31:11 +0000
committerLennart Poettering <lennart@poettering.net>2005-03-31 23:31:11 +0000
commitd553a1c2d1cd3fcdd65ade64940b5bd3efc70675 (patch)
tree5e240f9fcea9fdc77662df825f217107fbd95406 /server.c
parent07b93a6d49a3252e3f5cacadd15083949241b071 (diff)
add client part of known answer suppresion
git-svn-id: file:///home/lennart/svn/public/avahi/trunk@20 941a03a8-eaeb-0310-b9a0-b1bbd8fe43fe
Diffstat (limited to 'server.c')
-rw-r--r--server.c37
1 files changed, 27 insertions, 10 deletions
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;