5 #ifndef OMEMOLIBWRAPPERS_H 6 #define OMEMOLIBWRAPPERS_H 8 #include <key_helper.h> 9 #include <session_builder.h> 10 #include <session_cipher.h> 11 #include <signal_protocol.h> 16 template<
typename T,
void(destruct)(T *)>
22 OmemoLibPtr(T *ptr =
nullptr) : m_ptr(ptr) { }
23 OmemoLibPtr(
const OmemoLibPtr &) =
delete;
30 OmemoLibPtr &operator=(
const OmemoLibPtr &) =
delete;
31 OmemoLibPtr<T, destruct> &operator=(T *ptr)
36 operator bool()
const {
return m_ptr !=
nullptr; }
37 T *operator->()
const {
return m_ptr; }
38 T *
get()
const {
return m_ptr; }
54 void omemoLibUnrefHelper(T *ptr)
60 using RefCountedPtr = OmemoLibPtr<T, omemoLibUnrefHelper<T>>;
62 static QByteArray omemoLibBufferToByteArray(signal_buffer *buffer)
64 return QByteArray(reinterpret_cast<const char *>(signal_buffer_data(buffer)), signal_buffer_len(buffer));
67 static signal_buffer *omemoLibBufferFromByteArray(
const QByteArray &bytes)
69 return signal_buffer_create(reinterpret_cast<const unsigned char *>(bytes.constData()), bytes.size());
72 template<
void(destruct)(signal_buffer *)>
73 class BufferPtrBase :
public OmemoLibPtr<signal_buffer, destruct>
76 BufferPtrBase(signal_buffer *ptr)
77 : OmemoLibPtr<signal_buffer, destruct>(ptr)
81 QByteArray toByteArray()
const 83 return omemoLibBufferToByteArray(this->
get());
87 class BufferSecurePtr :
public BufferPtrBase<signal_buffer_bzero_free>
90 BufferSecurePtr() : BufferPtrBase<signal_buffer_bzero_free>(nullptr) { }
91 BufferSecurePtr(signal_buffer *ptr)
92 : BufferPtrBase<signal_buffer_bzero_free>(ptr)
96 static BufferSecurePtr fromByteArray(
const QByteArray &bytes)
98 return { omemoLibBufferFromByteArray(bytes) };
102 class BufferPtr :
public BufferPtrBase<signal_buffer_free>
105 BufferPtr() : BufferPtrBase<signal_buffer_free>(nullptr) { }
106 BufferPtr(signal_buffer *ptr)
107 : BufferPtrBase<signal_buffer_free>(ptr)
111 static BufferPtr fromByteArray(
const QByteArray &bytes)
113 return { omemoLibBufferFromByteArray(bytes) };
117 using KeyListNodePtr = OmemoLibPtr<signal_protocol_key_helper_pre_key_list_node, signal_protocol_key_helper_key_list_free>;
118 using SessionCipherPtr = OmemoLibPtr<session_cipher, session_cipher_free>;
119 using SessionBuilderPtr = OmemoLibPtr<session_builder, session_builder_free>;
120 using OmemoContextPtr = OmemoLibPtr<signal_context, signal_context_destroy>;
121 using StoreContextPtr = OmemoLibPtr<signal_protocol_store_context, signal_protocol_store_context_destroy>;
123 #endif // OMEMOLIBWRAPPERS_H