[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r19997 - gnunet/src/gns
From: |
gnunet |
Subject: |
[GNUnet-SVN] r19997 - gnunet/src/gns |
Date: |
Fri, 24 Feb 2012 00:23:05 +0100 |
Author: schanzen
Date: 2012-02-24 00:23:05 +0100 (Fri, 24 Feb 2012)
New Revision: 19997
Modified:
gnunet/src/gns/gnunet-service-gns.c
Log:
-dnsparser stuff, still incomplete
Modified: gnunet/src/gns/gnunet-service-gns.c
===================================================================
--- gnunet/src/gns/gnunet-service-gns.c 2012-02-23 20:33:22 UTC (rev 19996)
+++ gnunet/src/gns/gnunet-service-gns.c 2012-02-23 23:23:05 UTC (rev 19997)
@@ -565,45 +565,45 @@
reply_to_dns(struct GNUNET_GNS_PendingQuery *answer)
{
struct GNUNET_GNS_QueryRecordList *i;
- struct GNUNET_DNSPARSER_Packet *packet;
struct GNUNET_DNSPARSER_Flags dnsflags;
int j;
size_t len;
int ret;
char *buf;
+ struct GNUNET_DNSPARSER_Packet packet;
+ struct GNUNET_DNSPARSER_Record answer_records[answer->num_records];
+ packet.answers = answer_records;
- packet = GNUNET_malloc(sizeof(struct GNUNET_DNSPARSER_Packet));
- packet->answers =
- GNUNET_malloc(sizeof(struct GNUNET_DNSPARSER_Record) *
answer->num_records);
-
len = sizeof(struct GNUNET_DNSPARSER_Record*);
j = 0;
for (i=answer->records_head; i != NULL; i=i->next)
{
GNUNET_log(GNUNET_ERROR_TYPE_INFO,
"Adding type %d to DNS response\n", i->record->record_type);
- //FIXME build proper dnsparser record! this will fail!
- //memcpy(&packet->answers[j],
- // i->record,
- // sizeof (struct GNUNET_DNSPARSER_Record));
- GNUNET_free(i->record);
+ answer_records[j].name = answer->original_name; //FIXME yes?
+ answer_records[j].type = i->record->record_type;
+ answer_records[j].data.raw.data_len = i->record->data_size;
+ answer_records[j].data.raw.data = (char*)i->record->data;
+ answer_records[j].expiration_time = i->record->expiration;
+ answer_records[j].class = GNUNET_DNSPARSER_CLASS_INTERNET;//hmmn
+ //GNUNET_free(i->record); DO this later!
j++;
}
GNUNET_log(GNUNET_ERROR_TYPE_INFO, "after memcpy\n");
/* FIXME how to handle auth, additional etc */
- packet->num_answers = answer->num_records;
- packet->num_authority_records = answer->num_authority_records;
+ packet.num_answers = answer->num_records;
+ packet.num_authority_records = answer->num_authority_records;
dnsflags.authoritative_answer = 1;
dnsflags.opcode = GNUNET_DNSPARSER_OPCODE_QUERY;
dnsflags.return_code = GNUNET_DNSPARSER_RETURN_CODE_NO_ERROR; //not sure
dnsflags.query_or_response = 1;
- packet->flags = dnsflags;
+ packet.flags = dnsflags;
- packet->id = answer->id;
+ packet.id = answer->id;
//FIXME this is silently discarded
- ret = GNUNET_DNSPARSER_pack (packet,
+ ret = GNUNET_DNSPARSER_pack (&packet,
1024, /* FIXME magic from dns redirector */
&buf,
&len);
@@ -653,9 +653,12 @@
struct GNUNET_GNS_PendingQuery *query;
struct GNUNET_GNS_QueryRecordList *qrecord;
struct GNUNET_NAMESTORE_RecordData *record;
+ struct GNUNET_TIME_Relative remaining_time;
GNUNET_HashCode zone;
+
query = (struct GNUNET_GNS_PendingQuery *) cls;
GNUNET_CRYPTO_hash(key, GNUNET_CRYPTO_RSA_KEY_LENGTH, &zone);
+ remaining_time = GNUNET_TIME_absolute_get_remaining (expiration);
//FIXME Handle results in rd
@@ -675,9 +678,16 @@
*/
if (!GNUNET_CRYPTO_hash_cmp(&zone, &zone_hash))
{
- //FIXME if very recent dht lookup -> cannot resolve
- resolve_name_dht(query, name);
- return;
+ remaining_time = GNUNET_TIME_absolute_get_remaining (expiration);
+ if (remaining_time.rel_value == 0)
+ {
+ resolve_name_dht(query, name);
+ return;
+ }
+ else
+ {
+ GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Record is still recent. No DHT
lookup\n");
+ }
}
/**
@@ -697,11 +707,25 @@
* FIXME Check record expiration and dht expiration
* consult dht if necessary
*/
+ if (remaining_time.rel_value == 0)
+ {
+ GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
+ "This dht entry is old. Refreshing.\n");
+ resolve_name_dht(query, name);
+ return;
+ }
GNUNET_log(GNUNET_ERROR_TYPE_INFO,
"Processing additional result %s from namestore\n", name);
int i;
for (i=0; i<rd_count;i++)
{
+ if ((GNUNET_TIME_absolute_get_remaining (rd[i].expiration)).rel_value
+ == 0)
+ {
+ //FIXME there is a catch here...
+ GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "This record is expired.
Skipping\n");
+ continue;
+ }
// A time will come when this has to be freed
qrecord = GNUNET_malloc(sizeof(struct GNUNET_GNS_QueryRecordList));
record = GNUNET_malloc(sizeof(struct GNUNET_NAMESTORE_RecordData));
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r19997 - gnunet/src/gns,
gnunet <=