03b4bb45a75f46c1be97b49071ba4446ab03bde6
[oweals/gnunet.git] / src / namestore / namestore.h
1 /*
2      This file is part of GNUnet.
3      (C) 2009 Christian Grothoff (and other contributing authors)
4
5      GNUnet is free software; you can redistribute it and/or modify
6      it under the terms of the GNU General Public License as published
7      by the Free Software Foundation; either version 3, or (at your
8      option) any later version.
9
10      GNUnet is distributed in the hope that it will be useful, but
11      WITHOUT ANY WARRANTY; without even the implied warranty of
12      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13      General Public License for more details.
14
15      You should have received a copy of the GNU General Public License
16      along with GNUnet; see the file COPYING.  If not, write to the
17      Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18      Boston, MA 02111-1307, USA.
19 */
20
21 /**
22  * @file namestore/namestore.h
23  * @brief common internal definitions for namestore service
24  * @author Matthias Wachs
25  */
26 #ifndef NAMESTORE_H
27 #define NAMESTORE_H
28
29 /*
30  * Collect message types here, move to protocols later
31  */
32 #define GNUNET_MESSAGE_TYPE_NAMESTORE_LOOKUP_NAME 431
33 #define GNUNET_MESSAGE_TYPE_NAMESTORE_LOOKUP_NAME_RESPONSE 432
34 #define GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_PUT 433
35 #define GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_PUT_RESPONSE 434
36
37 GNUNET_NETWORK_STRUCT_BEGIN
38 /**
39  * Connect to namestore service
40  */
41 struct StartMessage
42 {
43
44   /**
45    * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_START
46    */
47   struct GNUNET_MessageHeader header;
48
49 };
50 GNUNET_NETWORK_STRUCT_END
51
52
53 GNUNET_NETWORK_STRUCT_BEGIN
54 /**
55  * Generic namestore message with op id
56  */
57 struct GenericMessage
58 {
59   /**
60    * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_*
61    */
62   struct GNUNET_MessageHeader header;
63
64   /**
65    * Operation ID in NBO
66    */
67   uint32_t op_id;
68 };
69 GNUNET_NETWORK_STRUCT_END
70
71
72 /**
73  * Connect to namestore service
74  */
75 GNUNET_NETWORK_STRUCT_BEGIN
76 struct LookupNameMessage
77 {
78   /**
79    * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_LOOKUP_NAME
80    */
81   struct GNUNET_MessageHeader header;
82
83   /**
84    * Operation ID in NBO
85    */
86   uint32_t op_id;
87
88   /* The zone */
89   GNUNET_HashCode zone;
90
91   /* Requested record type */
92   uint32_t record_type;
93
94   /* Requested record type */
95   uint32_t name_len;
96 };
97 GNUNET_NETWORK_STRUCT_END
98
99
100 /**
101  * Lookup response
102  * Memory layout:
103  * [struct LookupNameResponseMessage][struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded][char *name][rc_count * struct GNUNET_NAMESTORE_RecordData][struct GNUNET_CRYPTO_RsaSignature]
104  */
105 GNUNET_NETWORK_STRUCT_BEGIN
106 struct LookupNameResponseMessage
107 {
108   /**
109    * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_LOOKUP_NAME_RESPONSE
110    */
111   struct GNUNET_MessageHeader header;
112
113   /**
114    * Operation ID in NBO
115    */
116   uint32_t op_id;
117
118   struct GNUNET_TIME_AbsoluteNBO expire;
119
120   uint16_t name_len;
121
122   uint16_t contains_sig;
123
124   /* Requested record type */
125   uint32_t rc_count;
126 };
127 GNUNET_NETWORK_STRUCT_END
128
129
130 /**
131  * Put a record to the namestore
132  * Memory layout:
133  * [struct RecordPutMessage][struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded][char *name][rc_count * struct GNUNET_NAMESTORE_RecordData]
134  */
135 GNUNET_NETWORK_STRUCT_BEGIN
136 struct RecordPutMessage
137 {
138   /**
139    * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_LOOKUP_RECORD_PUT
140    */
141   struct GNUNET_MessageHeader header;
142
143   /**
144    * Operation ID in NBO
145    */
146   uint32_t op_id;
147
148   /* Contenct starts here */
149
150   /* name length */
151   uint16_t name_len;
152
153   /* Requested record type */
154   uint32_t rd_count;
155
156   struct GNUNET_TIME_AbsoluteNBO expire;
157
158   struct GNUNET_CRYPTO_RsaSignature signature;
159 };
160 GNUNET_NETWORK_STRUCT_END
161
162 /**
163  * Put a record to the namestore
164  * Memory layout:
165  * [struct RecordPutMessage][struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded][char *name][rc_count * struct GNUNET_NAMESTORE_RecordData]
166  */
167 GNUNET_NETWORK_STRUCT_BEGIN
168 struct RecordPutResponseMessage
169 {
170   /**
171    * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_PUT_RESPONSE
172    */
173   struct GNUNET_MessageHeader header;
174
175   /**
176    * Operation ID in NBO
177    */
178   uint32_t op_id;
179
180   /* Contenct starts here */
181
182   /**
183    *  name length: GNUNET_NO (0) on error, GNUNET_OK (1) on success
184    */
185   uint16_t op_result;
186 };
187 GNUNET_NETWORK_STRUCT_END
188
189
190
191 /* end of namestore.h */
192 #endif