hxing
[oweals/gnunet.git] / src / core / gnunet-service-core.h
1 /*
2      This file is part of GNUnet.
3      (C) 2009, 2010, 2011 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 3, 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 /**
22  * @file core/gnunet-service-core.h
23  * @brief Globals for gnunet-service-core
24  * @author Christian Grothoff
25  */
26 #ifndef GNUNET_SERVICE_CORE_H
27 #define GNUNET_SERVICE_CORE_H
28
29 #include "gnunet_statistics_service.h"
30
31
32 #define DEBUG_CORE GNUNET_EXTRA_LOGGING
33
34 /**
35  * Opaque handle to a client.
36  */
37 struct GSC_Client;
38
39
40 /**
41  * Record kept for each request for transmission issued by a
42  * client that is still pending. (This struct is used by 
43  * both the 'CLIENTS' and 'SESSIONS' subsystems.)
44  */
45 struct GSC_ClientActiveRequest
46 {
47
48   /**
49    * Active requests are kept in a doubly-linked list of
50    * the respective target peer.
51    */
52   struct GSC_ClientActiveRequest *next;
53
54   /**
55    * Active requests are kept in a doubly-linked list of
56    * the respective target peer.
57    */
58   struct GSC_ClientActiveRequest *prev;
59
60   /**
61    * Which peer is the message going to be for?
62    */
63   struct GNUNET_PeerIdentity target;
64
65   /**
66    * Handle to the client.
67    */
68   struct GSC_Client *client_handle;
69
70   /**
71    * By what time would the client want to see this message out?
72    */
73   struct GNUNET_TIME_Absolute deadline;
74
75   /**
76    * How important is this request.
77    */
78   uint32_t priority;
79
80   /**
81    * Has this request been solicited yet?
82    */
83   int was_solicited;
84
85   /**
86    * How many bytes does the client intend to send?
87    */
88   uint16_t msize;
89
90   /**
91    * Unique request ID (in big endian).
92    */
93   uint16_t smr_id;
94
95 };
96
97
98 /**
99  * Our configuration.
100  */
101 extern const struct GNUNET_CONFIGURATION_Handle *GSC_cfg;
102
103 /**
104  * For creating statistics.
105  */
106 extern struct GNUNET_STATISTICS_Handle *GSC_stats;
107
108 /**
109  * Our identity.
110  */
111 extern struct GNUNET_PeerIdentity GSC_my_identity;
112
113
114 #endif