Merge pull request #1641 from profanity-im/clean-configure
Clean up configure.ac
This commit is contained in:
10
Makefile.am
10
Makefile.am
@@ -187,9 +187,6 @@ pgp_sources = \
|
|||||||
pgp_unittest_sources = \
|
pgp_unittest_sources = \
|
||||||
tests/unittests/pgp/stub_gpg.c
|
tests/unittests/pgp/stub_gpg.c
|
||||||
|
|
||||||
otr3_sources = \
|
|
||||||
src/otr/otrlib.h src/otr/otrlibv3.c src/otr/otr.h src/otr/otr.c
|
|
||||||
|
|
||||||
otr4_sources = \
|
otr4_sources = \
|
||||||
src/otr/otrlib.h src/otr/otrlibv4.c src/otr/otr.h src/otr/otr.c
|
src/otr/otrlib.h src/otr/otrlibv4.c src/otr/otr.h src/otr/otr.c
|
||||||
|
|
||||||
@@ -229,13 +226,8 @@ endif
|
|||||||
|
|
||||||
if BUILD_OTR
|
if BUILD_OTR
|
||||||
unittest_sources += $(otr_unittest_sources)
|
unittest_sources += $(otr_unittest_sources)
|
||||||
if BUILD_OTR3
|
|
||||||
core_sources += $(otr3_sources)
|
|
||||||
endif
|
|
||||||
if BUILD_OTR4
|
|
||||||
core_sources += $(otr4_sources)
|
core_sources += $(otr4_sources)
|
||||||
endif
|
endif
|
||||||
endif
|
|
||||||
|
|
||||||
if BUILD_OMEMO
|
if BUILD_OMEMO
|
||||||
core_sources += $(omemo_sources)
|
core_sources += $(omemo_sources)
|
||||||
@@ -244,7 +236,7 @@ endif
|
|||||||
|
|
||||||
all_c_sources = $(core_sources) $(unittest_sources) \
|
all_c_sources = $(core_sources) $(unittest_sources) \
|
||||||
$(pgp_sources) $(pgp_unittest_sources) \
|
$(pgp_sources) $(pgp_unittest_sources) \
|
||||||
$(otr3_sources) $(otr4_sources) $(otr_unittest_sources) \
|
$(otr4_sources) $(otr_unittest_sources) \
|
||||||
$(omemo_sources) $(omemo_unittest_sources) \
|
$(omemo_sources) $(omemo_unittest_sources) \
|
||||||
$(c_sources) $(python_sources) \
|
$(c_sources) $(python_sources) \
|
||||||
$(main_source)
|
$(main_source)
|
||||||
|
|||||||
@@ -1,3 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
./configure --enable-python-plugins --enable-c-plugins CFLAGS='-g -O0' CXXFLAGS='-g -O0'
|
|
||||||
239
configure.ac
239
configure.ac
@@ -1,24 +1,21 @@
|
|||||||
# -*- Autoconf -*-
|
|
||||||
# Process this file with autoconf to produce a configure script.
|
# Process this file with autoconf to produce a configure script.
|
||||||
|
|
||||||
AC_INIT([profanity],[0.12.0],[jubalh@iodoru.org])
|
AC_PREREQ([2.69])
|
||||||
|
AC_INIT([profanity],[0.12.0],[jubalh@iodoru.org],[profanity],[https://profanity-im.github.io/])
|
||||||
AC_CONFIG_AUX_DIR([build-aux])
|
AC_CONFIG_AUX_DIR([build-aux])
|
||||||
AC_CONFIG_MACRO_DIR([m4])
|
AC_CONFIG_MACRO_DIR([m4])
|
||||||
AC_CONFIG_SRCDIR([src/main.c])
|
AC_CONFIG_SRCDIR([src/main.c])
|
||||||
AC_CONFIG_HEADERS([src/config.h])
|
AC_CONFIG_HEADERS([src/config.h])
|
||||||
AM_INIT_AUTOMAKE([foreign subdir-objects])
|
AM_INIT_AUTOMAKE([foreign subdir-objects])
|
||||||
|
|
||||||
### Checks for programs.
|
|
||||||
AC_PROG_CC
|
AC_PROG_CC
|
||||||
LT_INIT
|
LT_INIT
|
||||||
|
|
||||||
## Check for LFS
|
|
||||||
AC_SYS_LARGEFILE
|
AC_SYS_LARGEFILE
|
||||||
|
|
||||||
### Get canonical host
|
## Determine platform
|
||||||
AC_CANONICAL_HOST
|
AC_CANONICAL_TARGET
|
||||||
PLATFORM="unknown"
|
PLATFORM="unknown"
|
||||||
AS_CASE([$host_os],
|
AS_CASE([$target_os],
|
||||||
[freebsd*], [PLATFORM="freebsd"],
|
[freebsd*], [PLATFORM="freebsd"],
|
||||||
[netbsd*], [PLATFORM="netbsd"],
|
[netbsd*], [PLATFORM="netbsd"],
|
||||||
[openbsd*], [PLATFORM="openbsd"],
|
[openbsd*], [PLATFORM="openbsd"],
|
||||||
@@ -28,7 +25,7 @@ AS_CASE([$host_os],
|
|||||||
|
|
||||||
PACKAGE_STATUS="development"
|
PACKAGE_STATUS="development"
|
||||||
|
|
||||||
### Get git branch and revision if in development
|
## Get git branch and revision if in development
|
||||||
if test "x$PACKAGE_STATUS" = xdevelopment; then
|
if test "x$PACKAGE_STATUS" = xdevelopment; then
|
||||||
AM_CONDITIONAL([INCLUDE_GIT_VERSION], [true])
|
AM_CONDITIONAL([INCLUDE_GIT_VERSION], [true])
|
||||||
AC_DEFINE([HAVE_GIT_VERSION], [1], [Include git info])
|
AC_DEFINE([HAVE_GIT_VERSION], [1], [Include git info])
|
||||||
@@ -43,10 +40,10 @@ AS_IF([test "x$PLATFORM" = xcygwin],
|
|||||||
AS_IF([test "x$PLATFORM" = xosx],
|
AS_IF([test "x$PLATFORM" = xosx],
|
||||||
[AC_DEFINE([PLATFORM_OSX], [1], [OSx])])
|
[AC_DEFINE([PLATFORM_OSX], [1], [OSx])])
|
||||||
|
|
||||||
### Environment variables
|
## Environment variables
|
||||||
AC_ARG_VAR([PYTHON_FRAMEWORK], [Set base directory for Python Framework])
|
AC_ARG_VAR([PYTHON_FRAMEWORK], [Set base directory for Python Framework])
|
||||||
|
|
||||||
### Options
|
## Options
|
||||||
AC_ARG_ENABLE([notifications],
|
AC_ARG_ENABLE([notifications],
|
||||||
[AS_HELP_STRING([--enable-notifications], [enable desktop notifications])])
|
[AS_HELP_STRING([--enable-notifications], [enable desktop notifications])])
|
||||||
AC_ARG_ENABLE([python-plugins],
|
AC_ARG_ENABLE([python-plugins],
|
||||||
@@ -68,9 +65,31 @@ AC_ARG_WITH([themes],
|
|||||||
AC_ARG_ENABLE([icons-and-clipboard],
|
AC_ARG_ENABLE([icons-and-clipboard],
|
||||||
[AS_HELP_STRING([--enable-icons-and-clipboard], [enable GTK tray icons and clipboard paste support])])
|
[AS_HELP_STRING([--enable-icons-and-clipboard], [enable GTK tray icons and clipboard paste support])])
|
||||||
|
|
||||||
|
# Required dependencies
|
||||||
|
|
||||||
|
AC_CHECK_FUNCS([atexit memset strdup strstr])
|
||||||
|
|
||||||
|
PKG_CHECK_MODULES([glib], [glib-2.0 >= 2.62.0], [],
|
||||||
|
[AC_MSG_ERROR([glib 2.62.0 or higher is required])])
|
||||||
|
PKG_CHECK_MODULES([gio], [gio-2.0], [],
|
||||||
|
[AC_MSG_ERROR([libgio-2.0 from glib-2.0 is required])])
|
||||||
|
|
||||||
|
AC_SEARCH_LIBS([fmod], [m], [],
|
||||||
|
[AC_MSG_ERROR([math.h is required])], [])
|
||||||
|
|
||||||
|
PKG_CHECK_MODULES([curl], [libcurl >= 7.62.0], [],
|
||||||
|
[AC_CHECK_LIB([curl], [main], [],
|
||||||
|
[AC_MSG_ERROR([libcurl 7.62.0 or higher is required])])])
|
||||||
|
|
||||||
|
PKG_CHECK_MODULES([SQLITE], [sqlite3 >= 3.22.0], [],
|
||||||
|
[AC_MSG_ERROR([sqlite3 3.22.0 or higher is required])])
|
||||||
|
|
||||||
|
ACX_PTHREAD([], [AC_MSG_ERROR([pthread is required])])
|
||||||
|
AS_IF([test "x$PTHREAD_CC" != x], [ CC="$PTHREAD_CC" ])
|
||||||
|
|
||||||
### plugins
|
### plugins
|
||||||
|
|
||||||
# python
|
## python
|
||||||
if test "x$enable_plugins" = xno; then
|
if test "x$enable_plugins" = xno; then
|
||||||
AM_CONDITIONAL([BUILD_PYTHON_API], [false])
|
AM_CONDITIONAL([BUILD_PYTHON_API], [false])
|
||||||
elif test "x$enable_python_plugins" != xno; then
|
elif test "x$enable_python_plugins" != xno; then
|
||||||
@@ -101,7 +120,7 @@ else
|
|||||||
AM_CONDITIONAL([BUILD_PYTHON_API], [false])
|
AM_CONDITIONAL([BUILD_PYTHON_API], [false])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# c
|
## C
|
||||||
if test "x$PLATFORM" = xcygwin; then
|
if test "x$PLATFORM" = xcygwin; then
|
||||||
AM_CONDITIONAL([BUILD_C_API], [false])
|
AM_CONDITIONAL([BUILD_C_API], [false])
|
||||||
else
|
else
|
||||||
@@ -128,18 +147,11 @@ else
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# threading
|
## Check for libstrophe
|
||||||
ACX_PTHREAD([], [AC_MSG_ERROR([pthread is required])])
|
|
||||||
LIBS="$PTHREAD_LIBS $LIBS"
|
|
||||||
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
|
|
||||||
AS_IF([test "x$PTHREAD_CC" != x], [ CC="$PTHREAD_CC" ])
|
|
||||||
|
|
||||||
### Check for libstrophe
|
|
||||||
PKG_CHECK_MODULES([libstrophe], [libstrophe >= 0.11.0],
|
PKG_CHECK_MODULES([libstrophe], [libstrophe >= 0.11.0],
|
||||||
[LIBS="$libstrophe_LIBS $LIBS" CFLAGS="$CFLAGS $libstrophe_CFLAGS" XMPP_LIB="libstrophe" AC_DEFINE([HAVE_LIBSTROPHE], [1], [libstrophe])],
|
[LIBS="$libstrophe_LIBS $LIBS" CFLAGS="$CFLAGS $libstrophe_CFLAGS"])
|
||||||
[XMPP_LIB=""])
|
|
||||||
|
|
||||||
AC_MSG_CHECKING([whether ${XMPP_LIB} works])
|
AC_MSG_CHECKING([whether libstrophe works])
|
||||||
AC_LINK_IFELSE([AC_LANG_SOURCE([[
|
AC_LINK_IFELSE([AC_LANG_SOURCE([[
|
||||||
#include <strophe.h>
|
#include <strophe.h>
|
||||||
|
|
||||||
@@ -149,9 +161,9 @@ AC_LINK_IFELSE([AC_LANG_SOURCE([[
|
|||||||
}
|
}
|
||||||
]])],
|
]])],
|
||||||
[AC_MSG_RESULT([yes])],
|
[AC_MSG_RESULT([yes])],
|
||||||
[AC_MSG_ERROR([${XMPP_LIB} is broken, check config.log for details])])
|
[AC_MSG_ERROR([libstrophe is broken, check config.log for details])])
|
||||||
|
|
||||||
### Check for curses library
|
## Check for curses library
|
||||||
PKG_CHECK_MODULES([ncursesw], [ncursesw],
|
PKG_CHECK_MODULES([ncursesw], [ncursesw],
|
||||||
[NCURSES_CFLAGS="$ncursesw_CFLAGS"; NCURSES_LIBS="$ncursesw_LIBS"; CURSES="ncursesw"],
|
[NCURSES_CFLAGS="$ncursesw_CFLAGS"; NCURSES_LIBS="$ncursesw_LIBS"; CURSES="ncursesw"],
|
||||||
[PKG_CHECK_MODULES([ncurses], [ncurses],
|
[PKG_CHECK_MODULES([ncurses], [ncurses],
|
||||||
@@ -161,10 +173,10 @@ PKG_CHECK_MODULES([ncursesw], [ncursesw],
|
|||||||
[AC_CHECK_LIB([curses], [main],
|
[AC_CHECK_LIB([curses], [main],
|
||||||
[LIBS="$LIBS -lcurses"; CURSES="curses"],
|
[LIBS="$LIBS -lcurses"; CURSES="curses"],
|
||||||
[AC_MSG_ERROR([ncurses or curses is required for profanity])])])])])])
|
[AC_MSG_ERROR([ncurses or curses is required for profanity])])])])])])
|
||||||
AM_CPPFLAGS="$AM_CPPFLAGS $NCURSES_CFLAGS"
|
AM_CFLAGS="$AM_CFLAGS $NCURSES_CFLAGS"
|
||||||
LIBS="$NCURSES_LIBS $LIBS"
|
LIBS="$NCURSES_LIBS $LIBS"
|
||||||
|
|
||||||
### Check wide characters support in curses library
|
## Check wide characters support in curses library
|
||||||
CFLAGS_RESTORE="$CFLAGS"
|
CFLAGS_RESTORE="$CFLAGS"
|
||||||
CFLAGS="$CFLAGS $NCURSES_CFLAGS"
|
CFLAGS="$CFLAGS $NCURSES_CFLAGS"
|
||||||
AC_CACHE_CHECK([for wget_wch support in $CURSES], ncurses_cv_wget_wch,
|
AC_CACHE_CHECK([for wget_wch support in $CURSES], ncurses_cv_wget_wch,
|
||||||
@@ -183,32 +195,12 @@ CFLAGS="$CFLAGS_RESTORE"
|
|||||||
AS_IF([test "x$ncurses_cv_wget_wch" != xyes],
|
AS_IF([test "x$ncurses_cv_wget_wch" != xyes],
|
||||||
[AC_MSG_ERROR([ncurses does not support wide characters])])
|
[AC_MSG_ERROR([ncurses does not support wide characters])])
|
||||||
|
|
||||||
### Check for glib libraries
|
## Check for ncursesw/ncurses.h first, Arch linux uses ncurses.h for ncursesw
|
||||||
PKG_CHECK_MODULES([glib], [glib-2.0 >= 2.62.0], [],
|
AC_CHECK_HEADERS([ncursesw/ncurses.h], [], [])
|
||||||
[AC_MSG_ERROR([glib 2.62.0 or higher is required for profanity])])
|
AC_CHECK_HEADERS([ncurses.h], [], [])
|
||||||
PKG_CHECK_MODULES([gio], [gio-2.0], [],
|
AC_CHECK_HEADERS([curses.h], [], [])
|
||||||
[AC_MSG_ERROR([libgio-2.0 from glib-2.0 is required for profanity])])
|
|
||||||
|
|
||||||
### Check for other profanity dependencies
|
|
||||||
AC_SEARCH_LIBS([fmod], [m], [],
|
|
||||||
[AC_MSG_ERROR([math.h is required])], [])
|
|
||||||
|
|
||||||
PKG_CHECK_MODULES([curl], [libcurl >= 7.62.0], [],
|
|
||||||
[AC_CHECK_LIB([curl], [main], [],
|
|
||||||
[AC_MSG_ERROR([libcurl is required for profanity])])])
|
|
||||||
|
|
||||||
PKG_CHECK_MODULES([SQLITE], [sqlite3 >= 3.22.0], [],
|
|
||||||
[AC_MSG_ERROR([sqlite3 3.22.0 or higher is required for profanity])])
|
|
||||||
|
|
||||||
AS_IF([test "x$enable_icons_and_clipboard" != xno],
|
|
||||||
[PKG_CHECK_MODULES([GTK], [gtk+-3.0 >= 3.24.0],
|
|
||||||
[AC_DEFINE([HAVE_GTK], [1], [libgtk module])],
|
|
||||||
[AS_IF([test "x$enable_icons_and_clipboard" = xyes],
|
|
||||||
[PKG_CHECK_MODULES([GTK], [gtk+-2.0 >= 2.24.10],
|
|
||||||
[AC_DEFINE([HAVE_GTK], [1], [libgtk module])],
|
|
||||||
[AC_MSG_ERROR([gtk+-2.0 >= 2.24.10 or gtk+-3.0 >= 3.24.0 is required for icons and clipboard])],
|
|
||||||
[AC_MSG_NOTICE([gtk+-3.0/gtk+2.0 not found, icons and clipboard not enabled])])])])])
|
|
||||||
|
|
||||||
|
# Check for readline
|
||||||
AS_IF([test "x$PLATFORM" = xosx],
|
AS_IF([test "x$PLATFORM" = xosx],
|
||||||
[AC_PATH_PROG([BREW], [brew], ["failed"],
|
[AC_PATH_PROG([BREW], [brew], ["failed"],
|
||||||
[$PATH:/opt/homebrew/bin:/usr/local/bin])
|
[$PATH:/opt/homebrew/bin:/usr/local/bin])
|
||||||
@@ -229,17 +221,34 @@ AS_IF([test "x$PLATFORM" = xosx],
|
|||||||
[test "x$PLATFORM" = xopenbsd],
|
[test "x$PLATFORM" = xopenbsd],
|
||||||
[AC_CHECK_FILE([/usr/local/include/ereadline],
|
[AC_CHECK_FILE([/usr/local/include/ereadline],
|
||||||
[LIBS="-lereadline $LIBS"
|
[LIBS="-lereadline $LIBS"
|
||||||
AM_CPPFLAGS="-I/usr/local/include/ereadline $AM_CPPFLAGS"
|
AM_CFLAGS="-I/usr/local/include/ereadline $AM_CFLAGS"
|
||||||
AM_LDFLAGS="-L/usr/local/lib $AM_LDFLAGS"
|
AM_LDFLAGS="-L/usr/local/lib $AM_LDFLAGS"
|
||||||
AC_SUBST(AM_LDFLAGS)])],
|
AC_SUBST(AM_LDFLAGS)])],
|
||||||
|
|
||||||
[AC_CHECK_LIB([readline], [main], [],
|
[AC_CHECK_LIB([readline], [main], [],
|
||||||
[AC_MSG_ERROR([libreadline is required for profanity])])])
|
[AC_MSG_ERROR([libreadline is required for profanity])])])
|
||||||
|
|
||||||
### Check for desktop notification support
|
## Check for optional dependencies depending on feature flags
|
||||||
### Linux/FreeBSD require libnotify
|
|
||||||
### Windows uses native OS calls
|
dnl feature: icons-and-clipboard
|
||||||
### OSX requires terminal-notifier
|
AS_IF([test "x$enable_icons_and_clipboard" != xno],
|
||||||
|
[PKG_CHECK_MODULES([GTK], [gtk+-3.0 >= 3.24.0],
|
||||||
|
[AC_DEFINE([HAVE_GTK], [1], [libgtk module])],
|
||||||
|
[AS_IF([test "x$enable_icons_and_clipboard" = xyes],
|
||||||
|
[PKG_CHECK_MODULES([GTK], [gtk+-2.0 >= 2.24.10],
|
||||||
|
[AC_DEFINE([HAVE_GTK], [1], [libgtk module])],
|
||||||
|
[AC_MSG_ERROR([gtk+-2.0 >= 2.24.10 or gtk+-3.0 >= 3.24.0 is required for icons and clipboard])],
|
||||||
|
[AC_MSG_NOTICE([gtk+-3.0/gtk+2.0 not found, icons and clipboard not enabled])])])])])
|
||||||
|
|
||||||
|
ICONS_PATH='${pkgdatadir}/icons'
|
||||||
|
AC_SUBST(ICONS_PATH)
|
||||||
|
|
||||||
|
dnl feature: notifications
|
||||||
|
|
||||||
|
## Check for desktop notification support
|
||||||
|
## Linux/FreeBSD require libnotify
|
||||||
|
## Windows uses native OS calls
|
||||||
|
## OSX requires terminal-notifier
|
||||||
|
|
||||||
AS_IF([test "x$PLATFORM" = xosx],
|
AS_IF([test "x$PLATFORM" = xosx],
|
||||||
[AS_IF([test "x$enable_notifications" != xno],
|
[AS_IF([test "x$enable_notifications" != xno],
|
||||||
@@ -258,19 +267,15 @@ AS_IF([test "x$PLATFORM" = xosx],
|
|||||||
[AC_MSG_ERROR([libnotify is required but does not exist])],
|
[AC_MSG_ERROR([libnotify is required but does not exist])],
|
||||||
[AC_MSG_NOTICE([libnotify support will be disabled])])])])])
|
[AC_MSG_NOTICE([libnotify support will be disabled])])])])])
|
||||||
|
|
||||||
# TODO: rewrite this
|
dnl feature: xscreensaver
|
||||||
if test "x$with_xscreensaver" = xyes; then
|
AS_IF([test "x$enable_xscreensaver" != xno],
|
||||||
AC_CHECK_LIB([Xss], [main], [],
|
[PKG_CHECK_MODULES([xscrnsaver], [xscrnsaver],
|
||||||
[AC_MSG_ERROR([libXss is required for x autoaway support])])
|
[AC_MSG_NOTICE([xscreensaver support is enabled])],
|
||||||
AC_CHECK_LIB([X11], [main], [],
|
[AS_IF([test "x$enable_xscreensaver" = xyes],
|
||||||
[AC_MSG_ERROR([libX11 is required for x autoaway support])])
|
[AC_MSG_ERROR([xscreensaver is required but does not exist])],
|
||||||
elif test "x$with_xscreensaver" = x; then
|
[AC_MSG_NOTICE([xscreensaver support is disabled])])])])
|
||||||
AC_CHECK_LIB([Xss], [main], [],
|
|
||||||
[AC_MSG_NOTICE([libXss not found, falling back to profanity auto-away])])
|
|
||||||
AC_CHECK_LIB([X11], [main], [],
|
|
||||||
[AC_MSG_NOTICE([libX11 not found, falling back to profanity auto-away])])
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
dnl feature: pgp
|
||||||
AM_CONDITIONAL([BUILD_PGP], [false])
|
AM_CONDITIONAL([BUILD_PGP], [false])
|
||||||
if test "x$enable_pgp" != xno; then
|
if test "x$enable_pgp" != xno; then
|
||||||
AC_CHECK_LIB([gpgme], [main],
|
AC_CHECK_LIB([gpgme], [main],
|
||||||
@@ -279,45 +284,34 @@ if test "x$enable_pgp" != xno; then
|
|||||||
AC_PATH_PROG([GPGME_CONFIG], [gpgme-config], ["failed"])
|
AC_PATH_PROG([GPGME_CONFIG], [gpgme-config], ["failed"])
|
||||||
AS_IF([test "x$GPGME_CONFIG" = xfailed],
|
AS_IF([test "x$GPGME_CONFIG" = xfailed],
|
||||||
[LIBS="-lgpgme $LIBS"],
|
[LIBS="-lgpgme $LIBS"],
|
||||||
[LIBS="`$GPGME_CONFIG --libs` $LIBS" AM_CPPFLAGS="`$GPGME_CONFIG --cflags` $AM_CPPFLAGS"])],
|
[LIBS="`$GPGME_CONFIG --libs` $LIBS" AM_CFLAGS="`$GPGME_CONFIG --cflags` $AM_CFLAGS"])],
|
||||||
[AS_IF([test "x$enable_pgp" = xyes],
|
[AS_IF([test "x$enable_pgp" = xyes],
|
||||||
[AC_MSG_ERROR([libgpgme is required for pgp support])],
|
[AC_MSG_ERROR([libgpgme is required for pgp support])],
|
||||||
[AC_MSG_NOTICE([libgpgme not found, pgp support not enabled])])])
|
[AC_MSG_NOTICE([libgpgme not found, pgp support not enabled])])])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
dnl feature: otr
|
||||||
AM_CONDITIONAL([BUILD_OTR], [false])
|
AM_CONDITIONAL([BUILD_OTR], [false])
|
||||||
AM_CONDITIONAL([BUILD_OTR3], [false])
|
|
||||||
AM_CONDITIONAL([BUILD_OTR4], [false])
|
|
||||||
if test "x$enable_otr" != xno; then
|
if test "x$enable_otr" != xno; then
|
||||||
AM_CONDITIONAL([BUILD_OTR], [true])
|
AM_CONDITIONAL([BUILD_OTR], [true])
|
||||||
PKG_CHECK_MODULES([libotr], [libotr >= 4.0],
|
|
||||||
[AM_CONDITIONAL([BUILD_OTR4], [true])],
|
|
||||||
[AC_MSG_NOTICE([libotr >= 4.0 not found, checking for libotr-3.x...])
|
|
||||||
PKG_CHECK_MODULES([libotr], [libotr >= 3.0],
|
|
||||||
[AM_CONDITIONAL([BUILD_OTR3], [true])],
|
|
||||||
[AM_CONDITIONAL([BUILD_OTR], [false])])])
|
|
||||||
|
|
||||||
AM_COND_IF([BUILD_OTR],
|
PKG_CHECK_MODULES([libotr], [libotr >= 4.0],
|
||||||
[LIBS="$libotr_LIBS $LIBS" CFLAGS="$CFLAGS $libotr_CFLAGS"
|
[LIBS="$libotr_LIBS $LIBS" CFLAGS="$libotr_CFLAGS $cflags"],
|
||||||
AC_DEFINE([HAVE_LIBOTR], [1], [Have libotr])],
|
[AM_CONDITIONAL([BUILD_OTR], [false])
|
||||||
[AS_IF([test "x$enable_otr" = xyes],
|
AS_IF([test "x$enable_otr" = xyes],
|
||||||
[AC_MSG_ERROR([libotr is required for otr encryption support])],
|
[AC_MSG_ERROR([libotr >= 4.0 is required for OTR support])],
|
||||||
[AC_MSG_NOTICE([libotr not found, otr encryption support not enabled])])])
|
[AC_MSG_NOTICE([libotr >= 4.0 not found, OTR support not enabled])])])
|
||||||
|
|
||||||
|
AM_COND_IF([BUILD_OTR], [AC_DEFINE([HAVE_LIBOTR], [1], [Have libotr])])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
dnl feature: omemo
|
||||||
AM_CONDITIONAL([BUILD_OMEMO], [false])
|
AM_CONDITIONAL([BUILD_OMEMO], [false])
|
||||||
if test "x$enable_omemo" != xno; then
|
if test "x$enable_omemo" != xno; then
|
||||||
AM_CONDITIONAL([BUILD_OMEMO], [true])
|
AM_CONDITIONAL([BUILD_OMEMO], [true])
|
||||||
PKG_CHECK_MODULES([libsignal], [libsignal-protocol-c >= 2.3.2],
|
PKG_CHECK_MODULES([libsignal], [libsignal-protocol-c >= 2.3.2],
|
||||||
[LIBS="-lsignal-protocol-c $LIBS"],
|
[LIBS="-lsignal-protocol-c $LIBS"],
|
||||||
[AC_MSG_NOTICE([libsignal >= 2.3.2 not found, checking for libsignal 2.3.x...])
|
[AC_MSG_NOTICE([libsignal-protocol-c >= 2.3.2 not found, OMEMO support not enabled])])
|
||||||
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_md_extract],
|
AC_CHECK_LIB([gcrypt], [gcry_md_extract],
|
||||||
[LIBS="-lgcrypt $LIBS"],
|
[LIBS="-lgcrypt $LIBS"],
|
||||||
@@ -329,6 +323,7 @@ if test "x$enable_omemo" != xno; then
|
|||||||
AM_COND_IF([BUILD_OMEMO], [AC_DEFINE([HAVE_OMEMO], [1], [Have OMEMO])])
|
AM_COND_IF([BUILD_OMEMO], [AC_DEFINE([HAVE_OMEMO], [1], [Have OMEMO])])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
dnl feature: themes
|
||||||
AS_IF([test "x$with_themes" = xno],
|
AS_IF([test "x$with_themes" = xno],
|
||||||
[THEMES_INSTALL="false"],
|
[THEMES_INSTALL="false"],
|
||||||
[THEMES_INSTALL="true"])
|
[THEMES_INSTALL="true"])
|
||||||
@@ -338,11 +333,10 @@ AS_IF([test "x$with_themes" = xno -o "x$with_themes" = xyes -o "x$with_themes" =
|
|||||||
AC_SUBST(THEMES_PATH)
|
AC_SUBST(THEMES_PATH)
|
||||||
AM_CONDITIONAL([THEMES_INSTALL], "$THEMES_INSTALL")
|
AM_CONDITIONAL([THEMES_INSTALL], "$THEMES_INSTALL")
|
||||||
|
|
||||||
ICONS_PATH='${pkgdatadir}/icons'
|
## Tests
|
||||||
AC_SUBST(ICONS_PATH)
|
|
||||||
|
|
||||||
### cmocka is required only for tests, profanity shouldn't be linked with it
|
# cmocka is required only for tests, profanity shouldn't be linked with it
|
||||||
### TODO: pass cmocka_CFLAGS and cmocka_LIBS to Makefile.am
|
# TODO: pass cmocka_CFLAGS and cmocka_LIBS to Makefile.am
|
||||||
PKG_CHECK_MODULES([cmocka], [cmocka], [],
|
PKG_CHECK_MODULES([cmocka], [cmocka], [],
|
||||||
[AC_MSG_NOTICE([cmocka is not found, will not be able to run tests])])
|
[AC_MSG_NOTICE([cmocka is not found, will not be able to run tests])])
|
||||||
|
|
||||||
@@ -353,43 +347,42 @@ AM_CONDITIONAL([HAVE_EXPECT], [false])
|
|||||||
AC_CHECK_LIB([expect], [exp_expectl], [AM_CONDITIONAL([HAVE_EXPECT], [true])],
|
AC_CHECK_LIB([expect], [exp_expectl], [AM_CONDITIONAL([HAVE_EXPECT], [true])],
|
||||||
[AC_MSG_NOTICE([libexpect not found, will not be able to run functional tests])])
|
[AC_MSG_NOTICE([libexpect not found, will not be able to run functional tests])])
|
||||||
|
|
||||||
### Check for ncursesw/ncurses.h first, Arch linux uses ncurses.h for ncursesw
|
## Default parameters
|
||||||
AC_CHECK_HEADERS([ncursesw/ncurses.h], [], [])
|
|
||||||
AC_CHECK_HEADERS([ncurses.h], [], [])
|
|
||||||
AC_CHECK_HEADERS([curses.h], [], [])
|
|
||||||
|
|
||||||
### Default parameters
|
|
||||||
AM_CFLAGS="-Wall -Wno-deprecated-declarations -std=gnu99"
|
AM_CFLAGS="-Wall -Wno-deprecated-declarations -std=gnu99"
|
||||||
|
AM_LDFLAGS="$AM_LDFLAGS -export-dynamic"
|
||||||
|
|
||||||
AS_IF([test "x$PACKAGE_STATUS" = xdevelopment],
|
AS_IF([test "x$PACKAGE_STATUS" = xdevelopment],
|
||||||
[AM_CFLAGS="$AM_CFLAGS -Wunused -Werror"])
|
[AM_CFLAGS="$AM_CFLAGS -Wunused -Werror"])
|
||||||
AS_IF([test "x$PLATFORM" = xosx],
|
AS_IF([test "x$PLATFORM" = xosx],
|
||||||
[AM_CFLAGS="$AM_CFLAGS -Qunused-arguments"])
|
[AM_CFLAGS="$AM_CFLAGS -Qunused-arguments"])
|
||||||
AM_LDFLAGS="$AM_LDFLAGS -export-dynamic"
|
|
||||||
AM_CPPFLAGS="$AM_CPPFLAGS $glib_CFLAGS $gio_CFLAGS $curl_CFLAGS $libnotify_CFLAGS $PYTHON_CPPFLAGS ${GTK_CFLAGS} ${SQLITE_CFLAGS}"
|
AM_CFLAGS="$AM_CFLAGS $PTHREAD_CFLAGS $glib_CFLAGS $gio_CFLAGS $curl_CFLAGS ${SQLITE_CFLAGS}"
|
||||||
AM_CPPFLAGS="$AM_CPPFLAGS -DTHEMES_PATH=\"\\\"$THEMES_PATH\\\"\" -DICONS_PATH=\"\\\"$ICONS_PATH\\\"\" -DGLOBAL_PYTHON_PLUGINS_PATH=\"\\\"$GLOBAL_PYTHON_PLUGINS_PATH\\\"\" -DGLOBAL_C_PLUGINS_PATH=\"\\\"$GLOBAL_C_PLUGINS_PATH\\\"\""
|
AM_CFLAGS="$AM_CFLAGS $libnotify_CFLAGS ${GTK_CFLAGS} $PYTHON_CPPFLAGS" dnl https://bugs.python.org/issue15018
|
||||||
LIBS="$glib_LIBS $gio_LIBS $curl_LIBS $libnotify_LIBS $PYTHON_LIBS $PYTHON_EXTRA_LIBS $PYTHON_LDFLAGS ${GTK_LIBS} ${SQLITE_LIBS} $LIBS"
|
AM_CFLAGS="$AM_CFLAGS -DTHEMES_PATH=\"\\\"$THEMES_PATH\\\"\" -DICONS_PATH=\"\\\"$ICONS_PATH\\\"\" -DGLOBAL_PYTHON_PLUGINS_PATH=\"\\\"$GLOBAL_PYTHON_PLUGINS_PATH\\\"\" -DGLOBAL_C_PLUGINS_PATH=\"\\\"$GLOBAL_C_PLUGINS_PATH\\\"\""
|
||||||
|
LIBS="$glib_LIBS $gio_LIBS $PTHREAD_LIBS $curl_LIBS $libnotify_LIBS $PYTHON_LIBS $PYTHON_EXTRA_LIBS $PYTHON_LDFLAGS ${GTK_LIBS} ${SQLITE_LIBS} $LIBS"
|
||||||
|
|
||||||
AC_SUBST(AM_LDFLAGS)
|
AC_SUBST(AM_LDFLAGS)
|
||||||
AC_SUBST(AM_CFLAGS)
|
AC_SUBST(AM_CFLAGS)
|
||||||
AC_SUBST(AM_CPPFLAGS)
|
AC_SUBST(AM_CPPFLAGS)
|
||||||
|
|
||||||
### Checks for library functions.
|
## Output
|
||||||
AC_CHECK_FUNCS([atexit memset strdup strstr])
|
|
||||||
|
|
||||||
AC_CONFIG_FILES([Makefile])
|
AC_CONFIG_FILES([Makefile])
|
||||||
AC_OUTPUT
|
AC_OUTPUT
|
||||||
|
|
||||||
echo ""
|
AC_MSG_NOTICE([Summary of build options:
|
||||||
echo "PLATFORM : $host_os"
|
PLATFORM : $target_os
|
||||||
echo "PACKAGE_STATUS : $PACKAGE_STATUS"
|
PACKAGE_STATUS : $PACKAGE_STATUS
|
||||||
echo "AM_CFLAGS : $AM_CFLAGS"
|
LIBS : $LIBS
|
||||||
echo "AM_CPPFLAGS : $AM_CPPFLAGS"
|
Install themes : $THEMES_INSTALL
|
||||||
echo "AM_LDFLAGS : $AM_LDFLAGS"
|
Themes path : $THEMES_PATH
|
||||||
echo "LIBS : $LIBS"
|
Icons path : $ICONS_PATH
|
||||||
echo "Install themes : $THEMES_INSTALL"
|
Global Python plugins path : $GLOBAL_PYTHON_PLUGINS_PATH
|
||||||
echo "Themes path : $THEMES_PATH"
|
Global C plugins path : $GLOBAL_C_PLUGINS_PATH
|
||||||
echo "Icons path : $ICONS_PATH"
|
CFLAGS : $AM_CFLAGS
|
||||||
echo "Global Python plugins path : $GLOBAL_PYTHON_PLUGINS_PATH"
|
CPPFLAGS : $AM_CPPFLAGS
|
||||||
echo "Global C plugins path : $GLOBAL_C_PLUGINS_PATH"
|
LDFLAGS : $AM_LDFLAGS
|
||||||
echo ""
|
LIBS : $LIBS
|
||||||
echo "Now you can run \`make' to build profanity"
|
|
||||||
|
Run `make' to build profanity])
|
||||||
|
|
||||||
|
dnl vim: expandtab:ts=4:sts=4:sw=4
|
||||||
|
|||||||
@@ -68,15 +68,9 @@ identity_key_store_new(identity_key_store_t* identity_key_store)
|
|||||||
identity_key_store->public = NULL;
|
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
|
int
|
||||||
load_session(signal_buffer** record, signal_buffer** user_record,
|
load_session(signal_buffer** record, signal_buffer** user_record,
|
||||||
const signal_protocol_address* address, void* user_data)
|
const signal_protocol_address* address, void* user_data)
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
GHashTable* session_store = (GHashTable*)user_data;
|
GHashTable* session_store = (GHashTable*)user_data;
|
||||||
GHashTable* device_store = NULL;
|
GHashTable* device_store = NULL;
|
||||||
@@ -124,17 +118,11 @@ get_sub_device_sessions(signal_int_list** sessions, const char* name,
|
|||||||
return SG_SUCCESS;
|
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
|
int
|
||||||
store_session(const signal_protocol_address* address,
|
store_session(const signal_protocol_address* address,
|
||||||
uint8_t* record, size_t record_len,
|
uint8_t* record, size_t record_len,
|
||||||
uint8_t* user_record, size_t user_record_len,
|
uint8_t* user_record, size_t user_record_len,
|
||||||
void* user_data)
|
void* user_data)
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
GHashTable* session_store = (GHashTable*)user_data;
|
GHashTable* session_store = (GHashTable*)user_data;
|
||||||
GHashTable* device_store = NULL;
|
GHashTable* device_store = NULL;
|
||||||
|
|||||||
@@ -68,11 +68,7 @@ void identity_key_store_new(identity_key_store_t* identity_key_store);
|
|||||||
* @param address the address of the remote client
|
* @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
|
* @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);
|
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
|
* Returns all known devices with active sessions for a recipient
|
||||||
@@ -94,11 +90,7 @@ int get_sub_device_sessions(signal_int_list** sessions, const char* name, size_t
|
|||||||
* @param record_len length of the serialized session record
|
* @param record_len length of the serialized session record
|
||||||
* @return 0 on success, negative on failure
|
* @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);
|
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
|
* Determine whether there is a committed session record for a
|
||||||
|
|||||||
@@ -1,231 +0,0 @@
|
|||||||
/*
|
|
||||||
* otrlibv3.c
|
|
||||||
* vim: expandtab:ts=4:sts=4:sw=4
|
|
||||||
*
|
|
||||||
* Copyright (C) 2012 - 2019 James Booth <boothj5@gmail.com>
|
|
||||||
*
|
|
||||||
* This file is part of Profanity.
|
|
||||||
*
|
|
||||||
* Profanity is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* Profanity is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with Profanity. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* In addition, as a special exception, the copyright holders give permission to
|
|
||||||
* link the code of portions of this program with the OpenSSL library under
|
|
||||||
* certain conditions as described in each individual source file, and
|
|
||||||
* distribute linked combinations including the two.
|
|
||||||
*
|
|
||||||
* You must obey the GNU General Public License in all respects for all of the
|
|
||||||
* code used other than OpenSSL. If you modify file(s) with this exception, you
|
|
||||||
* may extend this exception to your version of the file(s), but you are not
|
|
||||||
* obligated to do so. If you do not wish to do so, delete this exception
|
|
||||||
* statement from your version. If you delete this exception statement from all
|
|
||||||
* source files in the program, then also delete it here.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#include <libotr/proto.h>
|
|
||||||
#include <libotr/privkey.h>
|
|
||||||
#include <libotr/message.h>
|
|
||||||
|
|
||||||
#include "otr/otr.h"
|
|
||||||
#include "otr/otrlib.h"
|
|
||||||
#include "ui/ui.h"
|
|
||||||
#include "ui/window_list.h"
|
|
||||||
|
|
||||||
OtrlPolicy
|
|
||||||
otrlib_policy(void)
|
|
||||||
{
|
|
||||||
return OTRL_POLICY_ALLOW_V1 | OTRL_POLICY_ALLOW_V2;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
otrlib_init_timer(void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
otrlib_poll(void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
char*
|
|
||||||
otrlib_start_query(void)
|
|
||||||
{
|
|
||||||
return "?OTR?v2? This user has requested an Off-the-Record private conversation. However, you do not have a plugin to support that. See http://otr.cypherpunks.ca/ for more information.";
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
cb_display_otr_message(void* opdata, const char* accountname,
|
|
||||||
const char* protocol, const char* username, const char* msg)
|
|
||||||
{
|
|
||||||
cons_show_error("%s", msg);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
otrlib_init_ops(OtrlMessageAppOps* ops)
|
|
||||||
{
|
|
||||||
ops->display_otr_message = cb_display_otr_message;
|
|
||||||
}
|
|
||||||
|
|
||||||
ConnContext*
|
|
||||||
otrlib_context_find(OtrlUserState user_state, const char* const recipient, char* jid)
|
|
||||||
{
|
|
||||||
return otrl_context_find(user_state, recipient, jid, "xmpp", 0, NULL, NULL, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
otrlib_end_session(OtrlUserState user_state, const char* const recipient, char* jid, OtrlMessageAppOps* ops)
|
|
||||||
{
|
|
||||||
ConnContext* context = otrl_context_find(user_state, recipient, jid, "xmpp",
|
|
||||||
0, NULL, NULL, NULL);
|
|
||||||
|
|
||||||
if (context) {
|
|
||||||
otrl_message_disconnect(user_state, ops, NULL, jid, "xmpp", recipient);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
gcry_error_t
|
|
||||||
otrlib_encrypt_message(OtrlUserState user_state, OtrlMessageAppOps* ops, char* jid, const char* const to,
|
|
||||||
const char* const message, char** newmessage)
|
|
||||||
{
|
|
||||||
gcry_error_t err;
|
|
||||||
err = otrl_message_sending(
|
|
||||||
user_state,
|
|
||||||
ops,
|
|
||||||
NULL,
|
|
||||||
jid,
|
|
||||||
"xmpp",
|
|
||||||
to,
|
|
||||||
message,
|
|
||||||
0,
|
|
||||||
newmessage,
|
|
||||||
NULL,
|
|
||||||
NULL);
|
|
||||||
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
otrlib_decrypt_message(OtrlUserState user_state, OtrlMessageAppOps* ops, char* jid, const char* const from,
|
|
||||||
const char* const message, char** decrypted, OtrlTLV** tlvs)
|
|
||||||
{
|
|
||||||
return otrl_message_receiving(
|
|
||||||
user_state,
|
|
||||||
ops,
|
|
||||||
NULL,
|
|
||||||
jid,
|
|
||||||
"xmpp",
|
|
||||||
from,
|
|
||||||
message,
|
|
||||||
decrypted,
|
|
||||||
tlvs,
|
|
||||||
NULL,
|
|
||||||
NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
otrlib_handle_tlvs(OtrlUserState user_state, OtrlMessageAppOps* ops, ConnContext* context, OtrlTLV* tlvs, GHashTable* smp_initiators)
|
|
||||||
{
|
|
||||||
NextExpectedSMP nextMsg = context->smstate->nextExpected;
|
|
||||||
OtrlTLV* tlv = otrl_tlv_find(tlvs, OTRL_TLV_SMP1);
|
|
||||||
if (tlv) {
|
|
||||||
if (nextMsg != OTRL_SMP_EXPECT1) {
|
|
||||||
otrl_message_abort_smp(user_state, ops, NULL, context);
|
|
||||||
} else {
|
|
||||||
ProfChatWin* chatwin = wins_get_chat(context->username);
|
|
||||||
if (chatwin) {
|
|
||||||
chatwin_otr_smp_event(chatwin, PROF_OTR_SMP_INIT, NULL);
|
|
||||||
}
|
|
||||||
g_hash_table_insert(smp_initiators, strdup(context->username), strdup(context->username));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
tlv = otrl_tlv_find(tlvs, OTRL_TLV_SMP1Q);
|
|
||||||
if (tlv) {
|
|
||||||
if (nextMsg != OTRL_SMP_EXPECT1) {
|
|
||||||
otrl_message_abort_smp(user_state, ops, NULL, context);
|
|
||||||
} else {
|
|
||||||
ProfChatWin* chatwin = wins_get_chat(context->username);
|
|
||||||
if (chatwin) {
|
|
||||||
char* question = (char*)tlv->data;
|
|
||||||
char* eoq = memchr(question, '\0', tlv->len);
|
|
||||||
if (eoq) {
|
|
||||||
chatwin_otr_smp_event(chatwin, PROF_OTR_SMP_INIT_Q, question);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
tlv = otrl_tlv_find(tlvs, OTRL_TLV_SMP2);
|
|
||||||
if (tlv) {
|
|
||||||
if (nextMsg != OTRL_SMP_EXPECT2) {
|
|
||||||
otrl_message_abort_smp(user_state, ops, NULL, context);
|
|
||||||
} else {
|
|
||||||
context->smstate->nextExpected = OTRL_SMP_EXPECT4;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
tlv = otrl_tlv_find(tlvs, OTRL_TLV_SMP3);
|
|
||||||
if (tlv) {
|
|
||||||
if (nextMsg != OTRL_SMP_EXPECT3) {
|
|
||||||
otrl_message_abort_smp(user_state, ops, NULL, context);
|
|
||||||
} else {
|
|
||||||
context->smstate->nextExpected = OTRL_SMP_EXPECT1;
|
|
||||||
ProfChatWin* chatwin = wins_get_chat(context->username);
|
|
||||||
if (chatwin) {
|
|
||||||
if (context->smstate->received_question == 0) {
|
|
||||||
if (context->active_fingerprint->trust && (context->active_fingerprint->trust[0] != '\0')) {
|
|
||||||
chatwin_otr_smp_event(chatwin, PROF_OTR_SMP_SUCCESS, NULL);
|
|
||||||
chatwin_otr_trust(chatwin);
|
|
||||||
} else {
|
|
||||||
chatwin_otr_smp_event(chatwin, PROF_OTR_SMP_SENDER_FAIL, NULL);
|
|
||||||
chatwin_otr_untrust(chatwin);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (context->smstate->sm_prog_state == OTRL_SMP_PROG_SUCCEEDED) {
|
|
||||||
chatwin_otr_smp_event(chatwin, PROF_OTR_SMP_SUCCESS_Q, NULL);
|
|
||||||
} else {
|
|
||||||
chatwin_otr_smp_event(chatwin, PROF_OTR_SMP_FAIL_Q, NULL);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
tlv = otrl_tlv_find(tlvs, OTRL_TLV_SMP4);
|
|
||||||
if (tlv) {
|
|
||||||
if (nextMsg != OTRL_SMP_EXPECT4) {
|
|
||||||
otrl_message_abort_smp(user_state, ops, NULL, context);
|
|
||||||
} else {
|
|
||||||
context->smstate->nextExpected = OTRL_SMP_EXPECT1;
|
|
||||||
ProfChatWin* chatwin = wins_get_chat(context->username);
|
|
||||||
if (chatwin) {
|
|
||||||
if (context->active_fingerprint->trust && (context->active_fingerprint->trust[0] != '\0')) {
|
|
||||||
chatwin_otr_smp_event(chatwin, PROF_OTR_SMP_SUCCESS, NULL);
|
|
||||||
chatwin_otr_trust(chatwin);
|
|
||||||
} else {
|
|
||||||
chatwin_otr_smp_event(chatwin, PROF_OTR_SMP_RECEIVER_FAIL, NULL);
|
|
||||||
chatwin_otr_untrust(chatwin);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
tlv = otrl_tlv_find(tlvs, OTRL_TLV_SMP_ABORT);
|
|
||||||
if (tlv) {
|
|
||||||
context->smstate->nextExpected = OTRL_SMP_EXPECT1;
|
|
||||||
ProfChatWin* chatwin = wins_get_chat(context->username);
|
|
||||||
if (chatwin) {
|
|
||||||
chatwin_otr_smp_event(chatwin, PROF_OTR_SMP_ABORT, NULL);
|
|
||||||
chatwin_otr_untrust(chatwin);
|
|
||||||
}
|
|
||||||
otr_untrust(context->username);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user