adding crc16 to gnunet_crypto_lib.h
[oweals/gnunet.git] / src / include / gnunet_common.h
index 69a428bb5cda73503eb0525bc10ff1495b324e3c..cecc94c9edc5787b9aee02b2ea2bf5e1d5bd97f1 100644 (file)
 /**
  * Version of the API (for entire gnunetutil.so library).
  */
-#define GNUNET_UTIL_VERSION 0x00089990
-
-/**
- * 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.
  */
@@ -98,7 +165,7 @@ struct GNUNET_MessageHeader
   uint16_t type GNUNET_PACKED;
 
 };
-
+GNUNET_NETWORK_STRUCT_END
 
 /**
  * @brief 512-bit hashcode
@@ -110,6 +177,8 @@ typedef struct
 GNUNET_HashCode;
 
 
+GNUNET_NETWORK_STRUCT_BEGIN
+
 /**
  * The identity of the host (basically the SHA-512 hashcode of
  * it's public key).
@@ -118,7 +187,7 @@ struct GNUNET_PeerIdentity
 {
   GNUNET_HashCode hashPubKey GNUNET_PACKED;
 };
-
+GNUNET_NETWORK_STRUCT_END
 
 /**
  * Function called with a filename.
@@ -412,20 +481,20 @@ GNUNET_error_type_to_string (enum GNUNET_ErrorType kind);
 /* ************************* 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 ****************** */