X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fnamestore%2Fnamestore.h;h=ec7f2870401b8a78acc83b483c03d7d1d4a0a29b;hb=90c803401e6dbe336c6469ff874b0005e7a2f163;hp=7245e163195c7946dcfb58542c3196443bfe3e23;hpb=039d3555ffc5b7f5174dddb1a93399b1fb64aa13;p=oweals%2Fgnunet.git diff --git a/src/namestore/namestore.h b/src/namestore/namestore.h index 7245e1631..ec7f28704 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) + Copyright (C) 2011-2013 GNUnet e.V. GNUnet is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published @@ -14,14 +14,15 @@ You should have received a copy of the GNU General Public License along with GNUnet; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. + Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ /** * @file namestore/namestore.h * @brief common internal definitions for namestore service * @author Matthias Wachs + * @author Christian Grothoff */ #ifndef NAMESTORE_H #define NAMESTORE_H @@ -33,51 +34,6 @@ GNUNET_NETWORK_STRUCT_BEGIN - -/** - * A GNS record serialized for network transmission. - * - * Layout is [struct GNUNET_NAMESTORE_NetworkRecord][char[data_size] data] - */ -struct GNUNET_NAMESTORE_NetworkRecord -{ - /** - * 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. - */ - uint32_t record_type; - - /** - * Flags for the record. - */ - uint32_t flags; -}; - - - -/** - * Connect to namestore service. FIXME: UNNECESSARY. - */ -struct StartMessage -{ - - /** - * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_START - */ - struct GNUNET_MessageHeader header; - -}; - - /** * Generic namestore message with op id */ @@ -92,43 +48,17 @@ struct GNUNET_NAMESTORE_Header /** * Request ID in NBO */ - uint32_t r_id; + uint32_t r_id GNUNET_PACKED; }; /** - * Lookup a name in the namestore + * Store a record to the namestore (as authority). */ -struct LookupNameMessage +struct RecordStoreMessage { - struct GNUNET_NAMESTORE_Header gns_header; - /** - * The zone - */ - struct GNUNET_CRYPTO_ShortHashCode zone; - - /** - * Requested record type - */ - uint32_t record_type; - - /** - * Length of the name - */ - uint32_t name_len; - - /* 0-terminated name here */ -}; - - -/** - * Lookup response - */ -struct LookupNameResponseMessage -{ - /** - * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_LOOKUP_NAME_RESPONSE + * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_STORE */ struct GNUNET_NAMESTORE_Header gns_header; @@ -140,234 +70,227 @@ struct LookupNameResponseMessage /** * Name length */ - uint16_t name_len; + uint16_t name_len GNUNET_PACKED; /** - * Bytes of serialized record data + * Length of serialized record data */ - uint16_t rd_len; + uint16_t rd_len GNUNET_PACKED; /** * Number of records contained */ - uint16_t rd_count; + uint16_t rd_count GNUNET_PACKED; /** - * Is the signature valid - * GNUNET_YES or GNUNET_NO + * always zero (for alignment) */ - int16_t contains_sig; + uint16_t reserved GNUNET_PACKED; /** - * All zeros if 'contains_sig' is GNUNET_NO. + * The private key of the authority. */ - struct GNUNET_CRYPTO_EccSignature signature; + struct GNUNET_CRYPTO_EcdsaPrivateKey private_key; - /** - * The public key for the name + /* followed by: + * name with length name_len + * serialized record data with rd_count records */ - struct GNUNET_CRYPTO_EccPublicKeyBinaryEncoded public_key; - - /* 0-terminated name and serialized record data */ - /* rd_len bytes serialized record data */ }; /** - * Put a record to the namestore + * Response to a record storage request. */ -struct RecordPutMessage +struct RecordStoreResponseMessage { /** - * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_LOOKUP_RECORD_PUT + * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_STORE_RESPONSE */ struct GNUNET_NAMESTORE_Header gns_header; /** - * Expiration time + * #GNUNET_SYSERR on failure, #GNUNET_OK on success */ - struct GNUNET_TIME_AbsoluteNBO expire; + int32_t op_result GNUNET_PACKED; +}; - /** - * Name length - */ - uint16_t name_len; - - /** - * Length of serialized record data - */ - uint16_t rd_len; +/** + * Lookup a label + */ +struct LabelLookupMessage +{ /** - * Number of records contained + * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_LOOKUP */ - uint16_t rd_count; + struct GNUNET_NAMESTORE_Header gns_header; /** - * always zero (for alignment) + * Length of the name */ - uint16_t reserved; + uint32_t label_len GNUNET_PACKED; /** - * The signature + * The private key of the zone to look up in */ - struct GNUNET_CRYPTO_EccSignature signature; + struct GNUNET_CRYPTO_EcdsaPrivateKey zone; - /** - * The public key + /* followed by: + * name with length name_len */ - struct GNUNET_CRYPTO_EccPublicKeyBinaryEncoded public_key; - - /* name (0-terminated) followed by "rd_count" serialized records */ - }; /** - * Put a record to the namestore response + * Lookup a label */ -struct RecordPutResponseMessage +struct LabelLookupResponseMessage { /** - * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_PUT_RESPONSE + * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_LOOKUP_RESPONSE */ struct GNUNET_NAMESTORE_Header gns_header; /** - * result: - * GNUNET_SYSERR on failure - * GNUNET_OK on success - */ - int32_t op_result; -}; - - -/** - * Create a record and put it to the namestore - * Memory layout: - */ -struct RecordCreateMessage -{ - /** - * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_CREATE + * Name length */ - struct GNUNET_NAMESTORE_Header gns_header; - - struct GNUNET_TIME_AbsoluteNBO expire; + uint16_t name_len GNUNET_PACKED; /** - * Name length + * Length of serialized record data */ - uint16_t name_len; + uint16_t rd_len GNUNET_PACKED; /** - * Length of serialized record data + * Number of records contained */ - uint16_t rd_len; + uint16_t rd_count GNUNET_PACKED; /** - * Record count + * Was the label found in the database?? + * GNUNET_YES or GNUNET_NO */ - uint16_t rd_count; + uint16_t found GNUNET_PACKED; /** - * private key length + * The private key of the authority. */ - uint16_t pkey_len; + struct GNUNET_CRYPTO_EcdsaPrivateKey private_key; /* followed by: - * GNUNET_CRYPTO_EccPrivateKeyBinaryEncoded private key with length pkey_len * name with length name_len - * serialized record data with length rd_len - * */ + * serialized record data with rd_count records + */ }; + /** - * Create a record to the namestore response + * Lookup a name for a zone hash */ -struct RecordCreateResponseMessage +struct ZoneToNameMessage { /** - * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_CREATE_RESPONSE + * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_TO_NAME */ struct GNUNET_NAMESTORE_Header gns_header; /** - * name length: GNUNET_NO already exists, GNUNET_YES on success, GNUNET_SYSERR error + * The private key of the zone to look up in */ - int32_t op_result; + struct GNUNET_CRYPTO_EcdsaPrivateKey zone; + + /** + * The public key of the target zone + */ + struct GNUNET_CRYPTO_EcdsaPublicKey value_zone; }; /** - * Lookup a name for a zone hash + * Respone for zone to name lookup */ -struct ZoneToNameMessage +struct ZoneToNameResponseMessage { /** - * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_TO_NAME + * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_TO_NAME_RESPONSE */ struct GNUNET_NAMESTORE_Header gns_header; /** - * The hash of public key of the zone to look up in + * 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 */ - struct GNUNET_CRYPTO_ShortHashCode zone; + int16_t res GNUNET_PACKED; /** - * The hash of the public key of the target zone + * The private key of the zone that contained the name. + */ + struct GNUNET_CRYPTO_EcdsaPrivateKey zone; + + /* followed by: + * name with length name_len + * serialized record data with rd_count records */ - struct GNUNET_CRYPTO_ShortHashCode value_zone; + }; /** - * Respone for zone to name lookup + * Record is returned from the namestore (as authority). */ -struct ZoneToNameResponseMessage +struct RecordResultMessage { /** - * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_TO_NAME_RESPONSE + * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_RESULT */ struct GNUNET_NAMESTORE_Header gns_header; /** - * Record block expiration - */ - struct GNUNET_TIME_AbsoluteNBO expire; - - /** - * Length of the name + * Name length */ - uint16_t name_len; + uint16_t name_len GNUNET_PACKED; /** * Length of serialized record data */ - uint16_t rd_len; + uint16_t rd_len GNUNET_PACKED; /** * Number of records contained */ - uint16_t rd_count; + uint16_t rd_count GNUNET_PACKED; /** - * result in NBO: GNUNET_OK on success, GNUNET_NO if there were no - * results, GNUNET_SYSERR on error + * always zero (for alignment) */ - int16_t res; + uint16_t reserved GNUNET_PACKED; /** - * Signature + * The private key of the authority. */ - struct GNUNET_CRYPTO_EccSignature signature; + struct GNUNET_CRYPTO_EcdsaPrivateKey private_key; - /** - * Publik key + /* followed by: + * name with length name_len + * serialized record data with rd_count records */ - struct GNUNET_CRYPTO_EccPublicKeyBinaryEncoded zone_key; - }; @@ -377,20 +300,20 @@ struct ZoneToNameResponseMessage struct ZoneMonitorStartMessage { /** - * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_MONITOR_START + * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_MONITOR_START */ - struct GNUNET_NAMESTORE_Header gns_header; + struct GNUNET_MessageHeader header; /** - * Zone hash + * #GNUNET_YES to first iterate over all records, + * #GNUNET_NO to only monitor changes.o */ - struct GNUNET_CRYPTO_ShortHashCode zone; + uint32_t iterate_first GNUNET_PACKED; /** - * All zones. GNUNET_YES to monitor all zones, - * GNUNET_NO to only monitor 'zone'. In NBO. + * Zone key. */ - uint32_t all_zones GNUNET_PACKED; + struct GNUNET_CRYPTO_EcdsaPrivateKey zone; }; @@ -401,24 +324,15 @@ struct ZoneMonitorStartMessage struct ZoneIterationStartMessage { /** - * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_ITERATION_START + * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_ITERATION_START */ struct GNUNET_NAMESTORE_Header gns_header; /** - * Zone hash - */ - struct GNUNET_CRYPTO_ShortHashCode zone; - - /** - * Which flags must be included + * Zone key. All zeros for "all zones". */ - uint16_t must_have_flags; + struct GNUNET_CRYPTO_EcdsaPrivateKey zone; - /** - * Which flags must not be included - */ - uint16_t must_not_have_flags; }; @@ -428,7 +342,7 @@ struct ZoneIterationStartMessage struct ZoneIterationNextMessage { /** - * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_ITERATION_NEXT + * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_ITERATION_NEXT */ struct GNUNET_NAMESTORE_Header gns_header; }; @@ -440,7 +354,7 @@ struct ZoneIterationNextMessage struct ZoneIterationStopMessage { /** - * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_ITERATION_STOP + * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_ITERATION_STOP */ struct GNUNET_NAMESTORE_Header gns_header; };