aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDavid Baker <dave@matrix.org>2019-10-01 11:14:16 +0100
committerDavid Baker <dave@matrix.org>2019-10-01 11:14:16 +0100
commit39a1ee0b18f0fced6d7bc293cc9a46ea70ec9e96 (patch)
treecbda083a8eb42f57a82d03cea38add6803d20823 /src
parent3568060570bb06eff022f49ab39cf34e387e382f (diff)
Add olm_session_describe
As a way to dump the state of an olm session, ie. the chain indicies, so we can debug why olm sessions break and get out of sync.
Diffstat (limited to 'src')
-rw-r--r--src/olm.cpp6
-rw-r--r--src/session.cpp29
2 files changed, 35 insertions, 0 deletions
diff --git a/src/olm.cpp b/src/olm.cpp
index d626c84..65e506d 100644
--- a/src/olm.cpp
+++ b/src/olm.cpp
@@ -535,6 +535,12 @@ int olm_session_has_received_message(
return from_c(session)->received_message;
}
+const char * olm_session_describe(
+ OlmSession * session
+) {
+ return from_c(session)->describe();
+}
+
size_t olm_matches_inbound_session(
OlmSession * session,
void * one_time_key_message, size_t message_length
diff --git a/src/session.cpp b/src/session.cpp
index f1bc5a7..bad19de 100644
--- a/src/session.cpp
+++ b/src/session.cpp
@@ -21,6 +21,7 @@
#include "olm/pickle.hh"
#include <cstring>
+#include <stdio.h>
namespace {
@@ -397,6 +398,34 @@ std::size_t olm::Session::decrypt(
return result;
}
+const char * olm::Session::describe() {
+ describe_buffer[0] = '\0';
+ char *buf_pos = describe_buffer;
+
+ buf_pos += snprintf(
+ buf_pos, DESCRIBE_BUFFER_LEN - (buf_pos - describe_buffer),
+ "sender chain index: %d ", ratchet.sender_chain[0].chain_key.index
+ );
+
+ buf_pos += snprintf(buf_pos, DESCRIBE_BUFFER_LEN - (buf_pos - describe_buffer), "receiver chain indcies:");
+ for (size_t i = 0; i < ratchet.receiver_chains.size(); ++i) {
+ buf_pos += snprintf(
+ buf_pos, DESCRIBE_BUFFER_LEN - (buf_pos - describe_buffer),
+ " %d", ratchet.receiver_chains[i].chain_key.index
+ );
+ }
+
+ buf_pos += snprintf(buf_pos, DESCRIBE_BUFFER_LEN - (buf_pos - describe_buffer), " skipped message keys:");
+ for (size_t i = 0; i < ratchet.skipped_message_keys.size(); ++i) {
+ buf_pos += snprintf(
+ buf_pos, DESCRIBE_BUFFER_LEN - (buf_pos - describe_buffer),
+ " %d", ratchet.skipped_message_keys[i].message_key.index
+ );
+ }
+
+ return describe_buffer;
+}
+
namespace {
// the master branch writes pickle version 1; the logging_enabled branch writes
// 0x80000001.