X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fnamestore%2Fnamestore.h;h=7d406df61d56be3c0124da9736c05e9bcbb4407c;hb=dc40d894157a9eeee4c72f8cb974fd48e1a98a1b;hp=760d491e2d0d91909c871b14c9a73139ee78cde6;hpb=3ca1463193aadba06be89135c7a0ab34a3052de3;p=oweals%2Fgnunet.git diff --git a/src/namestore/namestore.h b/src/namestore/namestore.h index 760d491e2..7d406df61 100644 --- a/src/namestore/namestore.h +++ b/src/namestore/namestore.h @@ -1,6 +1,6 @@ /* This file is part of GNUnet. - (C) 2009 Christian Grothoff (and other contributing authors) + (C) 2011-2013 Christian Grothoff (and other contributing authors) GNUnet is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published @@ -22,423 +22,362 @@ * @file namestore/namestore.h * @brief common internal definitions for namestore service * @author Matthias Wachs + * @author Christian Grothoff */ #ifndef NAMESTORE_H #define NAMESTORE_H -/* - * Collect message types here, move to protocols later +/** + * Maximum length of any name, including 0-termination. */ -#define GNUNET_MESSAGE_TYPE_NAMESTORE_LOOKUP_NAME 431 -#define GNUNET_MESSAGE_TYPE_NAMESTORE_LOOKUP_NAME_RESPONSE 432 -#define GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_PUT 433 -#define GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_PUT_RESPONSE 434 -#define GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_CREATE 435 -#define GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_CREATE_RESPONSE 436 -#define GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_REMOVE 437 -#define GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_REMOVE_RESPONSE 438 - -#define GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_ITERATION_START 439 -#define GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_ITERATION_RESPONSE 440 -#define GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_ITERATION_NEXT 441 -#define GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_ITERATION_STOP 442 - -size_t -GNUNET_NAMESTORE_records_serialize (char ** dest, - unsigned int rd_count, - const struct GNUNET_NAMESTORE_RecordData *rd); - -int -GNUNET_NAMESTORE_records_deserialize ( struct GNUNET_NAMESTORE_RecordData **dest, char *src, size_t len); - -void -GNUNET_NAMESTORE_records_free (unsigned int rd_count, struct GNUNET_NAMESTORE_RecordData *rd); +#define MAX_NAME_LEN 256 + +GNUNET_NETWORK_STRUCT_BEGIN /** - * A GNS record serialized for network transmission. - * layout is [struct GNUNET_NAMESTORE_NetworkRecord][char[data_size] data] + * Generic namestore message with op id */ -struct GNUNET_NAMESTORE_NetworkRecord +struct GNUNET_NAMESTORE_Header { /** - * Expiration time for the DNS record. - */ - struct GNUNET_TIME_AbsoluteNBO expiration; - - /** - * Number of bytes in 'data'. - */ - uint32_t data_size; - - /** - * Type of the GNS/DNS record. + * header.type will be GNUNET_MESSAGE_TYPE_NAMESTORE_* + * header.size will be message size */ - uint32_t record_type; + struct GNUNET_MessageHeader header; /** - * Flags for the record. + * Request ID in NBO */ - uint32_t flags; + uint32_t r_id; }; - -GNUNET_NETWORK_STRUCT_BEGIN /** - * Connect to namestore service + * Lookup a block in the namestore */ -struct StartMessage +struct LookupBlockMessage { + /** + * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_LOOKUP_BLOCK + */ + struct GNUNET_NAMESTORE_Header gns_header; /** - * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_START + * The query. */ - struct GNUNET_MessageHeader header; + struct GNUNET_HashCode query; }; -GNUNET_NETWORK_STRUCT_END -GNUNET_NETWORK_STRUCT_BEGIN /** - * Generic namestore message with op id + * Lookup response */ -struct GenericMessage +struct LookupBlockResponseMessage { /** - * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_* + * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_LOOKUP_BLOCK_RESPONSE */ - struct GNUNET_MessageHeader header; + struct GNUNET_NAMESTORE_Header gns_header; + + /** + * Expiration time + */ + struct GNUNET_TIME_AbsoluteNBO expire; /** - * Operation ID in NBO + * Signature. */ - uint32_t op_id; + struct GNUNET_CRYPTO_EccSignature signature; + + /** + * Derived public key. + */ + struct GNUNET_CRYPTO_EccPublicKey derived_key; + + /* follwed by encrypted block data */ }; -GNUNET_NETWORK_STRUCT_END /** - * Connect to namestore service + * Cache a record in the namestore. */ -GNUNET_NETWORK_STRUCT_BEGIN -struct LookupNameMessage +struct BlockCacheMessage { /** - * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_LOOKUP_NAME + * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_BLOCK_CACHE */ - struct GNUNET_MessageHeader header; + struct GNUNET_NAMESTORE_Header gns_header; /** - * Operation ID in NBO + * Expiration time */ - uint32_t op_id; + struct GNUNET_TIME_AbsoluteNBO expire; - /* The zone */ - GNUNET_HashCode zone; + /** + * Signature. + */ + struct GNUNET_CRYPTO_EccSignature signature; - /* Requested record type */ - uint32_t record_type; + /** + * Derived public key. + */ + struct GNUNET_CRYPTO_EccPublicKey derived_key; - /* Requested record type */ - uint32_t name_len; + /* follwed by encrypted block data */ }; -GNUNET_NETWORK_STRUCT_END /** - * Lookup response - * Memory layout: - * [struct LookupNameResponseMessage][struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded][char *name][rc_count * struct GNUNET_NAMESTORE_RecordData][struct GNUNET_CRYPTO_RsaSignature] + * Response to a request to cache a block. */ -GNUNET_NETWORK_STRUCT_BEGIN -struct LookupNameResponseMessage +struct BlockCacheResponseMessage { /** - * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_LOOKUP_NAME_RESPONSE + * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_BLOCK_CACHE_RESPONSE */ - struct GNUNET_MessageHeader header; + struct GNUNET_NAMESTORE_Header gns_header; /** - * Operation ID in NBO + * #GNUNET_OK on success, #GNUNET_SYSERR error */ - uint32_t op_id; - - struct GNUNET_TIME_AbsoluteNBO expire; - - uint16_t name_len; - - uint16_t contains_sig; - - /* Requested record type */ - uint16_t rd_len; + int32_t op_result; }; -GNUNET_NETWORK_STRUCT_END /** - * Put a record to the namestore - * Memory layout: - * [struct RecordPutMessage][struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded][char *name][rc_count * struct GNUNET_NAMESTORE_RecordData] + * Store a record to the namestore (as authority). */ -GNUNET_NETWORK_STRUCT_BEGIN -struct RecordPutMessage +struct RecordStoreMessage { /** - * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_LOOKUP_RECORD_PUT + * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_STORE */ - struct GNUNET_MessageHeader header; + struct GNUNET_NAMESTORE_Header gns_header; /** - * Operation ID in NBO + * Expiration time */ - uint32_t op_id; - - /* Contenct starts here */ + struct GNUNET_TIME_AbsoluteNBO expire; - /* name length */ + /** + * Name length + */ uint16_t name_len; - /* Length of serialized rd data */ + /** + * Length of serialized record data + */ uint16_t rd_len; - /* Length of pubkey */ - uint16_t key_len; + /** + * Number of records contained + */ + uint16_t rd_count; + + /** + * always zero (for alignment) + */ + uint16_t reserved; - struct GNUNET_TIME_AbsoluteNBO expire; + /** + * The private key of the authority. + */ + struct GNUNET_CRYPTO_EccPrivateKey private_key; - struct GNUNET_CRYPTO_RsaSignature signature; + /* followed by: + * name with length name_len + * serialized record data with rd_count records + */ }; -GNUNET_NETWORK_STRUCT_END + /** - * Put a record to the namestore response + * Response to a record storage request. */ -GNUNET_NETWORK_STRUCT_BEGIN -struct RecordPutResponseMessage +struct RecordStoreResponseMessage { /** - * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_PUT_RESPONSE + * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_STORE_RESPONSE */ - struct GNUNET_MessageHeader header; - - /** - * Operation ID in NBO - */ - uint32_t op_id; - - /* Contenct starts here */ + struct GNUNET_NAMESTORE_Header gns_header; /** - * name length: GNUNET_NO (0) on error, GNUNET_OK (1) on success + * #GNUNET_SYSERR on failure, #GNUNET_OK on success */ - uint16_t op_result; + int32_t op_result; }; -GNUNET_NETWORK_STRUCT_END + /** - * Create a record and put it to the namestore - * Memory layout: - * [struct RecordCreateMessage][char *name][rc_count * struct GNUNET_NAMESTORE_RecordData] + * Lookup a name for a zone hash */ -GNUNET_NETWORK_STRUCT_BEGIN -struct RecordCreateMessage +struct ZoneToNameMessage { /** - * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_CREATE + * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_TO_NAME */ - struct GNUNET_MessageHeader header; + struct GNUNET_NAMESTORE_Header gns_header; /** - * Operation ID in NBO + * The private key of the zone to look up in */ - uint32_t op_id; - - /* Contenct starts here */ + struct GNUNET_CRYPTO_EccPrivateKey zone; - /* name length */ - uint16_t name_len; - - /* Record data length */ - uint16_t rd_len; - - /* private key length */ - uint16_t pkey_len; + /** + * The public key of the target zone + */ + struct GNUNET_CRYPTO_EccPublicKey value_zone; }; -GNUNET_NETWORK_STRUCT_END /** - * Create a record to the namestore response - * Memory layout: + * Respone for zone to name lookup */ -GNUNET_NETWORK_STRUCT_BEGIN -struct RecordCreateResponseMessage +struct ZoneToNameResponseMessage { /** - * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_CREATE_RESPONSE + * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_TO_NAME_RESPONSE */ - struct GNUNET_MessageHeader header; + struct GNUNET_NAMESTORE_Header gns_header; /** - * Operation ID in NBO + * Length of the name */ - uint32_t op_id; - - /* Contenct starts here */ + uint16_t name_len; /** - * name length: GNUNET_NO (0) on error, GNUNET_OK (1) on success + * Length of serialized record data */ - uint16_t op_result; - - -}; -GNUNET_NETWORK_STRUCT_END + uint16_t rd_len; -/** - * Remove a record from the namestore - * Memory layout: - * [struct RecordRemoveMessage][char *name][struct GNUNET_NAMESTORE_RecordData] - */ -GNUNET_NETWORK_STRUCT_BEGIN -struct RecordRemoveMessage -{ /** - * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_REMOVE + * Number of records contained */ - struct GNUNET_MessageHeader header; + uint16_t rd_count; /** - * Operation ID in NBO + * result in NBO: #GNUNET_OK on success, #GNUNET_NO if there were no + * results, #GNUNET_SYSERR on error */ - uint32_t op_id; + int16_t res; - /* Contenct starts here */ + /** + * The private key of the zone that contained the name. + */ + struct GNUNET_CRYPTO_EccPrivateKey zone; - /* name length */ - uint16_t name_len; + /* followed by: + * name with length name_len + * serialized record data with rd_count records + */ - struct GNUNET_CRYPTO_RsaSignature signature; }; -GNUNET_NETWORK_STRUCT_END /** - * Remove a record from the namestore response + * Record is returned from the namestore (as authority). */ -GNUNET_NETWORK_STRUCT_BEGIN -struct RecordRemoveResponseMessage +struct RecordResultMessage { /** - * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_REMOVE_RESPONSE + * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_RESULT */ - struct GNUNET_MessageHeader header; + struct GNUNET_NAMESTORE_Header gns_header; /** - * Operation ID in NBO + * Name length */ - uint32_t op_id; - - /* Contenct starts here */ + uint16_t name_len; /** - * name length: GNUNET_NO (0) on error, GNUNET_OK (1) on success + * Length of serialized record data */ - uint16_t op_result; -}; -GNUNET_NETWORK_STRUCT_END - + uint16_t rd_len; -/** - * Start a zone iteration for the given zone - */ -GNUNET_NETWORK_STRUCT_BEGIN -struct ZoneIterationStartMessage -{ /** - * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_ITERATION_START + * Number of records contained */ - struct GNUNET_MessageHeader header; + uint16_t rd_count; /** - * Operation ID in NBO + * always zero (for alignment) */ - uint32_t op_id; - - /* Contenct starts here */ + uint16_t reserved; - uint16_t must_have_flags; - uint16_t must_not_have_flags; + /** + * The private key of the authority. + */ + struct GNUNET_CRYPTO_EccPrivateKey private_key; - GNUNET_HashCode zone; + /* followed by: + * name with length name_len + * serialized record data with rd_count records + */ }; -GNUNET_NETWORK_STRUCT_END + /** - * Ask for next result of zone iteration for the given operation + * Start monitoring a zone. */ -GNUNET_NETWORK_STRUCT_BEGIN -struct ZoneIterationNextMessage +struct ZoneMonitorStartMessage { /** - * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_ITERATION_NEXT + * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_MONITOR_START */ - struct GNUNET_MessageHeader header; + struct GNUNET_NAMESTORE_Header gns_header; /** - * Operation ID in NBO + * Zone key. */ - uint32_t op_id; + struct GNUNET_CRYPTO_EccPrivateKey zone; + }; -GNUNET_NETWORK_STRUCT_END /** - * Stop zone iteration for the given operation + * Start a zone iteration for the given zone */ -GNUNET_NETWORK_STRUCT_BEGIN -struct ZoneIterationStopMessage +struct ZoneIterationStartMessage { /** - * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_ITERATION_STOP + * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_ITERATION_START */ - struct GNUNET_MessageHeader header; + struct GNUNET_NAMESTORE_Header gns_header; /** - * Operation ID in NBO + * Zone key. All zeros for "all zones". */ - uint32_t op_id; + struct GNUNET_CRYPTO_EccPrivateKey zone; + }; -GNUNET_NETWORK_STRUCT_END + /** * Ask for next result of zone iteration for the given operation */ -GNUNET_NETWORK_STRUCT_BEGIN -struct ZoneIterationResponseMessage +struct ZoneIterationNextMessage { /** - * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_ITERATION_RESPONSE + * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_ITERATION_NEXT */ - struct GNUNET_MessageHeader header; + struct GNUNET_NAMESTORE_Header gns_header; +}; + +/** + * Stop zone iteration for the given operation + */ +struct ZoneIterationStopMessage +{ /** - * Operation ID in NBO + * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_ITERATION_STOP */ - uint32_t op_id; - - struct GNUNET_TIME_AbsoluteNBO expire; - - uint16_t name_len; + struct GNUNET_NAMESTORE_Header gns_header; +}; - uint16_t contains_sig; - /* Record data length */ - uint16_t rd_len; - -}; GNUNET_NETWORK_STRUCT_END