-licenses, dce, etc
[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  * @file gns/gns.h
22  * @brief IPC messages between GNS API and GNS service
23  * @author Martin Schanzenbach
24  */
25 #ifndef GNS_H
26 #define GNS_H
27
28 #include "gnunet_gns_service.h"
29
30 #define GNUNET_GNS_TLD "gads"
31 #define GNUNET_GNS_TLD_ZKEY "zkey"
32 #define GNUNET_GNS_TLD_PLUS "+"
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    * If use_default_zone is empty this zone is used for lookup
57    */
58   struct GNUNET_CRYPTO_ShortHashCode zone;
59
60   /**
61    * Only check cached results
62    */
63   uint32_t only_cached GNUNET_PACKED;
64
65   /**
66    * Should we look up in the default zone?
67    */
68   uint32_t use_default_zone GNUNET_PACKED;
69
70   /**
71    * Is a shorten key attached?
72    */
73   uint32_t have_key GNUNET_PACKED;
74
75   /**
76    * the type of record to look up
77    */
78   /* enum GNUNET_GNS_RecordType */ uint32_t type;
79
80   /* Followed by the key for shorten (optional) see have_key */
81
82   /* Followed by the name to look up */
83 };
84
85
86 /**
87  * Message from GNS service to client: new results.
88  */
89 struct GNUNET_GNS_ClientLookupResultMessage
90 {
91   /**
92     * Header of type GNUNET_MESSAGE_TYPE_GNS_CLIENT_RESULT
93    */
94   struct GNUNET_MessageHeader header;
95
96   /**
97    * Unique identifier for this request (for key collisions).
98    */
99   uint32_t id GNUNET_PACKED;
100
101   /**
102    * The number of records contained in response
103    */  
104   uint32_t rd_count;
105
106   /* followed by rd_count GNUNET_NAMESTORE_RecordData structs*/
107
108 };
109
110 /**
111  * Message from client to GNS service to shorten names.
112  */
113 struct GNUNET_GNS_ClientShortenMessage
114 {
115   /**
116     * Header of type GNUNET_MESSAGE_TYPE_GNS_CLIENT_SHORTEN
117    */
118   struct GNUNET_MessageHeader header;
119
120   /**
121    * Unique identifier for this request
122    */
123   uint32_t id GNUNET_PACKED;
124
125   /**
126    * If use_default_zone is empty this zone is used for lookup
127    */
128   struct GNUNET_CRYPTO_ShortHashCode zone;
129
130   /**
131    * Shorten zone
132    */
133   struct GNUNET_CRYPTO_ShortHashCode shorten_zone;
134
135   /**
136    * Private zone
137    */
138   struct GNUNET_CRYPTO_ShortHashCode private_zone;
139
140   /**
141    * Should we look up in the default zone?
142    */
143   uint32_t use_default_zone GNUNET_PACKED;
144   
145   /* Followed by the name to shorten up */
146 };
147
148
149 /**
150  * Message from GNS service to client: shorten result.
151  */
152 struct GNUNET_GNS_ClientShortenResultMessage
153 {
154   /**
155     * Header of type GNUNET_MESSAGE_TYPE_GNS_CLIENT_SHORTEN_RESULT
156    */
157   struct GNUNET_MessageHeader header;
158
159   /**
160    * Unique identifier for this request (for key collisions).
161    */
162   uint32_t id GNUNET_PACKED;
163
164   /* followed by the shortened name or '\0' for no result*/
165
166 };
167
168 /**
169  * Message from client to GNS service to lookup an authority of a name.
170  */
171 struct GNUNET_GNS_ClientGetAuthMessage
172 {
173   /**
174     * Header of type GNUNET_MESSAGE_TYPE_GNS_CLIENT_GET_AUTH
175    */
176   struct GNUNET_MessageHeader header;
177
178   /**
179    * Unique identifier for this request
180    */
181   uint32_t id GNUNET_PACKED;
182
183   /* Followed by the name to get authority for */
184 };
185
186
187 /**
188  * Message from GNS service to client: authority result.
189  */
190 struct GNUNET_GNS_ClientGetAuthResultMessage
191 {
192   /**
193     * Header of type GNUNET_MESSAGE_TYPE_GNS_CLIENT_GET_AUTH_RESULT
194    */
195   struct GNUNET_MessageHeader header;
196
197   /**
198    * Unique identifier for this request (for key collisions).
199    */
200   uint32_t id GNUNET_PACKED;
201
202   /* followed by the authority part of the name or '\0' for no result*/
203
204 };
205 GNUNET_NETWORK_STRUCT_END
206
207 #endif