80ebb128877be554fc4f3f0e3d5f12d68ee62188
[oweals/gnunet.git] / src / gns / gns.h
1 /*
2       This file is part of GNUnet
3       (C) 2012 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 2, 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 #include "gnunet_gns_service.h"
22
23 /**
24  * @file gns/gns.h
25  * @brief IPC messages between GNS API and GNS service
26  * @author Martin Schanzenbach
27  */
28 #ifndef GNS_H
29 #define GNS_H
30
31 #define GNUNET_GNS_TLD "gnunet"
32 #define GNUNET_GNS_TLD_ZKEY "zkey"
33 #define GNUNET_GNS_DHT_MAX_UPDATE_INTERVAL 3600
34
35 #define MAX_DNS_LABEL_LENGTH 63
36 #define MAX_DNS_NAME_LENGTH 253
37
38 GNUNET_NETWORK_STRUCT_BEGIN
39
40 /**
41  * Message from client to GNS service to lookup records.
42  */
43 struct GNUNET_GNS_ClientLookupMessage
44 {
45   /**
46     * Header of type GNUNET_MESSAGE_TYPE_GNS_CLIENT_LOOKUP
47    */
48   struct GNUNET_MessageHeader header;
49
50   /**
51    * Unique identifier for this request (for key collisions).
52    */
53   uint32_t id GNUNET_PACKED;
54
55   /**
56    * Should we look up in the default zone?
57    */
58   uint32_t use_default_zone GNUNET_PACKED;
59
60   /**
61    * If use_default_zone is empty this zone is used for lookup
62    */
63   struct GNUNET_CRYPTO_ShortHashCode zone;
64
65   /**
66    * Should we use a shorten zone?
67    */
68   uint32_t use_shorten_zone GNUNET_PACKED;
69
70   /**
71    * If use_shorten_zone is set use this zone for shortening
72    */
73   struct GNUNET_CRYPTO_ShortHashCode shorten_zone;
74
75   /**
76    * the type of record to look up
77    */
78   enum GNUNET_GNS_RecordType type;
79
80   /* Followed by the name to look up */
81 };
82
83
84 /**
85  * Message from GNS service to client: new results.
86  */
87 struct GNUNET_GNS_ClientLookupResultMessage
88 {
89   /**
90     * Header of type GNUNET_MESSAGE_TYPE_GNS_CLIENT_RESULT
91    */
92   struct GNUNET_MessageHeader header;
93
94   /**
95    * Unique identifier for this request (for key collisions).
96    */
97   uint32_t id GNUNET_PACKED;
98
99   /**
100    * The number of records contained in response
101    */  
102   uint32_t rd_count;
103
104   // FIXME: what format has a GNS_Record?
105   /* followed by rd_count GNUNET_NAMESTORE_RecordData structs*/
106
107 };
108
109 /**
110  * Message from client to GNS service to shorten names.
111  */
112 struct GNUNET_GNS_ClientShortenMessage
113 {
114   /**
115     * Header of type GNUNET_MESSAGE_TYPE_GNS_CLIENT_SHORTEN
116    */
117   struct GNUNET_MessageHeader header;
118
119   /**
120    * Unique identifier for this request
121    */
122   uint32_t id GNUNET_PACKED;
123
124   /**
125    * Should we look up in the default zone?
126    */
127   uint32_t use_default_zone GNUNET_PACKED;
128
129   /**
130    * If use_default_zone is empty this zone is used for lookup
131    */
132   struct GNUNET_CRYPTO_ShortHashCode zone;
133   
134   /**
135    * Should we use a shorten zone?
136    */
137   uint32_t use_shorten_zone GNUNET_PACKED;
138
139   /**
140    * If use_shorten_zone is set use this zone for shortening
141    */
142   struct GNUNET_CRYPTO_ShortHashCode shorten_zone;
143   
144   /* Followed by the name to shorten up */
145 };
146
147
148 /**
149  * Message from GNS service to client: shorten result.
150  */
151 struct GNUNET_GNS_ClientShortenResultMessage
152 {
153   /**
154     * Header of type GNUNET_MESSAGE_TYPE_GNS_CLIENT_SHORTEN_RESULT
155    */
156   struct GNUNET_MessageHeader header;
157
158   /**
159    * Unique identifier for this request (for key collisions).
160    */
161   uint32_t id GNUNET_PACKED;
162
163   /* followed by the shortened name or '\0' for no result*/
164
165 };
166
167 /**
168  * Message from client to GNS service to lookup an authority of a name.
169  */
170 struct GNUNET_GNS_ClientGetAuthMessage
171 {
172   /**
173     * Header of type GNUNET_MESSAGE_TYPE_GNS_CLIENT_GET_AUTH
174    */
175   struct GNUNET_MessageHeader header;
176
177   /**
178    * Unique identifier for this request
179    */
180   uint32_t id GNUNET_PACKED;
181
182   /* Followed by the name to get authority for */
183 };
184
185
186 /**
187  * Message from GNS service to client: authority result.
188  */
189 struct GNUNET_GNS_ClientGetAuthResultMessage
190 {
191   /**
192     * Header of type GNUNET_MESSAGE_TYPE_GNS_CLIENT_GET_AUTH_RESULT
193    */
194   struct GNUNET_MessageHeader header;
195
196   /**
197    * Unique identifier for this request (for key collisions).
198    */
199   uint32_t id GNUNET_PACKED;
200
201   /* followed by the authority part of the name or '\0' for no result*/
202
203 };
204 GNUNET_NETWORK_STRUCT_END
205
206 #endif