about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorPaul Fariello <paul@fariello.eu>2019-03-11 06:46:02 +0140
committerPaul Fariello <paul@fariello.eu>2019-04-10 17:12:31 +0200
commit97c661271b825120b841860771155aa5592019e7 (patch)
treee44c713aaade6d22b2cfd501a15b73e0ef7cb248
parentb3be504e841be55f917a3841d9cddf4ce076cc04 (diff)
downloadprofani-tty-97c661271b825120b841860771155aa5592019e7.tar.gz
Add support for libsignal-protocol-c 2.3.2
-rw-r--r--configure.ac32
-rw-r--r--src/omemo/store.c15
-rw-r--r--src/omemo/store.h10
-rw-r--r--src/xmpp/message.c2
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 <glib.h>
 #include <signal/signal_protocol.h>
 
+#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 <signal/signal_protocol.h>
 
+#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;