X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fnamestore%2Fnamestore.h;h=a8851e104d6a54471c058e15a67121c4b2de0bf7;hb=61c39c60565b386e0e12ea669556b030e8cd7180;hp=27d36d78bfeee07dd3a45968ac3710961955cc08;hpb=8fb297a546b46ddb45e2b87b8d01a82e8f827ba7;p=oweals%2Fgnunet.git diff --git a/src/namestore/namestore.h b/src/namestore/namestore.h index 27d36d78b..a8851e104 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,81 +22,359 @@ * @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 MAX_NAME_LEN 256 GNUNET_NETWORK_STRUCT_BEGIN + /** - * Connect to namestore service + * Generic namestore message with op id */ -struct StartMessage +struct GNUNET_NAMESTORE_Header { - /** - * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_START + * header.type will be GNUNET_MESSAGE_TYPE_NAMESTORE_* + * header.size will be message size */ struct GNUNET_MessageHeader header; + /** + * Request ID in NBO + */ + uint32_t r_id GNUNET_PACKED; }; -GNUNET_NETWORK_STRUCT_END -GNUNET_NETWORK_STRUCT_BEGIN /** - * Generic namestore message with op id + * Lookup a block in the namestore */ -struct GenericMessage +struct LookupBlockMessage { /** - * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_* + * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_LOOKUP_BLOCK */ - struct GNUNET_MessageHeader header; + struct GNUNET_NAMESTORE_Header gns_header; /** - * Operation ID in NBO + * The query. */ - uint32_t op_id; + struct GNUNET_HashCode query GNUNET_PACKED; + }; -GNUNET_NETWORK_STRUCT_END -GNUNET_NETWORK_STRUCT_BEGIN + /** - * Connect to namestore service + * Lookup response */ -struct LookupNameMessage +struct LookupBlockResponseMessage { /** - * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_LOOKUP_NAME + * 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; + + /** + * Signature. + */ + struct GNUNET_CRYPTO_EccSignature signature; /** - * Operation ID in NBO + * Derived public key. */ - uint32_t op_id; + struct GNUNET_CRYPTO_EccPublicSignKey derived_key; + + /* follwed by encrypted block data */ }; -GNUNET_NETWORK_STRUCT_END -GNUNET_NETWORK_STRUCT_BEGIN -struct LookupNameResponseMessage +/** + * Cache a record in the namestore. + */ +struct BlockCacheMessage { /** - * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_LOOKUP_NAME_RESPONSE + * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_BLOCK_CACHE */ - struct GNUNET_MessageHeader header; + struct GNUNET_NAMESTORE_Header gns_header; + + /** + * Expiration time + */ + struct GNUNET_TIME_AbsoluteNBO expire; + + /** + * Signature. + */ + struct GNUNET_CRYPTO_EccSignature signature; + + /** + * Derived public key. + */ + struct GNUNET_CRYPTO_EccPublicSignKey derived_key; + + /* follwed by encrypted block data */ +}; + + +/** + * Response to a request to cache a block. + */ +struct BlockCacheResponseMessage +{ + /** + * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_BLOCK_CACHE_RESPONSE + */ + struct GNUNET_NAMESTORE_Header gns_header; + + /** + * #GNUNET_OK on success, #GNUNET_SYSERR error + */ + int32_t op_result GNUNET_PACKED; +}; + + +/** + * Store a record to the namestore (as authority). + */ +struct RecordStoreMessage +{ + /** + * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_STORE + */ + struct GNUNET_NAMESTORE_Header gns_header; + + /** + * Expiration time + */ + struct GNUNET_TIME_AbsoluteNBO expire; + + /** + * Name length + */ + uint16_t name_len GNUNET_PACKED; + + /** + * Length of serialized record data + */ + uint16_t rd_len GNUNET_PACKED; + + /** + * Number of records contained + */ + uint16_t rd_count GNUNET_PACKED; + + /** + * always zero (for alignment) + */ + uint16_t reserved GNUNET_PACKED; /** - * Operation ID in NBO + * The private key of the authority. + */ + struct GNUNET_CRYPTO_EccPrivateKey private_key; + + /* followed by: + * name with length name_len + * serialized record data with rd_count records + */ +}; + + +/** + * Response to a record storage request. + */ +struct RecordStoreResponseMessage +{ + /** + * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_STORE_RESPONSE + */ + struct GNUNET_NAMESTORE_Header gns_header; + + /** + * #GNUNET_SYSERR on failure, #GNUNET_OK on success + */ + int32_t op_result GNUNET_PACKED; +}; + + + +/** + * Lookup a name for a zone hash + */ +struct ZoneToNameMessage +{ + /** + * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_TO_NAME + */ + struct GNUNET_NAMESTORE_Header gns_header; + + /** + * The private key of the zone to look up in + */ + struct GNUNET_CRYPTO_EccPrivateKey zone; + + /** + * The public key of the target zone + */ + struct GNUNET_CRYPTO_EccPublicSignKey value_zone; +}; + + +/** + * Respone for zone to name lookup + */ +struct ZoneToNameResponseMessage +{ + /** + * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_TO_NAME_RESPONSE + */ + struct GNUNET_NAMESTORE_Header gns_header; + + /** + * Length of the name + */ + uint16_t name_len GNUNET_PACKED; + + /** + * Length of serialized record data + */ + uint16_t rd_len GNUNET_PACKED; + + /** + * Number of records contained + */ + uint16_t rd_count GNUNET_PACKED; + + /** + * result in NBO: #GNUNET_OK on success, #GNUNET_NO if there were no + * results, #GNUNET_SYSERR on error + */ + int16_t res GNUNET_PACKED; + + /** + * The private key of the zone that contained the name. + */ + struct GNUNET_CRYPTO_EccPrivateKey zone; + + /* followed by: + * name with length name_len + * serialized record data with rd_count records + */ + +}; + + +/** + * Record is returned from the namestore (as authority). + */ +struct RecordResultMessage +{ + /** + * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_RESULT + */ + struct GNUNET_NAMESTORE_Header gns_header; + + /** + * Name length + */ + uint16_t name_len GNUNET_PACKED; + + /** + * Length of serialized record data + */ + uint16_t rd_len GNUNET_PACKED; + + /** + * Number of records contained + */ + uint16_t rd_count GNUNET_PACKED; + + /** + * always zero (for alignment) + */ + uint16_t reserved GNUNET_PACKED; + + /** + * The private key of the authority. + */ + struct GNUNET_CRYPTO_EccPrivateKey private_key; + + /* followed by: + * name with length name_len + * serialized record data with rd_count records + */ +}; + + +/** + * Start monitoring a zone. + */ +struct ZoneMonitorStartMessage +{ + /** + * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_MONITOR_START + */ + struct GNUNET_NAMESTORE_Header gns_header; + + /** + * Zone key. + */ + struct GNUNET_CRYPTO_EccPrivateKey zone; + +}; + + +/** + * Start a zone iteration for the given zone + */ +struct ZoneIterationStartMessage +{ + /** + * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_ITERATION_START + */ + struct GNUNET_NAMESTORE_Header gns_header; + + /** + * Zone key. All zeros for "all zones". + */ + struct GNUNET_CRYPTO_EccPrivateKey zone; + +}; + + +/** + * Ask for next result of zone iteration for the given operation + */ +struct ZoneIterationNextMessage +{ + /** + * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_ITERATION_NEXT + */ + struct GNUNET_NAMESTORE_Header gns_header; +}; + + +/** + * Stop zone iteration for the given operation + */ +struct ZoneIterationStopMessage +{ + /** + * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_ITERATION_STOP */ - uint32_t op_id; + struct GNUNET_NAMESTORE_Header gns_header; };