Merge branch 'dbkr/olm_session_describe' into 'master'

Add olm_session_describe

See merge request matrix-org/olm!9
This commit is contained in:
Hubert Chathi 2019-10-09 15:37:56 +00:00
commit 387deeea8f
5 changed files with 69 additions and 0 deletions

View file

@ -318,6 +318,12 @@ int olm_session_has_received_message(
OlmSession *session OlmSession *session
); );
/**
* Write a null-terminated string describing the internal state of an olm
* session to the buffer provided for debugging and logging purposes.
*/
void olm_session_describe(OlmSession * session, char *buf, size_t buflen);
/** Checks if the PRE_KEY message is for this in-bound session. This can happen /** Checks if the PRE_KEY message is for this in-bound session. This can happen
* if multiple messages are sent to this account before this account sends a * if multiple messages are sent to this account before this account sends a
* message in reply. The one_time_key_message buffer is destroyed. Returns 1 if * message in reply. The one_time_key_message buffer is destroyed. Returns 1 if

View file

@ -131,6 +131,14 @@ struct Session {
std::uint8_t const * message, std::size_t message_length, std::uint8_t const * message, std::size_t message_length,
std::uint8_t * plaintext, std::size_t max_plaintext_length std::uint8_t * plaintext, std::size_t max_plaintext_length
); );
/**
* Write a string describing this session and its state (not including the
* private key) into the buffer provided.
*
* Takes a buffer to write to and the length of that buffer
*/
void describe(char *buf, size_t buflen);
}; };

View file

@ -459,6 +459,19 @@ Session.prototype['decrypt'] = restore_stack(function(
}); });
Session.prototype['describe'] = restore_stack(function() {
var description_buf;
try {
description_buf = malloc(256);
session_method(Module['_olm_session_describe'])(
this.ptr, description_buf, 256
);
return UTF8ToString(description_buf);
} finally {
if (description_buf !== undefined) free(description_buf);
}
});
function Utility() { function Utility() {
var size = Module['_olm_utility_size'](); var size = Module['_olm_utility_size']();
this.buf = malloc(size); this.buf = malloc(size);

View file

@ -535,6 +535,12 @@ int olm_session_has_received_message(
return from_c(session)->received_message; return from_c(session)->received_message;
} }
void olm_session_describe(
OlmSession * session, char *buf, size_t buflen
) {
from_c(session)->describe(buf, buflen);
}
size_t olm_matches_inbound_session( size_t olm_matches_inbound_session(
OlmSession * session, OlmSession * session,
void * one_time_key_message, size_t message_length void * one_time_key_message, size_t message_length

View file

@ -21,6 +21,7 @@
#include "olm/pickle.hh" #include "olm/pickle.hh"
#include <cstring> #include <cstring>
#include <stdio.h>
namespace { namespace {
@ -397,6 +398,41 @@ std::size_t olm::Session::decrypt(
return result; return result;
} }
void olm::Session::describe(char *describe_buffer, size_t buflen) {
if (buflen == 0) return;
describe_buffer[0] = '\0';
char *buf_pos = describe_buffer;
int size;
size = snprintf(
buf_pos, buflen - (buf_pos - describe_buffer),
"sender chain index: %d ", ratchet.sender_chain[0].chain_key.index
);
if (size > 0) buf_pos += size;
size = snprintf(buf_pos, buflen - (buf_pos - describe_buffer), "receiver chain indices:");
if (size > 0) buf_pos += size;
for (size_t i = 0; i < ratchet.receiver_chains.size(); ++i) {
size = snprintf(
buf_pos, buflen - (buf_pos - describe_buffer),
" %d", ratchet.receiver_chains[i].chain_key.index
);
if (size > 0) buf_pos += size;
}
size = snprintf(buf_pos, buflen - (buf_pos - describe_buffer), " skipped message keys:");
if (size >= 0) buf_pos += size;
for (size_t i = 0; i < ratchet.skipped_message_keys.size(); ++i) {
size = snprintf(
buf_pos, buflen - (buf_pos - describe_buffer),
" %d", ratchet.skipped_message_keys[i].message_key.index
);
if (size > 0) buf_pos += size;
}
}
namespace { namespace {
// the master branch writes pickle version 1; the logging_enabled branch writes // the master branch writes pickle version 1; the logging_enabled branch writes
// 0x80000001. // 0x80000001.