X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Finclude%2Fgnunet_common.h;h=cecc94c9edc5787b9aee02b2ea2bf5e1d5bd97f1;hb=d583ad46d4babd962f362deac20fa5aa6cdce7c7;hp=3b3288d14c9e9966e64d95e5584d15c2ec5196b4;hpb=55bd3dd2d67284afbe769179fdbe96ef10856b22;p=oweals%2Fgnunet.git diff --git a/src/include/gnunet_common.h b/src/include/gnunet_common.h index 3b3288d14..cecc94c9e 100644 --- a/src/include/gnunet_common.h +++ b/src/include/gnunet_common.h @@ -49,13 +49,7 @@ /** * 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 @@ -72,14 +66,87 @@ #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. @@ -167,9 +236,11 @@ typedef void (*GNUNET_Logger) (void *cls, enum GNUNET_ErrorType kind, * 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. @@ -214,7 +285,7 @@ GNUNET_log_nocheck (enum GNUNET_ErrorType kind, const char *message, ...); */ 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__;\ @@ -243,6 +314,13 @@ GNUNET_log_from_nocheck (enum GNUNET_ErrorType kind, const char *comp, #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. * @@ -349,12 +427,12 @@ GNUNET_error_type_to_string (enum GNUNET_ErrorType kind); /** * 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 @@ -370,7 +448,7 @@ GNUNET_error_type_to_string (enum GNUNET_ErrorType kind); * 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 @@ -403,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 ****************** */