X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fnamestore%2Fnamestore.h;h=ec7f2870401b8a78acc83b483c03d7d1d4a0a29b;hb=90c803401e6dbe336c6469ff874b0005e7a2f163;hp=c34422e13cfbdb496c77355a789268705f70fff3;hpb=dcfa706003e24e7893a8db3d94d5597a4c4829c9;p=oweals%2Fgnunet.git diff --git a/src/namestore/namestore.h b/src/namestore/namestore.h index c34422e13..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,401 +14,325 @@ 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 -/* - * Collect message types here, move to protocols later - */ -#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_TO_NAME 439 -#define GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_TO_NAME_RESPONSE 440 - -#define GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_ITERATION_START 445 -#define GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_ITERATION_RESPONSE 446 -#define GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_ITERATION_NEXT 447 -#define GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_ITERATION_STOP 448 -#define GNUNET_MESSAGE_TYPE_NAMESTORE_DISCONNECT 449 - -/** - * Sign name and records - * - * @param key the private key - * @param name the name - * @param rd record data - * @param rd_count number of records - * - * @return the signature - */ -struct GNUNET_CRYPTO_RsaSignature * -GNUNET_NAMESTORE_create_signature (const struct GNUNET_CRYPTO_RsaPrivateKey *key, const char *name, struct GNUNET_NAMESTORE_RecordData *rd, unsigned int rd_count); - /** - * Compares if two records are equal - * - * @param a record - * @param b record - * - * @return GNUNET_YES or GNUNET_NO + * Maximum length of any name, including 0-termination. */ -int -GNUNET_NAMESTORE_records_cmp (const struct GNUNET_NAMESTORE_RecordData *a, - const struct GNUNET_NAMESTORE_RecordData *b); +#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_PACKED; }; - /** - * Connect to namestore service. FIXME: UNNECESSARY. + * Store a record to the namestore (as authority). */ -struct StartMessage +struct RecordStoreMessage { - /** - * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_START + * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_STORE */ - struct GNUNET_MessageHeader header; - -}; + struct GNUNET_NAMESTORE_Header gns_header; -/** - * Connect to namestore service. FIXME: UNNECESSARY. - */ -struct DisconnectMessage -{ + /** + * Expiration time + */ + struct GNUNET_TIME_AbsoluteNBO expire; /** - * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_DISCONNECT + * Name length */ - struct GNUNET_MessageHeader header; + uint16_t name_len GNUNET_PACKED; /** - * Drop namestore? - * GNUNET_YES or _NO in NBO + * Length of serialized record data */ - uint32_t drop; -}; + uint16_t rd_len GNUNET_PACKED; + /** + * Number of records contained + */ + uint16_t rd_count GNUNET_PACKED; -/** - * Generic namestore message with op id - */ -struct GNUNET_NAMESTORE_Header -{ /** - * header.type will be GNUNET_MESSAGE_TYPE_NAMESTORE_* - * header.size will be message size + * always zero (for alignment) */ - struct GNUNET_MessageHeader header; + uint16_t reserved GNUNET_PACKED; /** - * Request ID in NBO + * The private key of the authority. + */ + struct GNUNET_CRYPTO_EcdsaPrivateKey private_key; + + /* followed by: + * name with length name_len + * serialized record data with rd_count records */ - uint32_t r_id; }; /** - * Connect to namestore service + * Response to a record storage request. */ -struct LookupNameMessage +struct RecordStoreResponseMessage { + /** + * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_STORE_RESPONSE + */ struct GNUNET_NAMESTORE_Header gns_header; - /* The zone */ - GNUNET_HashCode zone; - - /* Requested record type */ - uint32_t record_type; - - /* Requested record type */ - uint32_t name_len; + /** + * #GNUNET_SYSERR on failure, #GNUNET_OK on success + */ + int32_t op_result GNUNET_PACKED; }; /** - * Lookup response - * Memory layout: - * [struct LookupNameResponseMessage][struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded][char *name][rc_count * struct GNUNET_NAMESTORE_RecordData][struct GNUNET_CRYPTO_RsaSignature] + * Lookup a label */ -struct LookupNameResponseMessage +struct LabelLookupMessage { /** - * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_LOOKUP_NAME_RESPONSE + * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_LOOKUP */ struct GNUNET_NAMESTORE_Header gns_header; - struct GNUNET_TIME_AbsoluteNBO expire; - - uint16_t name_len; - - uint16_t rd_len; - - uint16_t rd_count; + /** + * Length of the name + */ + uint32_t label_len GNUNET_PACKED; - int32_t contains_sig; + /** + * The private key of the zone to look up in + */ + struct GNUNET_CRYPTO_EcdsaPrivateKey zone; - /* Requested record type */ + /* followed by: + * name with length name_len + */ }; /** - * Put a record to the namestore - * Memory layout: - * [struct RecordPutMessage][struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded][char *name][rc_count * struct GNUNET_NAMESTORE_RecordData] + * Lookup a label */ -struct RecordPutMessage +struct LabelLookupResponseMessage { /** - * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_LOOKUP_RECORD_PUT + * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_LOOKUP_RESPONSE */ struct GNUNET_NAMESTORE_Header gns_header; - /* Contenct starts here */ - - /* name length */ - uint16_t name_len; - - /* Length of serialized rd data */ - uint16_t rd_len; - - /* Number of records contained */ - uint16_t rd_count; - - /* Length of pubkey */ - uint16_t key_len; - - struct GNUNET_TIME_AbsoluteNBO expire; - - struct GNUNET_CRYPTO_RsaSignature signature; -}; - + /** + * Name length + */ + uint16_t name_len GNUNET_PACKED; -/** - * Put a record to the namestore response - */ -struct RecordPutResponseMessage -{ /** - * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_PUT_RESPONSE + * Length of serialized record data */ - struct GNUNET_MessageHeader header; + uint16_t rd_len GNUNET_PACKED; /** - * Operation ID in NBO + * Number of records contained */ - uint32_t op_id; + uint16_t rd_count GNUNET_PACKED; - /* Contenct starts here */ + /** + * Was the label found in the database?? + * GNUNET_YES or GNUNET_NO + */ + uint16_t found GNUNET_PACKED; /** - * name length: GNUNET_NO (0) on error, GNUNET_OK (1) on success + * The private key of the authority. + */ + struct GNUNET_CRYPTO_EcdsaPrivateKey private_key; + + /* followed by: + * name with length name_len + * serialized record data with rd_count records */ - uint16_t op_result; }; + /** - * 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 */ -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_NAMESTORE_Header gns_header; - /* Contenct starts here */ - - /* name length */ - uint16_t name_len; - - /* Record data length */ - uint16_t rd_len; - - /* Record count */ - uint16_t rd_count; + /** + * The private key of the zone to look up in + */ + struct GNUNET_CRYPTO_EcdsaPrivateKey zone; - /* private key length */ - uint16_t pkey_len; + /** + * The public key of the target zone + */ + struct GNUNET_CRYPTO_EcdsaPublicKey value_zone; }; /** - * Create a record to the namestore response - * Memory layout: + * Respone for zone to name lookup */ -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_NAMESTORE_Header gns_header; - /* Contenct starts here */ - /** - * name length: GNUNET_NO already existsw, GNUNET_YES on success, GNUNET_SYSERR error + * Length of the name */ - int16_t op_result; - + uint16_t name_len GNUNET_PACKED; -}; - - -/** - * Remove a record from the namestore - * Memory layout: - * [struct RecordRemoveMessage][char *name][struct GNUNET_NAMESTORE_RecordData] - */ -struct RecordRemoveMessage -{ /** - * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_REMOVE + * Length of serialized record data */ - struct GNUNET_NAMESTORE_Header gns_header; + uint16_t rd_len GNUNET_PACKED; - /* Contenct starts here */ + /** + * Number of records contained + */ + uint16_t rd_count GNUNET_PACKED; - /* Name length */ - uint16_t name_len; + /** + * result in NBO: #GNUNET_OK on success, #GNUNET_NO if there were no + * results, #GNUNET_SYSERR on error + */ + int16_t res GNUNET_PACKED; - /* Length of serialized rd data */ - uint16_t rd_len; + /** + * The private key of the zone that contained the name. + */ + struct GNUNET_CRYPTO_EcdsaPrivateKey zone; - /* Number of records contained */ - uint16_t rd_count; + /* followed by: + * name with length name_len + * serialized record data with rd_count records + */ - /* Length of pubkey */ - uint16_t key_len; }; /** - * Remove a record from the namestore response + * Record is returned from the namestore (as authority). */ -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_NAMESTORE_Header gns_header; - /* Contenct starts here */ + /** + * Name length + */ + uint16_t name_len GNUNET_PACKED; /** - * result: - * 0 : successful - * 1 : no records for entry - * 2 : Could not find record to remove - * 3 : Failed to create new signature - * 4 : Failed to put new set of records in database + * Length of serialized record data */ - uint16_t op_result; -}; + uint16_t rd_len GNUNET_PACKED; + /** + * Number of records contained + */ + uint16_t rd_count GNUNET_PACKED; -/** - * Connect to namestore service - */ -struct ZoneToNameMessage -{ - struct GNUNET_NAMESTORE_Header gns_header; + /** + * always zero (for alignment) + */ + uint16_t reserved GNUNET_PACKED; - /* The hash of public key of the zone to look up in */ - GNUNET_HashCode zone; + /** + * The private key of the authority. + */ + struct GNUNET_CRYPTO_EcdsaPrivateKey private_key; - /* The hash of the public key of the target zone */ - GNUNET_HashCode value_zone; + /* followed by: + * name with length name_len + * serialized record data with rd_count records + */ }; + /** - * Connect to namestore service + * Start monitoring a zone. */ -struct ZoneToNameResponseMessage +struct ZoneMonitorStartMessage { - struct GNUNET_NAMESTORE_Header gns_header; - - struct GNUNET_TIME_AbsoluteNBO expire; - - uint16_t name_len; - - uint16_t rd_len; - - uint16_t rd_count; - - int32_t contains_sig; + /** + * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_MONITOR_START + */ + struct GNUNET_MessageHeader header; - /* result in NBO: GNUNET_OK on success, GNUNET_NO if there were no results, GNUNET_SYSERR on error */ - int16_t res; + /** + * #GNUNET_YES to first iterate over all records, + * #GNUNET_NO to only monitor changes.o + */ + uint32_t iterate_first GNUNET_PACKED; - struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded zone_key; + /** + * Zone key. + */ + struct GNUNET_CRYPTO_EcdsaPrivateKey zone; }; - /** * Start a zone iteration for the given zone */ 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; - /* Contenct starts here */ - - uint16_t must_have_flags; - uint16_t must_not_have_flags; + /** + * Zone key. All zeros for "all zones". + */ + struct GNUNET_CRYPTO_EcdsaPrivateKey zone; - GNUNET_HashCode zone; }; @@ -418,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; }; @@ -430,31 +354,12 @@ 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; }; -/** - * Ask for next result of zone iteration for the given operation - */ -struct ZoneIterationResponseMessage -{ - /** - * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_ITERATION_RESPONSE - */ - struct GNUNET_NAMESTORE_Header gns_header; - - struct GNUNET_TIME_AbsoluteNBO expire; - uint16_t name_len; - - uint16_t contains_sig; - - /* Record data length */ - uint16_t rd_len; - -}; GNUNET_NETWORK_STRUCT_END