-ign
[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    * Only check cached results
57    */
58   uint32_t only_cached GNUNET_PACKED;
59
60   /**
61    * Should we look up in the default zone?
62    */
63   uint32_t use_default_zone GNUNET_PACKED;
64
65   /**
66    * Is a shorten key attached?
67    */
68   uint32_t have_key GNUNET_PACKED;
69
70   /**
71    * If use_default_zone is empty this zone is used for lookup
72    */
73   struct GNUNET_CRYPTO_ShortHashCode zone;
74
75   /**
76    * the type of record to look up
77    */
78   enum GNUNET_GNS_RecordType 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   // FIXME: what format has a GNS_Record?
107   /* followed by rd_count GNUNET_NAMESTORE_RecordData structs*/
108
109 };
110
111 /**
112  * Message from client to GNS service to shorten names.
113  */
114 struct GNUNET_GNS_ClientShortenMessage
115 {
116   /**
117     * Header of type GNUNET_MESSAGE_TYPE_GNS_CLIENT_SHORTEN
118    */
119   struct GNUNET_MessageHeader header;
120
121   /**
122    * Unique identifier for this request
123    */
124   uint32_t id GNUNET_PACKED;
125
126   /**
127    * Should we look up in the default zone?
128    */
129   uint32_t use_default_zone GNUNET_PACKED;
130
131   /**
132    * If use_default_zone is empty this zone is used for lookup
133    */
134   struct GNUNET_CRYPTO_ShortHashCode zone;
135   
136   /* Followed by the name to shorten up */
137 };
138
139
140 /**
141  * Message from GNS service to client: shorten result.
142  */
143 struct GNUNET_GNS_ClientShortenResultMessage
144 {
145   /**
146     * Header of type GNUNET_MESSAGE_TYPE_GNS_CLIENT_SHORTEN_RESULT
147    */
148   struct GNUNET_MessageHeader header;
149
150   /**
151    * Unique identifier for this request (for key collisions).
152    */
153   uint32_t id GNUNET_PACKED;
154
155   /* followed by the shortened name or '\0' for no result*/
156
157 };
158
159 /**
160  * Message from client to GNS service to lookup an authority of a name.
161  */
162 struct GNUNET_GNS_ClientGetAuthMessage
163 {
164   /**
165     * Header of type GNUNET_MESSAGE_TYPE_GNS_CLIENT_GET_AUTH
166    */
167   struct GNUNET_MessageHeader header;
168
169   /**
170    * Unique identifier for this request
171    */
172   uint32_t id GNUNET_PACKED;
173
174   /* Followed by the name to get authority for */
175 };
176
177
178 /**
179  * Message from GNS service to client: authority result.
180  */
181 struct GNUNET_GNS_ClientGetAuthResultMessage
182 {
183   /**
184     * Header of type GNUNET_MESSAGE_TYPE_GNS_CLIENT_GET_AUTH_RESULT
185    */
186   struct GNUNET_MessageHeader header;
187
188   /**
189    * Unique identifier for this request (for key collisions).
190    */
191   uint32_t id GNUNET_PACKED;
192
193   /* followed by the authority part of the name or '\0' for no result*/
194
195 };
196 GNUNET_NETWORK_STRUCT_END
197
198 #endif