aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard van der Hoff <richard@matrix.org>2016-04-26 11:42:42 +0100
committerRichard van der Hoff <richard@matrix.org>2016-04-26 12:30:18 +0100
commite7a2af1ede768589e612bad1c61b10186a1bb686 (patch)
treebcba41120a73f6e7bc8b226ac2259aee6fbf2f7c
parent7305649a277214da35452f2e0172ad5f75454413 (diff)
Add a basic logging implementation
-rw-r--r--include/olm/logging.hh35
-rw-r--r--include/olm/olm.hh11
-rw-r--r--javascript/olm_post.js1
-rw-r--r--src/logging.cpp46
-rw-r--r--src/olm.cpp7
5 files changed, 98 insertions, 2 deletions
diff --git a/include/olm/logging.hh b/include/olm/logging.hh
new file mode 100644
index 0000000..76c8053
--- /dev/null
+++ b/include/olm/logging.hh
@@ -0,0 +1,35 @@
+/* Copyright 2016 OpenMarket Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef OLM_LOGGING_HH_
+#define OLM_LOGGING_HH_
+
+namespace olm {
+
+const unsigned int LOG_FATAL = 1;
+const unsigned int LOG_ERROR = 2;
+const unsigned int LOG_WARNING = 3;
+const unsigned int LOG_INFO = 4;
+const unsigned int LOG_DEBUG = 5;
+
+void set_log_level(unsigned int log_level);
+
+__attribute__((__format__ (__printf__, 3, 4)))
+void logf(unsigned int level, const char *category,
+ const char *format, ...);
+
+} // namespace olm
+
+#endif /* OLM_LOGGING_HH_ */
diff --git a/include/olm/olm.hh b/include/olm/olm.hh
index 34d84fd..ceb8be9 100644
--- a/include/olm/olm.hh
+++ b/include/olm/olm.hh
@@ -1,4 +1,4 @@
-/* Copyright 2015 OpenMarket Ltd
+/* Copyright 2015, 2016 OpenMarket Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -51,7 +51,7 @@ OlmSession * olm_session(
);
/** Initialise a utility object using the supplied memory
- * The supplied memory must be at least olm_session_size() bytes */
+ * The supplied memory must be at least olm_utility_size() bytes */
OlmUtility * olm_utility(
void * memory
);
@@ -415,6 +415,13 @@ size_t olm_ed25519_verify(
void * signature, size_t signature_length
);
+/**
+ * Set the log level. By default, 1, which logs only FATAL messages.
+ */
+void olm_set_log_level(
+ unsigned int level
+);
+
#ifdef __cplusplus
}
#endif
diff --git a/javascript/olm_post.js b/javascript/olm_post.js
index dbb4862..36e7645 100644
--- a/javascript/olm_post.js
+++ b/javascript/olm_post.js
@@ -383,4 +383,5 @@ olm_exports["Account"] = Account;
olm_exports["Session"] = Session;
olm_exports["Utility"] = Utility;
+olm_exports['set_log_level'] = Module['_olm_set_log_level'];
}();
diff --git a/src/logging.cpp b/src/logging.cpp
new file mode 100644
index 0000000..66b9fa8
--- /dev/null
+++ b/src/logging.cpp
@@ -0,0 +1,46 @@
+/* Copyright 2016 OpenMarket Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "olm/logging.hh"
+
+#include <cstdarg>
+#include <cstdio>
+
+namespace olm {
+
+static unsigned int log_level = 1;
+
+void set_log_level(unsigned int level) {
+ log_level = level;
+}
+
+void logf(unsigned int level, const char *category,
+ const char *format, ...) {
+ if (level > log_level) {
+ return;
+ }
+
+ fputs(category, stdout);
+ fputs(": ", stdout);
+
+ va_list ap;
+ va_start(ap, format);
+ vprintf(format, ap);
+ va_end(ap);
+
+ putchar('\n');
+}
+
+} // namespace olm
diff --git a/src/olm.cpp b/src/olm.cpp
index 63f3d83..6db8724 100644
--- a/src/olm.cpp
+++ b/src/olm.cpp
@@ -19,6 +19,7 @@
#include "olm/base64.hh"
#include "olm/cipher.hh"
#include "olm/memory.hh"
+#include "olm/logging.hh"
#include <new>
#include <cstring>
@@ -818,4 +819,10 @@ size_t olm_ed25519_verify(
);
}
+void olm_set_log_level(
+ unsigned int level
+) {
+ olm::set_log_level(level);
+}
+
}