0
0
mirror of https://github.com/signalapp/libsignal.git synced 2024-09-20 12:02:18 +02:00

Merge pull request #237 from signalapp/jack/has-current-state

Fix Node SessionRecord accessor funnctions
This commit is contained in:
Jack Lloyd 2021-03-08 15:57:42 -05:00 committed by GitHub
commit b3efdd4b1d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 24 additions and 10 deletions

View File

@ -692,6 +692,17 @@ describe('SignalClient', () => {
);
assert.deepEqual(aDPlaintext, bMessage);
const session = await bSess.getSession(aAddress);
if (session != null) {
assert(session.serialize().length > 0);
assert.deepEqual(session.localRegistrationId(), 5);
assert.deepEqual(session.remoteRegistrationId(), 5);
assert(session.hasCurrentState());
session.archiveCurrentState();
assert(!session.hasCurrentState());
}
});
it('SealedSender', async () => {
const aKeys = new InMemoryIdentityKeyStore();

View File

@ -137,7 +137,7 @@ macro_rules! ffi_bridge_deserialize {
return Err(ffi::SignalFfiError::NullPointer);
}
let data = std::slice::from_raw_parts(data, data_len);
ffi::box_object(p, $typ::$fn(data))
ffi::write_result_to(p, $typ::$fn(data))
})
}
}

View File

@ -482,7 +482,7 @@ macro_rules! jni_bridge_deserialize {
) -> jni::ObjectHandle {
jni::run_ffi_safe(&env, || {
let data = env.convert_byte_array(data)?;
jni::box_object($typ::$fn(data.as_ref()))
jni::ResultTypeInfo::convert_into($typ::$fn(data.as_ref()), &env)
})
}
}

View File

@ -773,21 +773,23 @@ macro_rules! node_bridge_handle {
impl<'storage, 'context: 'storage> node::ArgTypeInfo<'storage, 'context>
for &'storage mut $typ
{
type ArgType = node::DefaultJsBox<std::cell::RefCell<$typ>>;
type ArgType = node::JsObject;
type StoredType = (
node::Handle<'context, Self::ArgType>,
node::Handle<'context, node::DefaultJsBox<std::cell::RefCell<$typ>>>,
std::cell::RefMut<'context, $typ>,
);
fn borrow(
_cx: &mut node::FunctionContext,
cx: &mut node::FunctionContext<'context>,
foreign: node::Handle<'context, Self::ArgType>,
) -> node::NeonResult<Self::StoredType> {
let cell: &std::cell::RefCell<_> = &***foreign;
let boxed_value: node::Handle<'context, node::DefaultJsBox<std::cell::RefCell<$typ>>> =
node::Object::get(*foreign, cx, node::NATIVE_HANDLE_PROPERTY)?.downcast_or_throw(cx)?;
let cell: &std::cell::RefCell<_> = &***boxed_value;
// See above.
let cell_with_extended_lifetime: &'context std::cell::RefCell<_> = unsafe {
node::extend_lifetime(cell)
};
Ok((foreign, cell_with_extended_lifetime.borrow_mut()))
Ok((boxed_value, cell_with_extended_lifetime.borrow_mut()))
}
fn load_from(
stored: &'storage mut Self::StoredType,

View File

@ -135,7 +135,7 @@ macro_rules! node_bridge_deserialize {
let buffer = cx.argument::<node::JsBuffer>(0)?;
let obj: Result<$typ> =
node::with_buffer_contents(&mut cx, buffer, |buf| $typ::$fn(buf));
node::return_boxed_object(&mut cx, obj)
node::ResultTypeInfo::convert_into(obj, &mut cx)
}
node_register!([<$node_name _Deserialize>]);

View File

@ -7,6 +7,7 @@ use super::*;
use async_trait::async_trait;
use signal_neon_futures::*;
use std::cell::RefCell;
use std::sync::Arc;
pub struct NodePreKeyStore {
@ -257,8 +258,8 @@ impl NodeSessionStore {
Ok(result)
})
.then(|cx, result| match result {
Ok(value) => match value.downcast::<DefaultJsBox<SessionRecord>, _>(cx) {
Ok(obj) => Ok(Some((***obj).clone())),
Ok(value) => match value.downcast::<DefaultJsBox<RefCell<SessionRecord>>, _>(cx) {
Ok(obj) => Ok(Some((***obj).borrow().clone())),
Err(_) => {
if value.is_a::<JsNull, _>(cx) || value.is_a::<JsUndefined, _>(cx) {
Ok(None)