-nicer logging
[oweals/gnunet.git] / src / include / gnunet_common.h
index ec077d355fe175ae40427af373952140986289c2..17c97c51467e12078bc6cd626c61000fa7573af3 100644 (file)
@@ -1,6 +1,6 @@
 /*
      This file is part of GNUnet.
-     (C) 2006-2013 Christian Grothoff (and other contributing authors)
+     Copyright (C) 2006-2013 Christian Grothoff (and other contributing authors)
 
      GNUnet is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published
@@ -62,6 +62,7 @@ extern "C"
  */
 #define GNUNET_UTIL_VERSION 0x000A0100
 
+
 /**
  * Named constants for return values.  The following invariants hold:
  * `GNUNET_NO == 0` (to allow `if (GNUNET_NO)`) `GNUNET_OK !=
@@ -248,6 +249,29 @@ struct GNUNET_MessageHeader
 
 };
 
+
+/**
+ * Answer from service to client about last operation.
+ */
+struct GNUNET_OperationResultMessage
+{
+  struct GNUNET_MessageHeader header;
+
+  uint32_t reserved GNUNET_PACKED;
+
+  /**
+   * Operation ID.
+   */
+  uint64_t op_id GNUNET_PACKED;
+
+  /**
+   * Status code for the operation.
+   */
+  uint64_t result_code GNUNET_PACKED;
+
+  /* Followed by data. */
+};
+
 GNUNET_NETWORK_STRUCT_END
 
 /**
@@ -259,7 +283,35 @@ GNUNET_NETWORK_STRUCT_END
  *  #GNUNET_NO to stop iteration with no error,
  *  #GNUNET_SYSERR to abort iteration with error!
  */
-typedef int (*GNUNET_FileNameCallback) (void *cls, const char *filename);
+typedef int
+(*GNUNET_FileNameCallback) (void *cls,
+                            const char *filename);
+
+
+/**
+ * Generic continuation callback.
+ *
+ * @param cls  Closure.
+ */
+typedef void
+(*GNUNET_ContinuationCallback) (void *cls);
+
+
+/**
+ * Function called with the result of an asynchronous operation.
+ *
+ * @param cls
+ *        Closure.
+ * @param result_code
+ *        Result code for the operation.
+ * @param data
+ *        Data result for the operation.
+ * @param data_size
+ *        Size of @a data.
+ */
+typedef void
+(*GNUNET_ResultCallback) (void *cls, int64_t result_code,
+                          const void *data, uint16_t data_size);
 
 
 /* ****************************** logging ***************************** */
@@ -291,9 +343,12 @@ enum GNUNET_ErrorType
  * @param date when was the message logged?
  * @param message what is the message
  */
-typedef void (*GNUNET_Logger) (void *cls, enum GNUNET_ErrorType kind,
-                               const char *component, const char *date,
-                               const char *message);
+typedef void
+(*GNUNET_Logger) (void *cls,
+                  enum GNUNET_ErrorType kind,
+                  const char *component,
+                  const char *date,
+                  const char *message);
 
 
 /**
@@ -303,14 +358,16 @@ typedef void (*GNUNET_Logger) (void *cls, enum GNUNET_ErrorType kind,
  * @return number of log calls to be ignored
  */
 int
-GNUNET_get_log_skip ();
+GNUNET_get_log_skip (void);
+
 
 #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);
+                            const char *function,
+                            int line);
 #endif
 
 
