5#ifndef OMEMOLIBWRAPPERS_H
6#define OMEMOLIBWRAPPERS_H
9#include <session_builder.h>
10#include <session_cipher.h>
11#include <signal_protocol.h>
16template<
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; }
54void omemoLibUnrefHelper(T *ptr)
60using RefCountedPtr = OmemoLibPtr<T, omemoLibUnrefHelper<T>>;
62static QByteArray omemoLibBufferToByteArray(signal_buffer *buffer)
64 return QByteArray(
reinterpret_cast<const char *
>(signal_buffer_data(buffer)), signal_buffer_len(buffer));
67static signal_buffer *omemoLibBufferFromByteArray(
const QByteArray &bytes)
69 return signal_buffer_create(
reinterpret_cast<const unsigned char *
>(bytes.constData()), bytes.size());
72template<
void(destruct)(signal_buffer *)>
73class 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());
87class 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) };
102class 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) };
117using KeyListNodePtr = OmemoLibPtr<signal_protocol_key_helper_pre_key_list_node, signal_protocol_key_helper_key_list_free>;
118using SessionCipherPtr = OmemoLibPtr<session_cipher, session_cipher_free>;
119using SessionBuilderPtr = OmemoLibPtr<session_builder, session_builder_free>;
120using OmemoContextPtr = OmemoLibPtr<signal_context, signal_context_destroy>;
121using StoreContextPtr = OmemoLibPtr<signal_protocol_store_context, signal_protocol_store_context_destroy>;