Pass in a buffer to olm_session_describe
instead of having a static one, as that could end up taking up a lot of memory if your app keeps olm sessions hanging about.
This commit is contained in:
parent
e73a208fb2
commit
b482321213
5 changed files with 29 additions and 29 deletions
|
@ -319,12 +319,10 @@ int olm_session_has_received_message(
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return a string describing the internal state of an olm session,
|
* Write a string describing the internal state of an olm session
|
||||||
* for debugging and logging purposes. The pointer returned points
|
* to the buffer provided for debugging and logging purposes.
|
||||||
* to an internal buffer and is valid until the next call to
|
|
||||||
* olm_session_describe on the same olm session object.
|
|
||||||
*/
|
*/
|
||||||
const char * olm_session_describe(OlmSession * session);
|
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
|
||||||
|
|
|
@ -17,8 +17,6 @@
|
||||||
|
|
||||||
#include "olm/ratchet.hh"
|
#include "olm/ratchet.hh"
|
||||||
|
|
||||||
#define DESCRIBE_BUFFER_LEN 256
|
|
||||||
|
|
||||||
namespace olm {
|
namespace olm {
|
||||||
|
|
||||||
struct Account;
|
struct Account;
|
||||||
|
@ -37,8 +35,6 @@ struct Session {
|
||||||
|
|
||||||
bool received_message;
|
bool received_message;
|
||||||
|
|
||||||
char describe_buffer[DESCRIBE_BUFFER_LEN];
|
|
||||||
|
|
||||||
_olm_curve25519_public_key alice_identity_key;
|
_olm_curve25519_public_key alice_identity_key;
|
||||||
_olm_curve25519_public_key alice_base_key;
|
_olm_curve25519_public_key alice_base_key;
|
||||||
_olm_curve25519_public_key bob_one_time_key;
|
_olm_curve25519_public_key bob_one_time_key;
|
||||||
|
@ -137,12 +133,12 @@ struct Session {
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return a string describing this session and its state (not including the
|
* Write a string describing this session and its state (not including the
|
||||||
* private key)
|
* private key) into the buffer provided.
|
||||||
* The pointer returned refers to an internal buffer which will be valid
|
*
|
||||||
* up until the next time describe() is called.
|
* Takes a buffer to write to and the length of that buffer
|
||||||
*/
|
*/
|
||||||
const char *describe();
|
void describe(char *buf, size_t buflen);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -460,10 +460,16 @@ Session.prototype['decrypt'] = restore_stack(function(
|
||||||
});
|
});
|
||||||
|
|
||||||
Session.prototype['describe'] = restore_stack(function() {
|
Session.prototype['describe'] = restore_stack(function() {
|
||||||
var description_buf = session_method(Module['_olm_session_describe'])(
|
var description_buf;
|
||||||
this.ptr
|
try {
|
||||||
|
description_buf = malloc(256);
|
||||||
|
session_method(Module['_olm_session_describe'])(
|
||||||
|
this.ptr, description_buf, 256
|
||||||
);
|
);
|
||||||
return UTF8ToString(description_buf);
|
return UTF8ToString(description_buf);
|
||||||
|
} finally {
|
||||||
|
if (description_buf !== undefined) free(description_buf);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
function Utility() {
|
function Utility() {
|
||||||
|
|
|
@ -535,10 +535,10 @@ int olm_session_has_received_message(
|
||||||
return from_c(session)->received_message;
|
return from_c(session)->received_message;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char * olm_session_describe(
|
void olm_session_describe(
|
||||||
OlmSession * session
|
OlmSession * session, char *buf, size_t buflen
|
||||||
) {
|
) {
|
||||||
return from_c(session)->describe();
|
from_c(session)->describe(buf, buflen);
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t olm_matches_inbound_session(
|
size_t olm_matches_inbound_session(
|
||||||
|
|
|
@ -398,32 +398,32 @@ std::size_t olm::Session::decrypt(
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char * olm::Session::describe() {
|
void olm::Session::describe(char *describe_buffer, size_t buflen) {
|
||||||
|
if (buflen == 0) return;
|
||||||
|
|
||||||
describe_buffer[0] = '\0';
|
describe_buffer[0] = '\0';
|
||||||
char *buf_pos = describe_buffer;
|
char *buf_pos = describe_buffer;
|
||||||
|
|
||||||
buf_pos += snprintf(
|
buf_pos += snprintf(
|
||||||
buf_pos, DESCRIBE_BUFFER_LEN - (buf_pos - describe_buffer),
|
buf_pos, buflen - (buf_pos - describe_buffer),
|
||||||
"sender chain index: %d ", ratchet.sender_chain[0].chain_key.index
|
"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:");
|
buf_pos += snprintf(buf_pos, buflen - (buf_pos - describe_buffer), "receiver chain indcies:");
|
||||||
for (size_t i = 0; i < ratchet.receiver_chains.size(); ++i) {
|
for (size_t i = 0; i < ratchet.receiver_chains.size(); ++i) {
|
||||||
buf_pos += snprintf(
|
buf_pos += snprintf(
|
||||||
buf_pos, DESCRIBE_BUFFER_LEN - (buf_pos - describe_buffer),
|
buf_pos, buflen - (buf_pos - describe_buffer),
|
||||||
" %d", ratchet.receiver_chains[i].chain_key.index
|
" %d", ratchet.receiver_chains[i].chain_key.index
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
buf_pos += snprintf(buf_pos, DESCRIBE_BUFFER_LEN - (buf_pos - describe_buffer), " skipped message keys:");
|
buf_pos += snprintf(buf_pos, buflen - (buf_pos - describe_buffer), " skipped message keys:");
|
||||||
for (size_t i = 0; i < ratchet.skipped_message_keys.size(); ++i) {
|
for (size_t i = 0; i < ratchet.skipped_message_keys.size(); ++i) {
|
||||||
buf_pos += snprintf(
|
buf_pos += snprintf(
|
||||||
buf_pos, DESCRIBE_BUFFER_LEN - (buf_pos - describe_buffer),
|
buf_pos, buflen - (buf_pos - describe_buffer),
|
||||||
" %d", ratchet.skipped_message_keys[i].message_key.index
|
" %d", ratchet.skipped_message_keys[i].message_key.index
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return describe_buffer;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
Loading…
Reference in a new issue