From 206054928a4b151286d4af3eba3665b2b4d24155 Mon Sep 17 00:00:00 2001 From: Matthias Wachs Date: Thu, 1 Mar 2012 12:30:18 +0000 Subject: [PATCH] - at least compiling --- src/namestore/gnunet-service-namestore.c | 41 +++++++++++-------- src/namestore/namestore.h | 7 ++++ src/namestore/namestore_api.c | 3 +- src/namestore/test_namestore_api_create.c | 6 ++- src/namestore/test_namestore_api_lookup.c | 7 +++- .../test_namestore_record_serialization.c | 20 ++++----- 6 files changed, 48 insertions(+), 36 deletions(-) diff --git a/src/namestore/gnunet-service-namestore.c b/src/namestore/gnunet-service-namestore.c index 254c27fef..67c83bc42 100644 --- a/src/namestore/gnunet-service-namestore.c +++ b/src/namestore/gnunet-service-namestore.c @@ -212,7 +212,6 @@ handle_lookup_name_it (void *cls, struct GNUNET_NAMESTORE_RecordData *rd_selected = NULL; char *rd_tmp; char *name_tmp; - char *rd_ser; size_t rd_ser_len; struct GNUNET_CRYPTO_RsaSignature *signature_tmp; @@ -254,18 +253,22 @@ handle_lookup_name_it (void *cls, copied_elements = rd_count; rd_selected = (struct GNUNET_NAMESTORE_RecordData *) rd; } - rd_ser_len = GNUNET_NAMESTORE_records_serialize(&rd_ser, copied_elements, rd_selected); } else { /* No results */ copied_elements = 0; rd_selected = NULL; - rd_ser = NULL; - rd_ser_len = 0; expire = GNUNET_TIME_UNIT_ZERO_ABS; } + + + rd_ser_len = GNUNET_NAMESTORE_records_get_size(copied_elements, rd_selected); + char rd_ser[rd_ser_len]; + GNUNET_NAMESTORE_records_serialize(copied_elements, rd_selected, rd_ser_len, rd_ser); + + if ((copied_elements == rd_count) && (signature != NULL)) contains_signature = GNUNET_YES; @@ -283,6 +286,7 @@ handle_lookup_name_it (void *cls, lnr_msg->gns_header.header.type = ntohs (GNUNET_MESSAGE_TYPE_NAMESTORE_LOOKUP_NAME_RESPONSE); lnr_msg->gns_header.header.size = ntohs (r_size); lnr_msg->gns_header.r_id = htonl (lnc->request_id); + lnr_msg->rd_count = htons (rd_count); lnr_msg->rd_len = htons (rd_ser_len); lnr_msg->name_len = htons (name_len); lnr_msg->expire = GNUNET_TIME_absolute_hton(expire); @@ -303,7 +307,6 @@ handle_lookup_name_it (void *cls, } memcpy (name_tmp, name, name_len); memcpy (rd_tmp, rd_ser, rd_ser_len); - GNUNET_free_non_null (rd_ser); if (GNUNET_YES == contains_signature) memcpy (signature_tmp, signature, sizeof (struct GNUNET_CRYPTO_RsaSignature)); @@ -379,7 +382,6 @@ static void handle_record_put (void *cls, struct GNUNET_NAMESTORE_Client *nc; struct GNUNET_TIME_Absolute expire; struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded *zone_key; - struct GNUNET_NAMESTORE_RecordData *rd; struct GNUNET_CRYPTO_RsaSignature *signature; struct RecordPutResponseMessage rpr_msg; size_t name_len; @@ -411,10 +413,11 @@ static void handle_record_put (void *cls, struct RecordPutMessage * rp_msg = (struct RecordPutMessage *) message; rid = ntohl (rp_msg->gns_header.r_id); + msg_size = ntohs (rp_msg->gns_header.header.size); key_len = sizeof (struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded); name_len = ntohs (rp_msg->name_len); + rd_count = ntohs (rp_msg->rd_count); rd_ser_len = ntohs(rp_msg->rd_len); - msg_size = ntohs (message->size); msg_size_exp = sizeof (struct RecordPutMessage) + key_len + name_len + rd_ser_len; if (msg_size != msg_size_exp) @@ -445,8 +448,10 @@ static void handle_record_put (void *cls, expire = GNUNET_TIME_absolute_ntoh(rp_msg->expire); signature = (struct GNUNET_CRYPTO_RsaSignature *) &rp_msg->signature; + rd_ser = &name[name_len]; - rd_count = GNUNET_NAMESTORE_records_deserialize(&rd, rd_ser, rd_ser_len); + struct GNUNET_NAMESTORE_RecordData rd[rd_count]; + GNUNET_NAMESTORE_records_deserialize(rd_ser_len, rd_ser, rd_count, rd); GNUNET_HashCode zone_hash; GNUNET_CRYPTO_hash (zone_key, key_len, &zone_hash); @@ -461,8 +466,6 @@ static void handle_record_put (void *cls, rd_count, rd, signature); - GNUNET_NAMESTORE_records_free (rd_count, rd); - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Putting record for name `%s': %s\n", name, (res == GNUNET_OK) ? "OK" : "FAIL"); @@ -496,9 +499,11 @@ GNUNET_NAMESTORE_create_signature (const struct GNUNET_CRYPTO_RsaPrivateKey *key struct GNUNET_CRYPTO_RsaSignature *sig = GNUNET_malloc(sizeof (struct GNUNET_CRYPTO_RsaSignature)); struct GNUNET_CRYPTO_RsaSignaturePurpose *sig_purpose; size_t rd_ser_len; - char *rd_ser; - rd_ser_len = GNUNET_NAMESTORE_records_serialize(&rd_ser, rd_count, rd); + rd_ser_len = GNUNET_NAMESTORE_records_get_size(rd_count, rd); + char rd_ser[rd_ser_len]; + GNUNET_NAMESTORE_records_serialize(rd_count, rd, rd_ser_len, rd_ser); + sig_purpose = GNUNET_malloc(sizeof (struct GNUNET_CRYPTO_RsaSignaturePurpose) + rd_ser_len); sig_purpose->size = htonl (sizeof (struct GNUNET_CRYPTO_RsaSignaturePurpose)+ rd_ser_len); @@ -566,7 +571,6 @@ static void handle_record_create (void *cls, { GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Received `%s' message\n", "NAMESTORE_RECORD_CREATE"); struct GNUNET_NAMESTORE_Client *nc; - struct GNUNET_NAMESTORE_RecordData *rd; struct CreateRecordContext crc; struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded pub; GNUNET_HashCode pubkey_hash; @@ -603,6 +607,7 @@ static void handle_record_create (void *cls, rid = ntohl (rp_msg->gns_header.r_id); name_len = ntohs (rp_msg->name_len); msg_size = ntohs (message->size); + rd_count = ntohs (rp_msg->rd_count); rd_ser_len = ntohs (rp_msg->rd_len); key_len = ntohs (rp_msg->pkey_len); msg_size_exp = sizeof (struct RecordCreateMessage) + key_len + name_len + rd_ser_len; @@ -633,7 +638,8 @@ static void handle_record_create (void *cls, return; } - rd_count = GNUNET_NAMESTORE_records_deserialize(&rd, rd_ser, rd_ser_len); + struct GNUNET_NAMESTORE_RecordData rd[rd_count]; + GNUNET_NAMESTORE_records_deserialize(rd_ser_len, rd_ser, rd_count, rd); GNUNET_assert (rd_count == 1); /* Extracting and converting private key */ @@ -650,9 +656,6 @@ static void handle_record_create (void *cls, /* Get existing records for name */ res = GSN_database->iterate_records(GSN_database->cls, &pubkey_hash, name_tmp, 0, &handle_create_record_it, &crc); - GNUNET_CRYPTO_rsa_key_free(pkey); - GNUNET_NAMESTORE_records_free(rd_count, rd); - GNUNET_SERVER_receive_done (client, GNUNET_OK); } @@ -788,7 +791,9 @@ void zone_iteration_proc (void *cls, if ((rd_count > 0) && (rd != NULL)) { - len = GNUNET_NAMESTORE_records_serialize (&zipr->rd_ser, rd_count, rd); + len = GNUNET_NAMESTORE_records_get_size(rd_count, rd); + zipr->rd_ser = GNUNET_malloc (len); + GNUNET_NAMESTORE_records_serialize(rd_count, rd, len, zipr->rd_ser); zipr->rd_ser_len = len; } } diff --git a/src/namestore/namestore.h b/src/namestore/namestore.h index ab0da6126..c8353e83b 100644 --- a/src/namestore/namestore.h +++ b/src/namestore/namestore.h @@ -141,6 +141,8 @@ struct LookupNameResponseMessage uint16_t rd_len; + uint16_t rd_count; + int32_t contains_sig; /* Requested record type */ @@ -167,6 +169,8 @@ struct RecordPutMessage /* Length of serialized rd data */ uint16_t rd_len; + uint16_t rd_count; + /* Length of pubkey */ uint16_t key_len; @@ -220,6 +224,9 @@ struct RecordCreateMessage /* Record data length */ uint16_t rd_len; + /* Record count */ + uint16_t rd_count; + /* private key length */ uint16_t pkey_len; }; diff --git a/src/namestore/namestore_api.c b/src/namestore/namestore_api.c index 5dea13c5e..d3d5e60ef 100644 --- a/src/namestore/namestore_api.c +++ b/src/namestore/namestore_api.c @@ -815,7 +815,7 @@ GNUNET_NAMESTORE_record_put (struct GNUNET_NAMESTORE_Handle *h, memcpy (name_tmp, name, name_len); msg->expire = GNUNET_TIME_absolute_hton (expire); msg->rd_len = htons (rd_ser_len); - + msg->rd_count = htons (rd_count); memcpy (rd_tmp, rd_ser, rd_ser_len); GNUNET_free (rd_ser); @@ -928,6 +928,7 @@ GNUNET_NAMESTORE_record_create (struct GNUNET_NAMESTORE_Handle *h, msg->gns_header.header.size = htons (msg_size); msg->gns_header.r_id = htonl (rid); msg->name_len = htons (name_len); + msg->rd_count = htons (1); msg->rd_len = htons (rd_ser_len); msg->pkey_len = htons (key_len); memcpy (pkey_tmp, pkey_enc, key_len); diff --git a/src/namestore/test_namestore_api_create.c b/src/namestore/test_namestore_api_create.c index 5caf877c2..e4f9cf124 100644 --- a/src/namestore/test_namestore_api_create.c +++ b/src/namestore/test_namestore_api_create.c @@ -286,7 +286,6 @@ run (void *cls, char *const *args, const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *cfg) { endbadly_task = GNUNET_SCHEDULER_add_delayed(TIMEOUT,endbadly, NULL); - char * rd_ser; size_t rd_ser_len; /* load privat key */ @@ -298,7 +297,10 @@ run (void *cls, char *const *args, const char *cfgfile, /* create record */ s_name = "dummy.dummy.gnunet"; s_rd = create_record (RECORDS); - rd_ser_len = GNUNET_NAMESTORE_records_serialize(&rd_ser, RECORDS, s_rd); + + rd_ser_len = GNUNET_NAMESTORE_records_get_size(RECORDS, s_rd); + char rd_ser[rd_ser_len]; + GNUNET_NAMESTORE_records_serialize(RECORDS, s_rd, rd_ser_len, rd_ser); /* sign */ struct GNUNET_CRYPTO_RsaSignaturePurpose *sig_purpose = GNUNET_malloc(sizeof (struct GNUNET_CRYPTO_RsaSignaturePurpose) + rd_ser_len); diff --git a/src/namestore/test_namestore_api_lookup.c b/src/namestore/test_namestore_api_lookup.c index d20a1cdaf..1d91c32c6 100644 --- a/src/namestore/test_namestore_api_lookup.c +++ b/src/namestore/test_namestore_api_lookup.c @@ -232,7 +232,7 @@ run (void *cls, char *const *args, const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *cfg) { endbadly_task = GNUNET_SCHEDULER_add_delayed(TIMEOUT,endbadly, NULL); - char * rd_ser; + size_t rd_ser_len; /* load privat key */ @@ -244,7 +244,10 @@ run (void *cls, char *const *args, const char *cfgfile, /* create record */ s_name = "dummy.dummy.gnunet"; s_rd = create_record (RECORDS); - rd_ser_len = GNUNET_NAMESTORE_records_serialize(&rd_ser, RECORDS, s_rd); + + rd_ser_len = GNUNET_NAMESTORE_records_get_size(RECORDS, s_rd); + char rd_ser[rd_ser_len]; + GNUNET_NAMESTORE_records_serialize(RECORDS, s_rd, rd_ser_len, rd_ser); /* sign */ struct GNUNET_CRYPTO_RsaSignaturePurpose *sig_purpose = GNUNET_malloc(sizeof (struct GNUNET_CRYPTO_RsaSignaturePurpose) + rd_ser_len); diff --git a/src/namestore/test_namestore_record_serialization.c b/src/namestore/test_namestore_record_serialization.c index cd60a5dda..b389e7faf 100644 --- a/src/namestore/test_namestore_record_serialization.c +++ b/src/namestore/test_namestore_record_serialization.c @@ -36,15 +36,12 @@ static void run (void *cls, char *const *args, const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *cfg) { - char * rd_ser = NULL; size_t len; int c; - int dst_elem = 0; int rd_count = 3; size_t data_len; struct GNUNET_NAMESTORE_RecordData src[rd_count]; - struct GNUNET_NAMESTORE_RecordData *dst = NULL; memset(src, '\0', rd_count * sizeof (struct GNUNET_NAMESTORE_RecordData)); @@ -61,18 +58,20 @@ run (void *cls, char *const *args, const char *cfgfile, } res = 0; - len = GNUNET_NAMESTORE_records_serialize (&rd_ser, rd_count, src); + len = GNUNET_NAMESTORE_records_get_size(rd_count, src); + char rd_ser[len]; + GNUNET_assert (len == GNUNET_NAMESTORE_records_serialize(rd_count, src, len, rd_ser)); + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Serialized data len: %u\n",len); GNUNET_assert (rd_ser != NULL); - dst_elem = GNUNET_NAMESTORE_records_deserialize(&dst, rd_ser, len); - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Deserialized elements: %u\n",dst_elem); + struct GNUNET_NAMESTORE_RecordData dst[rd_count]; + GNUNET_assert (GNUNET_OK == GNUNET_NAMESTORE_records_deserialize (len, rd_ser, rd_count, dst)); - GNUNET_assert (dst_elem == rd_count); GNUNET_assert (dst != NULL); - for (c = 0; c < dst_elem; c++) + for (c = 0; c < rd_count; c++) { if (src[c].data_size != dst[c].data_size) { @@ -116,11 +115,6 @@ run (void *cls, char *const *args, const char *cfgfile, GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Element [%i]: EQUAL\n", c); } - - for (c = 0; c < rd_count; c++) - GNUNET_free ((void *) src[c].data); - GNUNET_NAMESTORE_records_free (dst_elem, dst); - GNUNET_free (rd_ser); } static int -- 2.25.1