From 97c661271b825120b841860771155aa5592019e7 Mon Sep 17 00:00:00 2001 From: Paul Fariello Date: Mon, 11 Mar 2019 06:46:02 +0140 Subject: Add support for libsignal-protocol-c 2.3.2 --- configure.ac | 32 ++++++++++++++++++-------------- src/omemo/store.c | 15 +++++++++++++++ src/omemo/store.h | 10 ++++++++++ src/xmpp/message.c | 2 +- 4 files changed, 44 insertions(+), 15 deletions(-) diff --git a/configure.ac b/configure.ac index edf72d60..0c4d005c 100644 --- a/configure.ac +++ b/configure.ac @@ -266,23 +266,27 @@ if test "x$enable_otr" != xno; then [AC_MSG_NOTICE([libotr not found, otr encryption support not enabled])])]) fi -AM_CONDITIONAL([BUILD_OMEMO], [false]) +AM_CONDITIONAL([BUILD_OMEMO], [true]) if test "x$enable_omemo" != xno; then - AC_CHECK_LIB([signal-protocol-c], [signal_context_create], - [AM_CONDITIONAL([BUILD_OMEMO], [true]) - AC_DEFINE([HAVE_OMEMO], [1], [Have omemo]), - LIBS="-lsignal-protocol-c $LIBS"], - [AS_IF([test "x$enable_omemo" = xyes], - [AC_MSG_ERROR([libsignal-protocol-c is required for omemo support])], - [AC_MSG_NOTICE([libsignal-protocol-c not found, omemo support not enabled])])]) + PKG_CHECK_MODULES([libsignal], [libsignal-protocol-c >= 2.3.2], + [LIBS="-lsignal-protocol-c $LIBS"], + [AC_MSG_NOTICE([libsignal >= 2.3.2 not found, checking for libsignal 2.3.x...]) + PKG_CHECK_MODULES([libsignal], [libsignal-protocol-c >= 2.3.0], + [LIBS="-lsignal-protocol-c $LIBS" + AC_DEFINE([HAVE_LIBSIGNAL_LT_2_3_2], [1], [Have libsignal-protocol-c < 2.3.2])], + [AM_CONDITIONAL([BUILD_OMEMO], [false]) + AS_IF([test "x$enable_omemo" = xyes], + [AC_MSG_ERROR([libsignal-protocol-c is required for omemo support])], + [AC_MSG_NOTICE([libsignal-protocol-c not found, omemo support not enabled])])])]) AC_CHECK_LIB([gcrypt], [gcry_check_version], - [AM_CONDITIONAL([BUILD_OMEMO], [true]) - AC_DEFINE([HAVE_OMEMO], [1], [Have omemo]), - LIBS="-lgcrypt $LIBS"], - [AS_IF([test "x$enable_omemo" = xyes], - [AC_MSG_ERROR([gcrypt is required for omemo support])], - [AC_MSG_NOTICE([gcrypt not found, omemo support not enabled])])]) + [LIBS="-lgcrypt $LIBS"], + [AM_CONDITIONAL([BUILD_OMEMO], [false]) + AS_IF([test "x$enable_omemo" = xyes], + [AC_MSG_ERROR([gcrypt is required for omemo support])], + [AC_MSG_NOTICE([gcrypt not found, omemo support not enabled])])]) + + AM_COND_IF([BUILD_OMEMO], [AC_DEFINE([HAVE_OMEMO], [1], [Have OMEMO])]) fi AS_IF([test "x$with_themes" = xno], diff --git a/src/omemo/store.c b/src/omemo/store.c index 93289b90..eee58e19 100644 --- a/src/omemo/store.c +++ b/src/omemo/store.c @@ -1,6 +1,7 @@ #include #include +#include "config.h" #include "omemo/omemo.h" #include "omemo/store.h" @@ -30,9 +31,15 @@ identity_key_store_new(identity_key_store_t *identity_key_store) identity_key_store->public = NULL; } +#ifdef HAVE_LIBSIGNAL_LT_2_3_2 int load_session(signal_buffer **record, const signal_protocol_address *address, void *user_data) +#else +int +load_session(signal_buffer **record, signal_buffer **user_record, + const signal_protocol_address *address, void *user_data) +#endif { GHashTable *session_store = (GHashTable *)user_data; GHashTable *device_store = NULL; @@ -76,9 +83,17 @@ get_sub_device_sessions(signal_int_list **sessions, const char *name, return SG_SUCCESS; } +#ifdef HAVE_LIBSIGNAL_LT_2_3_2 int store_session(const signal_protocol_address *address, uint8_t *record, size_t record_len, void *user_data) +#else +int +store_session(const signal_protocol_address *address, + uint8_t *record, size_t record_len, + uint8_t *user_record, size_t user_record_len, + void *user_data) +#endif { GHashTable *session_store = (GHashTable *)user_data; GHashTable *device_store = NULL; diff --git a/src/omemo/store.h b/src/omemo/store.h index ad33d5a5..986b7c42 100644 --- a/src/omemo/store.h +++ b/src/omemo/store.h @@ -1,5 +1,7 @@ #include +#include "config.h" + #define OMEMO_STORE_GROUP_IDENTITY "identity" #define OMEMO_STORE_KEY_DEVICE_ID "device_id" #define OMEMO_STORE_KEY_REGISTRATION_ID "registration_id" @@ -28,7 +30,11 @@ void identity_key_store_new(identity_key_store_t *identity_key_store); * @param address the address of the remote client * @return 1 if the session was loaded, 0 if the session was not found, negative on failure */ +#ifdef HAVE_LIBSIGNAL_LT_2_3_2 int load_session(signal_buffer **record, const signal_protocol_address *address, void *user_data); +#else +int load_session(signal_buffer **record, signal_buffer **user_record, const signal_protocol_address *address, void *user_data); +#endif /** * Returns all known devices with active sessions for a recipient @@ -50,7 +56,11 @@ int get_sub_device_sessions(signal_int_list **sessions, const char *name, size_t * @param record_len length of the serialized session record * @return 0 on success, negative on failure */ +#ifdef HAVE_LIBSIGNAL_LT_2_3_2 int store_session(const signal_protocol_address *address, uint8_t *record, size_t record_len, void *user_data); +#else +int store_session(const signal_protocol_address *address, uint8_t *record, size_t record_len, uint8_t *user_record, size_t user_record_len, void *user_data); +#endif /** * Determine whether there is a committed session record for a diff --git a/src/xmpp/message.c b/src/xmpp/message.c index d078e1e7..6ca63b08 100644 --- a/src/xmpp/message.c +++ b/src/xmpp/message.c @@ -836,7 +836,7 @@ _private_chat_handler(xmpp_stanza_t *const stanza, const char *const fulljid) static gboolean _handle_carbons(xmpp_stanza_t *const stanza) { - char *message_txt; + char *message_txt = NULL; xmpp_stanza_t *carbons = xmpp_stanza_get_child_by_ns(stanza, STANZA_NS_CARBONS); if (!carbons) { return FALSE; -- cgit 1.4.1-2-gfad0