/**
* Version of the API (for entire gnunetutil.so library).
*/
-#define GNUNET_UTIL_VERSION 0x00089900
-
-/**
- * Name used for "services" that are actually command-line
- * programs invoked by the end user.
- */
-#define GNUNET_CLIENT_SERVICE_NAME "client"
+#define GNUNET_UTIL_VERSION 0x00090100
/**
* Named constants for return values. The following
#define GNUNET_MAX(a,b) (((a) > (b)) ? (a) : (b))
+/**
+ * Endian operations
+ */
+
+# if __BYTE_ORDER == __LITTLE_ENDIAN
+# define GNUNET_htobe16(x) __bswap_16 (x)
+# define GNUNET_htole16(x) (x)
+# define GNUNET_be16toh(x) __bswap_16 (x)
+# define GNUNET_le16toh(x) (x)
+
+# define GNUNET_htobe32(x) __bswap_32 (x)
+# define GNUNET_htole32(x) (x)
+# define GNUNET_be32toh(x) __bswap_32 (x)
+# define GNUNET_le32toh(x) (x)
+
+# define GNUNET_htobe64(x) __bswap_64 (x)
+# define GNUNET_htole64(x) (x)
+# define GNUNET_be64toh(x) __bswap_64 (x)
+# define GNUNET_le64toh(x) (x)
+#endif
+# if __BYTE_ORDER == __BIG_ENDIAN
+# define GNUNET_htobe16(x) (x)
+# define GNUNET_htole16(x) __bswap_16 (x)
+# define GNUNET_be16toh(x) (x)
+# define GNUNET_le16toh(x) __bswap_16 (x)
+
+# define GNUNET_htobe32(x) (x)
+# define GNUNET_htole32(x) __bswap_32 (x)
+# define GNUNET_be32toh(x) (x)
+# define GNUNET_le32toh(x) __bswap_32 (x)
+
+# define GNUNET_htobe64(x) (x)
+# define GNUNET_htole64(x) __bswap_64 (x)
+# define GNUNET_be64toh(x) (x)
+# define GNUNET_le64toh(x) __bswap_64 (x)
+#endif
+
+
+
+
/**
* gcc-ism to get packed structs.
*/
#define GNUNET_PACKED __attribute__((packed))
+/**
+ * gcc-ism to document unused arguments
+ */
+#define GNUNET_UNUSED __attribute__((unused))
+
+#if __GNUC__ > 3
+/**
+ * gcc 4.x-ism to pack structures even on W32 (to be used before structs)
+ */
+#define GNUNET_NETWORK_STRUCT_BEGIN \
+ _Pragma("pack(push)") \
+ _Pragma("pack(1)")
+
+/**
+ * gcc 4.x-ism to pack structures even on W32 (to be used after structs)
+ */
+#define GNUNET_NETWORK_STRUCT_END _Pragma("pack(pop)")
+#else
+#ifdef MINGW
+#error gcc 4.x or higher required on W32 systems
+#endif
+/**
+ * Good luck, GNUNET_PACKED should suffice, but this won't work on W32
+ */
+#define GNUNET_NETWORK_STRUCT_BEGIN
+
+/**
+ * Good luck, GNUNET_PACKED should suffice, but this won't work on W32
+ */
+#define GNUNET_NETWORK_STRUCT_END
+#endif
/* ************************ super-general types *********************** */
+GNUNET_NETWORK_STRUCT_BEGIN
+
/**
* Header for all communications.
*/
uint16_t type GNUNET_PACKED;
};
-
+GNUNET_NETWORK_STRUCT_END
/**
* @brief 512-bit hashcode
GNUNET_HashCode;
+GNUNET_NETWORK_STRUCT_BEGIN
+
/**
* The identity of the host (basically the SHA-512 hashcode of
* it's public key).
{
GNUNET_HashCode hashPubKey GNUNET_PACKED;
};
-
+GNUNET_NETWORK_STRUCT_END
/**
* Function called with a filename.
* Number of log calls to ignore.
*/
extern unsigned int skip_log;
+
#if !defined(GNUNET_CULL_LOGGING)
-int
-GNUNET_get_log_call_status (int caller_level, const char *comp, const char *file, const char *function, int line);
+int
+GNUNET_get_log_call_status (int caller_level, const char *comp,
+ const char *file, const char *function, int line);
#endif
/**
* Main log function.
*/
void
GNUNET_log_from_nocheck (enum GNUNET_ErrorType kind, const char *comp,
- const char *message, ...);
+ const char *message, ...);
#if !defined(GNUNET_CULL_LOGGING)
#define GNUNET_log_from(kind,comp,...) do { int log_line = __LINE__;\
#define GNUNET_log_from(...)
#endif
+
+/**
+ * Abort the process, generate a core dump if possible.
+ */
+void
+GNUNET_abort (void);
+
/**
* Ignore the next n calls to the log function.
*
/**
* Use this for fatal errors that cannot be handled
*/
-#define GNUNET_assert(cond) do { if (! (cond)) { GNUNET_log(GNUNET_ERROR_TYPE_ERROR, _("Assertion failed at %s:%d.\n"), __FILE__, __LINE__); abort(); } } while(0)
+#define GNUNET_assert(cond) do { if (! (cond)) { GNUNET_log(GNUNET_ERROR_TYPE_ERROR, _("Assertion failed at %s:%d.\n"), __FILE__, __LINE__); GNUNET_abort(); } } while(0)
/**
* Use this for fatal errors that cannot be handled
*/
-#define GNUNET_assert_at(cond, f, l) do { if (! (cond)) { GNUNET_log(GNUNET_ERROR_TYPE_ERROR, _("Assertion failed at %s:%d.\n"), f, l); abort(); } } while(0)
+#define GNUNET_assert_at(cond, f, l) do { if (! (cond)) { GNUNET_log(GNUNET_ERROR_TYPE_ERROR, _("Assertion failed at %s:%d.\n"), f, l); GNUNET_abort(); } } while(0)
/**
* Use this for internal assertion violations that are
* we still want to see these problems during
* development and testing. "OP == other peer".
*/
-#define GNUNET_break_op(cond) do { if (! (cond)) { GNUNET_log(GNUNET_ERROR_TYPE_WARNING, _("External protocol violation detected at %s:%d.\n"), __FILE__, __LINE__); } } while(0)
+#define GNUNET_break_op(cond) do { if (! (cond)) { GNUNET_log(GNUNET_ERROR_TYPE_WARNING | GNUNET_ERROR_TYPE_BULK, _("External protocol violation detected at %s:%d.\n"), __FILE__, __LINE__); } } while(0)
/**
* Log an error message at log-level 'level' that indicates
/* ************************* endianess conversion ****************** */
/**
- * Convert a long-long to host-byte-order.
+ * Convert unsigned 64-bit integer to host-byte-order.
* @param n the value in network byte order
* @return the same value in host byte order
*/
-unsigned long long
-GNUNET_ntohll (unsigned long long n);
+uint64_t
+GNUNET_ntohll (uint64_t n);
/**
- * Convert a long long to network-byte-order.
+ * Convert unsigned 64-bit integer to network-byte-order.
* @param n the value in host byte order
* @return the same value in network byte order
*/
-unsigned long long
-GNUNET_htonll (unsigned long long n);
+uint64_t
+GNUNET_htonll (uint64_t n);
/* ************************* allocation functions ****************** */