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

bridge: Support UUID return values in the FFI bridge

This was already present in the Java and Node bridges; I'm not sure
why it was considered a problem in the FFI bridge.
This commit is contained in:
Jordan Rose 2021-10-28 16:16:00 -07:00
parent ebf804527c
commit c58ebfe4ee
3 changed files with 16 additions and 25 deletions

View File

@ -246,6 +246,13 @@ impl SimpleArgTypeInfo for uuid::Uuid {
}
}
impl ResultTypeInfo for uuid::Uuid {
type ResultType = uuid::Bytes;
fn convert_into(self) -> SignalFfiResult<Self::ResultType> {
Ok(*self.as_bytes())
}
}
macro_rules! store {
($name:ident) => {
paste! {
@ -530,5 +537,6 @@ macro_rules! ffi_result_type {
(Option<String>) => (*const libc::c_char);
(Option<&str>) => (*const libc::c_char);
(Option<$typ:ty>) => (*mut $typ);
(Uuid) => ([u8; 16]);
( $typ:ty ) => (*mut $typ);
}

View File

@ -336,17 +336,10 @@ bridge_get_buffer!(
SenderKeyMessage::serialized as Serialize -> &[u8],
jni = "SenderKeyMessage_1GetSerialized"
);
bridge_get!(SenderKeyMessage::distribution_id -> Uuid, ffi = false);
bridge_get!(SenderKeyMessage::distribution_id -> Uuid);
bridge_get!(SenderKeyMessage::chain_id -> u32);
bridge_get!(SenderKeyMessage::iteration -> u32);
// Alternate form that copies into an existing buffer.
#[bridge_fn_void(jni = false, node = false)]
fn SenderKeyMessageGetDistributionId(out: &mut [u8; 16], obj: &SenderKeyMessage) -> Result<()> {
*out = *obj.distribution_id().as_bytes();
Ok(())
}
// For testing
#[bridge_fn]
fn SenderKeyMessage_New(
@ -392,20 +385,10 @@ bridge_get_buffer!(
SenderKeyDistributionMessage::serialized as Serialize -> &[u8],
jni = "SenderKeyDistributionMessage_1GetSerialized"
);
bridge_get!(SenderKeyDistributionMessage::distribution_id -> Uuid, ffi = false);
bridge_get!(SenderKeyDistributionMessage::distribution_id -> Uuid);
bridge_get!(SenderKeyDistributionMessage::chain_id -> u32);
bridge_get!(SenderKeyDistributionMessage::iteration -> u32);
// Alternate form that copies into an existing buffer.
#[bridge_fn_void(jni = false, node = false)]
fn SenderKeyDistributionMessageGetDistributionId(
out: &mut [u8; 16],
obj: &SenderKeyDistributionMessage,
) -> Result<()> {
*out = *obj.distribution_id()?.as_bytes();
Ok(())
}
// For testing
#[bridge_fn]
fn SenderKeyDistributionMessage_New(

View File

@ -586,15 +586,15 @@ SignalFfiError *signal_sender_key_message_serialize(const unsigned char **out,
size_t *out_len,
const SignalSenderKeyMessage *obj);
SignalFfiError *signal_sender_key_message_get_distribution_id(uint8_t (*out)[16],
const SignalSenderKeyMessage *obj);
SignalFfiError *signal_sender_key_message_get_chain_id(uint32_t *out,
const SignalSenderKeyMessage *obj);
SignalFfiError *signal_sender_key_message_get_iteration(uint32_t *out,
const SignalSenderKeyMessage *obj);
SignalFfiError *signal_sender_key_message_get_distribution_id(uint8_t (*out)[16],
const SignalSenderKeyMessage *obj);
SignalFfiError *signal_sender_key_message_new(SignalSenderKeyMessage **out,
uint8_t message_version,
const uint8_t (*distribution_id)[16],
@ -620,15 +620,15 @@ SignalFfiError *signal_sender_key_distribution_message_serialize(const unsigned
size_t *out_len,
const SignalSenderKeyDistributionMessage *obj);
SignalFfiError *signal_sender_key_distribution_message_get_distribution_id(uint8_t (*out)[16],
const SignalSenderKeyDistributionMessage *obj);
SignalFfiError *signal_sender_key_distribution_message_get_chain_id(uint32_t *out,
const SignalSenderKeyDistributionMessage *obj);
SignalFfiError *signal_sender_key_distribution_message_get_iteration(uint32_t *out,
const SignalSenderKeyDistributionMessage *obj);
SignalFfiError *signal_sender_key_distribution_message_get_distribution_id(uint8_t (*out)[16],
const SignalSenderKeyDistributionMessage *obj);
SignalFfiError *signal_sender_key_distribution_message_new(SignalSenderKeyDistributionMessage **out,
uint8_t message_version,
const uint8_t (*distribution_id)[16],