49bfd9093143ab200f0c1ec5de0fcfddb081cb4b
[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   /**
138    * Shorten zone
139    */
140   struct GNUNET_CRYPTO_ShortHashCode shorten_zone;
141
142   /**
143    * Private zone
144    */
145   struct GNUNET_CRYPTO_ShortHashCode private_zone;
146   
147   /* Followed by the name to shorten up */
148 };
149
150
151 /**
152  * Message from GNS service to client: shorten result.
153  */
154 struct GNUNET_GNS_ClientShortenResultMessage
155 {
156   /**
157     * Header of type GNUNET_MESSAGE_TYPE_GNS_CLIENT_SHORTEN_RESULT
158    */
159   struct GNUNET_MessageHeader header;
160
161   /**
162    * Unique identifier for this request (for key collisions).
163    */
164   uint32_t id GNUNET_PACKED;
165
166   /* followed by the shortened name or '\0' for no result*/
167
168 };
169
170 /**
171  * Message from client to GNS service to lookup an authority of a name.
172  */
173 struct GNUNET_GNS_ClientGetAuthMessage
174 {
175   /**
176     * Header of type GNUNET_MESSAGE_TYPE_GNS_CLIENT_GET_AUTH
177    */
178   struct GNUNET_MessageHeader header;
179
180   /**
181    * Unique identifier for this request
182    */
183   uint32_t id GNUNET_PACKED;
184
185   /* Followed by the name to get authority for */
186 };
187
188
189 /**
190  * Message from GNS service to client: authority result.
191  */
192 struct GNUNET_GNS_ClientGetAuthResultMessage
193 {
194   /**
195     * Header of type GNUNET_MESSAGE_TYPE_GNS_CLIENT_GET_AUTH_RESULT
196    */
197   struct GNUNET_MessageHeader header;
198
199   /**
200    * Unique identifier for this request (for key collisions).
201    */
202   uint32_t id GNUNET_PACKED;
203
204   /* followed by the authority part of the name or '\0' for no result*/
205
206 };
207 GNUNET_NETWORK_STRUCT_END
208
209 #endif