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