Merge branch 'dbkr/olm_session_describe' into 'master'
Add olm_session_describe See merge request matrix-org/olm!9
This commit is contained in:
commit
387deeea8f
5 changed files with 69 additions and 0 deletions
|
@ -318,6 +318,12 @@ int olm_session_has_received_message(
|
|||
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
|
||||
* 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
|
||||
|
|
|
@ -131,6 +131,14 @@ struct Session {
|
|||
std::uint8_t const * message, std::size_t message_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);
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -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() {
|
||||
var size = Module['_olm_utility_size']();
|
||||
this.buf = malloc(size);
|
||||
|
|
|
@ -535,6 +535,12 @@ int olm_session_has_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(
|
||||
OlmSession * session,
|
||||
void * one_time_key_message, size_t message_length
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
#include "olm/pickle.hh"
|
||||
|
||||
#include <cstring>
|
||||
#include <stdio.h>
|
||||
|
||||
namespace {
|
||||
|
||||
|
@ -397,6 +398,41 @@ std::size_t olm::Session::decrypt(
|
|||
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 {
|
||||
// the master branch writes pickle version 1; the logging_enabled branch writes
|
||||
// 0x80000001.
|
||||
|
|
Loading…
Reference in a new issue