@@ -427,9 +484,11 @@ GNUNET_log_config_invalid (enum GNUNET_ErrorType kind,
 /**
  * @ingroup logging
  * Abort the process, generate a core dump if possible.
+ * Most code should use `GNUNET_assert (0)` instead to
+ * first log the location of the failure.
  */
 void
-GNUNET_abort (void) GNUNET_NORETURN;
+GNUNET_abort_ (void) GNUNET_NORETURN;
 
 
 /**
@@ -437,10 +496,11 @@ GNUNET_abort (void) GNUNET_NORETURN;
  * Ignore the next @a n calls to the log function.
  *
  * @param n number of log calls to ignore (could be negative)
- * @param check_reset GNUNET_YES to assert that the log skip counter is currently zero
+ * @param check_reset #GNUNET_YES to assert that the log skip counter is currently zero
  */
 void
-GNUNET_log_skip (int n, int check_reset);
+GNUNET_log_skip (int n,
+                 int check_reset);
 
 
 /**
@@ -453,7 +513,9 @@ GNUNET_log_skip (int n, int check_reset);
  * @return #GNUNET_OK on success, #GNUNET_SYSERR if logfile could not be opened
  */
 int
-GNUNET_log_setup (const char *comp, const char *loglevel, const char *logfile);
+GNUNET_log_setup (const char *comp,
+                  const char *loglevel,
+                  const char *logfile);
 
 
 /**
@@ -464,7 +526,8 @@ GNUNET_log_setup (const char *comp, const char *loglevel, const char *logfile);
  * @param logger_cls closure for @a logger
  */
 void
-GNUNET_logger_add (GNUNET_Logger logger, void *logger_cls);
+GNUNET_logger_add (GNUNET_Logger logger,
+                   void *logger_cls);
 
 
 /**
@@ -472,10 +535,11 @@ GNUNET_logger_add (GNUNET_Logger logger, void *logger_cls);
  * Remove a custom logger.
  *
  * @param logger log function
- * @param logger_cls closure for logger
+ * @param logger_cls closure for @a logger
  */
 void
-GNUNET_logger_remove (GNUNET_Logger logger, void *logger_cls);
+GNUNET_logger_remove (GNUNET_Logger logger,
+                      void *logger_cls);
 
 
 /**
@@ -513,7 +577,7 @@ GNUNET_h2s_full (const struct GNUNET_HashCode * hc);
  *
  * @param pid the peer identity
  * @return string form of the pid; will be overwritten by next
- *         call to #GNUNET_i2s.
+ *         call to #GNUNET_i2s().
  */
 const char *
 GNUNET_i2s (const struct GNUNET_PeerIdentity *pid);
@@ -527,7 +591,7 @@ GNUNET_i2s (const struct GNUNET_PeerIdentity *pid);
  *
  * @param pid the peer identity
  * @return string form of the pid; will be overwritten by next
- *         call to #GNUNET_i2s.
+ *         call to #GNUNET_i2s_full().
  */
 const char *
 GNUNET_i2s_full (const struct GNUNET_PeerIdentity *pid);
@@ -540,12 +604,13 @@ GNUNET_i2s_full (const struct GNUNET_PeerIdentity *pid);
  * in the entire API that is NOT reentrant!
  *
  * @param addr the address
- * @param addrlen the length of the address
+ * @param addrlen the length of the @a addr
  * @return nicely formatted string for the address
- *  will be overwritten by next call to GNUNET_a2s.
+ *  will be overwritten by next call to #GNUNET_a2s().
  */
 const char *
-GNUNET_a2s (const struct sockaddr *addr, socklen_t addrlen);
+GNUNET_a2s (const struct sockaddr *addr,
+            socklen_t addrlen);
 
 
 /**
@@ -563,14 +628,14 @@ GNUNET_error_type_to_string (enum GNUNET_ErrorType kind);
  * @ingroup logging
  * 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__); GNUNET_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)
 
 
 /**
  * @ingroup logging
  * 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); GNUNET_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)
 
 
 /**
@@ -631,37 +696,125 @@ GNUNET_error_type_to_string (enum GNUNET_ErrorType kind);
 /* ************************* endianess conversion ****************** */
 
 /**
- * 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
+ * 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.
  */
 uint64_t
-GNUNET_ntohll (uint64_t n);
+GNUNET_htonll (uint64_t n);
+
 
 /**
- * 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
+ * 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.
  */
 uint64_t
-GNUNET_htonll (uint64_t n);
+GNUNET_ntohll (uint64_t n);
+
 
 /**
- * Convert double to network-byte-order.
- * @param d the value in network byte order
- * @return the same value in host byte order
+ * Convert double to network byte order.
+ *
+ * @param d
+ *        The value in network byte order.
+ *
+ * @return The same value in host byte order.
  */
 double
 GNUNET_hton_double (double d);
 
+
 /**
- * Convert double to host-byte-order
- * @param d the value in network byte order
- * @return the same value in host byte order
+ * Convert double to host byte order
+ *
+ * @param d
+ *        The value in network byte order.
+ *
+ * @return The same value in host byte order.
  */
 double
 GNUNET_ntoh_double (double d);
 
+
+/**
+ * Convert signed 64-bit integer to network byte order.
+ *
+ * @param n
+ *        The value in host byte order.
+ *
+ * @return The same value in network byte order.
+ */
+uint64_t
+GNUNET_htonll_signed (int64_t n);
+
+
+/**
+ * Convert signed 64-bit integer to host byte order.
+ *
+ * @param n
+ *        The value in network byte order.
+ *
+ * @return The same value in host byte order.
+ */
+int64_t
+GNUNET_ntohll_signed (uint64_t n);
+
+
+/**
+ * Convert signed 32-bit integer to network byte order.
+ *
+ * @param n
+ *        The value in host byte order.
+ *
+ * @return The same value in network byte order.
+ */
+uint32_t
+GNUNET_htonl_signed (int32_t n);
+
+
+/**
+ * Convert signed 32-bit integer to host byte order.
+ *
+ * @param n
+ *        The value in network byte order.
+ *
+ * @return The same value in host byte order.
+ */
+int32_t
+GNUNET_ntohl_signed (uint32_t n);
+
+
+/**
+ * Convert signed 16-bit integer to network byte order.
+ *
+ * @param n
+ *        The value in host byte order.
+ *
+ * @return The same value in network byte order.
+ */
+uint16_t
+GNUNET_htons_signed (int16_t n);
+
+
+/**
+ * Convert signed 16-bit integer to host byte order.
+ *
+ * @param n
+ *        The value in network byte order.
+ *
+ * @return The same value in host byte order.
+ */
+int16_t
+GNUNET_ntohs_signed (uint16_t n);
+
+
 /* ************************* allocation functions ****************** */
 
 /**