-add adv port
[oweals/gnunet.git] / src / statistics / statistics.h
1 /*
2      This file is part of GNUnet.
3      (C) 2001, 2002, 2003, 2004, 2009 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 /**
22  * @author Christian Grothoff
23  * @file statistics/statistics.h
24  */
25 #ifndef STATISTICS_H
26 #define STATISTICS_H
27
28 #include "gnunet_common.h"
29
30
31 GNUNET_NETWORK_STRUCT_BEGIN
32
33 /**
34  * Statistics message. Contains how long the system is up
35  * and one value.
36  *
37  * The struct is be followed by the service name and
38  * name of the statistic, both 0-terminated.
39  */
40 struct GNUNET_STATISTICS_ReplyMessage
41 {
42   /**
43    * Type:  GNUNET_MESSAGE_TYPE_STATISTICS_VALUE
44    */
45   struct GNUNET_MessageHeader header;
46
47   /**
48    * Unique numerical identifier for the value (will
49    * not change during the same client-session).  Highest
50    * bit will be set for persistent values.
51    */
52   uint32_t uid GNUNET_PACKED;
53
54   /**
55    * The value.
56    */
57   uint64_t value GNUNET_PACKED;
58
59 };
60
61 #define GNUNET_STATISTICS_PERSIST_BIT (1<<31)
62
63 #define GNUNET_STATISTICS_SETFLAG_ABSOLUTE 0
64
65 #define GNUNET_STATISTICS_SETFLAG_RELATIVE 1
66
67 #define GNUNET_STATISTICS_SETFLAG_PERSISTENT 2
68
69 /**
70  * Message to set a statistic.  Followed
71  * by the subsystem name and the name of
72  * the statistic (each 0-terminated).
73  */
74 struct GNUNET_STATISTICS_SetMessage
75 {
76   /**
77    * Type: GNUNET_MESSAGE_TYPE_STATISTICS_SET
78    */
79   struct GNUNET_MessageHeader header;
80
81   /**
82    * 0 for absolute value, 1 for relative value; 2 to make persistent
83    * (see GNUNET_STATISTICS_SETFLAG_*).
84    */
85   uint32_t flags GNUNET_PACKED;
86
87   /**
88    * Value. Note that if this is a relative value, it will
89    * be signed even though the type given here is unsigned.
90    */
91   uint64_t value GNUNET_PACKED;
92
93 };
94
95
96 /**
97  * Message transmitted if a watched value changes.
98  */
99 struct GNUNET_STATISTICS_WatchValueMessage
100 {
101   /**
102    * Type: GNUNET_MESSAGE_TYPE_STATISTICS_WATCH_VALUE
103    */
104   struct GNUNET_MessageHeader header;
105
106   /**
107    * 0 for absolute value, 1 for relative value; 2 to make persistent
108    * (see GNUNET_STATISTICS_SETFLAG_*).
109    */
110   uint32_t flags GNUNET_PACKED;
111
112   /**
113    * Unique watch identification number (watch
114    * requests are enumerated in the order they
115    * are received, the first request having
116    * a wid of zero).
117    */
118   uint32_t wid GNUNET_PACKED;
119
120   /**
121    * Reserved (always 0).
122    */
123   uint32_t reserved GNUNET_PACKED;
124
125   /**
126    * Value. Note that if this is a relative value, it will
127    * be signed even though the type given here is unsigned.
128    */
129   uint64_t value GNUNET_PACKED;
130
131 };
132 GNUNET_NETWORK_STRUCT_END
133
134 #endif