Squashed 'third_party/rawrtc/re/' content from commit f3163ce8b

Change-Id: I6a235e6ac0f03269d951026f9d195da05c40fdab
git-subtree-dir: third_party/rawrtc/re
git-subtree-split: f3163ce8b526a13b35ef71ce4dd6f43585064d8a
diff --git a/include/re_dbg.h b/include/re_dbg.h
new file mode 100644
index 0000000..a73670e
--- /dev/null
+++ b/include/re_dbg.h
@@ -0,0 +1,193 @@
+/**
+ * @file re_dbg.h  Interface to debugging module
+ *
+ * Copyright (C) 2010 Creytiv.com
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** Debug levels */
+enum {
+	DBG_EMERG       = 0,       /**< System is unusable               */
+	DBG_ALERT       = 1,       /**< Action must be taken immediately */
+	DBG_CRIT        = 2,       /**< Critical conditions              */
+	DBG_ERR         = 3,       /**< Error conditions                 */
+	DBG_WARNING     = 4,       /**< Warning conditions               */
+	DBG_NOTICE      = 5,       /**< Normal but significant condition */
+	DBG_INFO        = 6,       /**< Informational                    */
+	DBG_DEBUG       = 7        /**< Debug-level messages             */
+};
+
+
+/**
+ * @def DEBUG_MODULE
+ *
+ * Module name defined by application
+ */
+
+/**
+ * @def DEBUG_LEVEL
+ *
+ * Debug level defined by application
+ */
+
+#ifndef DEBUG_MODULE
+# warning "DEBUG_MODULE is not defined"
+#define DEBUG_MODULE "?"
+#endif
+
+#ifndef DEBUG_LEVEL
+# warning "DEBUG_LEVEL is not defined"
+#define DEBUG_LEVEL 7
+#endif
+
+
+/**
+ * @def DEBUG_WARNING(...)
+ *
+ * Print warning message
+ */
+
+/**
+ * @def DEBUG_NOTICE(...)
+ *
+ * Print notice message
+ */
+
+/**
+ * @def DEBUG_INFO(...)
+ *
+ * Print info message
+ */
+
+/**
+ * @def DEBUG_PRINTF(...)
+ *
+ * Print debug message
+ */
+
+
+/* Check for ISO C99 variable argument macros */
+#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L)	\
+	|| (__GNUC__ >= 3)
+
+#if (DEBUG_LEVEL >= 4)
+#define DEBUG_WARNING(...) \
+	dbg_printf(DBG_WARNING, DEBUG_MODULE ": " __VA_ARGS__)
+#else
+#define DEBUG_WARNING(...)
+#endif
+
+#if (DEBUG_LEVEL >= 5)
+#define DEBUG_NOTICE(...) \
+	dbg_printf(DBG_NOTICE, DEBUG_MODULE ": " __VA_ARGS__)
+#else
+#define DEBUG_NOTICE(...)
+#endif
+
+#if (DEBUG_LEVEL >= 6)
+#define DEBUG_INFO(...) \
+	dbg_printf(DBG_INFO, DEBUG_MODULE ": " __VA_ARGS__)
+#else
+#define DEBUG_INFO(...)
+#endif
+
+#if (DEBUG_LEVEL >= 7)
+#define DEBUG_PRINTF(...) \
+	dbg_printf(DBG_DEBUG, DEBUG_MODULE ": " __VA_ARGS__)
+#else
+#define DEBUG_PRINTF(...)
+#endif
+
+/* GNU extensions for variable argument macros */
+#elif defined(__GNUC__)
+
+#if (DEBUG_LEVEL >= 4)
+#define DEBUG_WARNING(a...) dbg_printf(DBG_WARNING, DEBUG_MODULE ": " a)
+#else
+#define DEBUG_WARNING(a...)
+#endif
+
+#if (DEBUG_LEVEL >= 5)
+#define DEBUG_NOTICE(a...) dbg_printf(DBG_NOTICE, DEBUG_MODULE ": " a)
+#else
+#define DEBUG_NOTICE(a...)
+#endif
+
+#if (DEBUG_LEVEL >= 6)
+#define DEBUG_INFO(a...) dbg_printf(DBG_INFO, DEBUG_MODULE ": " a)
+#else
+#define DEBUG_INFO(a...)
+#endif
+
+#if (DEBUG_LEVEL >= 7)
+#define DEBUG_PRINTF(a...) dbg_printf(DBG_DEBUG, DEBUG_MODULE ": " a)
+#else
+#define DEBUG_PRINTF(a...)
+#endif
+
+/* No variable argument macros */
+#else
+
+#if (DEBUG_LEVEL >= 4)
+#define DEBUG_WARNING dbg_warning
+#else
+#define DEBUG_WARNING dbg_noprintf
+#endif
+
+#if (DEBUG_LEVEL >= 5)
+#define DEBUG_NOTICE dbg_notice
+#else
+#define DEBUG_NOTICE dbg_noprintf
+#endif
+
+#if (DEBUG_LEVEL >= 6)
+#define DEBUG_INFO dbg_info
+#else
+#define DEBUG_INFO dbg_noprintf
+#endif
+
+#if (DEBUG_LEVEL >= 7)
+#define DEBUG_PRINTF dbg_noprintf
+#else
+#define DEBUG_PRINTF dbg_noprintf
+#endif
+
+#endif
+
+
+/** Debug flags */
+enum dbg_flags {
+	DBG_NONE = 0,                 /**< No debug flags         */
+	DBG_TIME = 1<<0,              /**< Print timestamp flag   */
+	DBG_ANSI = 1<<1,              /**< Print ANSI color codes */
+	DBG_ALL  = DBG_TIME|DBG_ANSI  /**< All flags enabled      */
+};
+
+
+/**
+ * Defines the debug print handler
+ *
+ * @param level Debug level
+ * @param p     Debug string
+ * @param len   String length
+ * @param arg   Handler argument
+ */
+typedef void (dbg_print_h)(int level, const char *p, size_t len, void *arg);
+
+void dbg_init(int level, enum dbg_flags flags);
+void dbg_close(void);
+int  dbg_logfile_set(const char *name);
+void dbg_handler_set(dbg_print_h *ph, void *arg);
+void dbg_printf(int level, const char *fmt, ...);
+void dbg_noprintf(const char *fmt, ...);
+void dbg_warning(const char *fmt, ...);
+void dbg_notice(const char *fmt, ...);
+void dbg_info(const char *fmt, ...);
+const char *dbg_level_str(int level);
+
+#ifdef __cplusplus
+}
+#endif