diff options
author | David Baker <dave@matrix.org> | 2019-10-01 11:14:16 +0100 |
---|---|---|
committer | David Baker <dave@matrix.org> | 2019-10-01 11:14:16 +0100 |
commit | 39a1ee0b18f0fced6d7bc293cc9a46ea70ec9e96 (patch) | |
tree | cbda083a8eb42f57a82d03cea38add6803d20823 /src | |
parent | 3568060570bb06eff022f49ab39cf34e387e382f (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.cpp | 6 | ||||
-rw-r--r-- | src/session.cpp | 29 |
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. |