Commit Graph

309 Commits

Author SHA1 Message Date
53d0ae39d1 multi-stream: check peer's Daemon version
Check peer's Daemon version and ignore media change request
action from the client if the the peer does not support the
feature.
Also bump Daemon version to 10.0.2

Gitlab: #551

Change-Id: Ifd105d2fe2706b4667f5bafabcb3d91e771e7299
2021-06-11 12:33:51 -04:00
3ff1548de6 Revert "configure: use -Og in debug mode"
This reverts commit d6e9bb8423.

Some variables are optimized out with -Og.  -O0 doesn't have this problem.

Change-Id: Ief09d2d3659260aa8151dbfe8951dc11777bb79b
2021-05-28 12:24:27 -04:00
d6e9bb8423 configure: use -Og in debug mode
Change-Id: I29522f23419b2a3bb29265a73e8f2bcfcd2548f8
2021-05-19 10:14:36 -04:00
ffa12c740b multiplexed_socket: add ping/pong logic
Detecting that a socket is down via a keep alive can take time, moreover
if a relay is used, because the keep alive can continue to work even if the
connection is half closed.
In this patch, we add a mechanism where a beacon is sent over the multiplexed
socket to know if the peer can answer. This message can be used to detect
if a socket is usable and is sent whenever the user starts a call or that
a connectivityChanged() occurs.
Moreover, the multiplexedsocket can now sends a version to enable features
and if a bad packet on the control socket comes, the socket is not stopped.

GitLab: #542
Change-Id: Ia66d8d7f9b66bba02927f4ea41c21ef27089bceb
2021-05-13 18:11:02 -04:00
c71db26718 misc: remove unnecessary --build for libgit2 and check recent openDHT version
Change-Id: Ic6f2cd3e0b0cf839dc602231ad4b0a4914968b2e
2021-05-11 16:44:37 -04:00
7dd8826ce9 plugins: use minizip instead of libarchive
GitLab: #525
Change-Id: I7de174626bbb97c40ac58ceea9d99d9fe8b95bd9
2021-05-04 10:26:01 -04:00
9b94f3fd1d configure.ac: Fix typo in help string.
Using '--without-webrtc-ap' would still attempt to build the
webrtc-based echo canceler.  Adjust the help string of the option to
match the actual option name.

* configure.ac (webrtcap): Help text changed from --without-webrtc-ap
to --without-webrtcap.

Change-Id: I46a30dc87963ca67b0b135fed08523f16834f715
2021-04-16 10:56:26 -04:00
4b6a085120 use {fmt} instead of stringstream
Change-Id: I77f0e24c97efc199ab83c517559d5588880b0215
2021-04-14 14:45:07 -04:00
1b779e7dec configure.ac: Clear the implicit default C and C++ flags.
They were being added by Autoconf following our own defaults, leading
to the erroneous -g -O3 -g -O2 options being passed to GCC.  This is
documented in the C Compiler and C++ Compiler sections of the Autoconf
manual.

* configure.ac: Clear the default CFLAGS and CXXFLAGS variables.

Reported-by: Adrien Beraud <adrien.beraud@savoirfairelinux.com>
Change-Id: Id5e24cb2544ac4492b229746ad7ea1dee7cbb963
2021-04-10 00:03:54 -04:00
1527828d79 swarm chat: make API visible and bump daemon version
Change-Id: Ice65f7ded98ef5575732334a9d6c61b81aeaf655
2021-04-09 18:02:39 -04:00
ea84661121 configure: require OpenDHT
Change-Id: Icac429914b1cbda880909a130af1c0934abedbf3
2021-04-07 10:41:05 -04:00
ad5607380f swarmchat: clone distant conversation
Retrieving a conversation is done by cloning the distant repository

Change-Id: Ib68749d0cd37ff708b08187e987cc3fdeaa0fbe6
2021-03-30 13:49:07 -04:00
c4e912dd89 dependencies: add libgit2 as a dependency
Needed by the swarm chat in the future

Change-Id: Ic5802a0de8091c12b6f5ed666ee488c620723149
2021-03-30 13:49:07 -04:00
80e62ef2dd configure: remove obsolete macro
Change-Id: I7a2227aafe585bee1f4ed115f22e987e77fd49ff
2021-03-28 16:05:06 -04:00
286d5f15ec configure.ac: Harmonize indentation.
Bring consistency in the indentation rules used throughout the file.

GitLab: #487
Change-Id: I4d8e4050a0f21df9a380fc25e0d3de04f15fe941
2021-03-28 16:04:36 -04:00
bfe7a84454 configure.ac: Do not set user variables.
The CFLAGS, CXXFLAGS, LDFLAGS and other variables intended to be
overridden by the user should not directly be set by the package.
This change uses one of the approaches recommended by the Autoconf and
Automake manuals, which is to use custom variables to accumulate flags
in the configure script and add them to the make targets they apply
to.  This has the benefit of not cluttering the flags used during the
Autoconf tests, which has proved problematic (see the previous commit
for a demonstration).

* configure.ac: Replace CFLAGS, CXXFLAGS, CPPFLAGS and LDFLAGS by
DAEMONCFLAGS, DAEMONCXXFLAGS, DAEMONCPPFLAGS and DAEMONLDFLAGS,
respectively.
Use these custom variables as the default values of AM_CFLAGS,
AM_CXXFLAGS, AM_CPPFLAGS and AM_LDFLAGS, respectively.  Remove an
extraneous check on jsoncpp.
* bin/Makefile.am (ringcli_CXXFLAGS): Honor the the AM_CXXFLAGS variable.
globals.mk: Extend rather than override the AM_CPPFLAGS variable.
* src/Makefile.am (libring_la_LDFLAGS): Honor AM_LDFLAGS.
(libring_la_CFLAGS): Honor AM_CFLAGS.
(libring_la_CXXFLAGS): Honor AM_CXXFLAGS.
* src/client/Makefile.am (libclient_la_CXXFLAGS): Honor AM_CXXFLAGS.
* src/im/Makefile.am (libim_la_CXXFLAGS): Remove variable.
* src/jamidht/Makefile.am (libringacc_la_CXXFLAGS): Likewise.
* src/media/audio/Makefile.am (libaudio_la_CXXFLAGS): Honor
AM_CXXFLAGS.
(libaudio_la_LDFLAGS): Honor the AM_CXXFLAGS variable.
* src/media/audio/coreaudio/Makefile.am (libcoreaudiolayer_la_CXXFLAGS):
Likewise.
* src/media/video/Makefile.am (libvideo_la_CFLAGS): Honor the
AM_CFLAGS variable.
(libvideo_la_CXXFLAGS): Honor the AM_CXXFLAGS variable.
* src/media/video/v4l2/Makefile.am (AM_CXXFLAGS): Extend rather than
override.
* src/plugin/Makefile.am (libplugin_la_CXXFLAGS): Honor the
AM_CXXFLAGS variable.
* src/security/Makefile.am (libsecurity_la_CXXFLAGS): Likewise.
* src/sip/Makefile.am (libsiplink_la_CXXFLAGS): Likewise.
* src/upnp/Makefile.am (libupnpcontrol_la_CXXFLAGS): Remove variable.
* src/upnp/protocol/Makefile.am (libupnpprotocol_la_CXXFLAGS): Likewise.
* src/upnp/protocol/natpmp/Makefile.am (libnat_pmp_la_CXXFLAGS): Likewise.
* src/upnp/protocol/pupnp/Makefile.am (libpupnp_la_CXXFLAGS): Likewise.
* test/sip/Makefile.am (AM_CXXFLAGS, AM_LDFLAGS): Extend rather than override.
* test/unitTest/Makefile.am (AM_CXXFLAGS, AM_LDFLAGS): Likewise.

GitLab: #487
Change-Id: I18be9d812159f8156efb9f7849e7eac6d4c6b3ca

squash! configure.ac: Do not set user variables.

Change-Id: I1146ea15d6fb75fe53d3cbdd782e981c933e82a6
2021-03-28 16:04:36 -04:00
5cca262551 configure.ac: Resolve libnatpmp conftest issue.
Do not unnecessarily clutter CPPFLAGS; the variable is honored by
Autoconf while running its conftests and can cause issues such as
symbol clashes between the libnatpmp and webrtc-audio-processing
library observed below:

configure:20851: checking for initnatpmp in -lnatpmp
configure:20873: g++ -std=gnu++17 -o conftest  -DNDEBUG=1 -O3 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DPJ_AUTOCONF=1  -I/home/maxim/src/ring-project/daemon/contrib/x86_64-unknown-linux-gnu/include  -fvisibility=hidden -DDRING_BUILD  -Ddring_EXPORTS  -DASIO_STANDALONE -I/home/maxim/src/ring-project/daemon/contrib/x86_64-unknown-linux-gnu/include -I/gnu/store/zimpk6gqmjrwxc7fnam212kv3a6dwpzz-jsoncpp-1.9.2/include -DWEBRTC_AUDIO_PROCESSING_ONLY_BUILD -DWEBRTC_POSIX -I/home/maxim/src/ring-project/daemon/contrib/x86_64-unknown-linux-gnu/include/webrtc_audio_processing  -Wl,-Bsymbolic -ldl -L/home/maxim/src/ring-project/daemon/contrib/x86_64-unknown-linux-gnu/lib -L/gnu/store/zimpk6gqmjrwxc7fnam212kv3a6dwpzz-jsoncpp-1.9.2/lib -ljsoncpp -L/home/maxim/src/ring-project/daemon/contrib/x86_64-unknown-linux-gnu/lib -lwebrtc_audio_processing conftest.cpp -lnatpmp -lpthread  -lssl -lcrypto >&5
ld: /tmp/cc5prP4w.o: in function `main':
conftest.cpp:(.text.startup+0x0): multiple definition of `main'; /home/maxim/src/ring-project/daemon/contrib/x86_64-unknown-linux-gnu/lib/libwebrtc_audio_processing.a(libwebrtc_audio_processing_la-click_annotate.o):click_annotate.cc:(.text.startup+0x0): first defined here
collect2: error: ld returned 1 exit status
configure:20873: $? = 1

This was causing the link test of the libnatpmp library to fail,
which in turned caused the natpmp support to be disabled entirely.

* src/Makefile.am (libring_la_LDFLAGS): Add @WEBRTC_LIBS@.
(libring_la_CFLAGS): Add @WEBRTC_CFLAGS@.
* src/media/audio/Makefile.am (libaudio_la_CXXFLAGS)
[HAVE_WEBRTC_AP]: Add @WEBRTC_CFLAGS@.
* src/media/audio/echo-cancel/Makefile.am
(libecho_cancel_la_CXXFLAGS): Add @WEBRTC_CFLAGS@ and honor AM_CXXFLAGS.

GitLab: #487
Change-Id: I064d6a563318b34b2f3f516ca2aa8c2831205b09
2021-03-28 16:04:36 -04:00
cc6024ccba configure.ac: Remove uses of obsolete macros.
* configure.ac: Bump required autoconf version to 2.69 and remove the
uses of the obsoleted AC_HEADER_STDC and AC_HEADER_TIME macros.

GitLab: #487
Change-Id: Idb210870c298b83ddabe189e341d0846f04a1bb9
2021-03-26 14:48:19 -05:00
ad8909f0cb build: Enable the use of the dbusxx-xml2cpp tool built from contrib.
Previously, the build machine would need to provide dbusxx-xml2cpp
itself, while the library would be used from the contribs (always
forced, as dbusxx-xml2cpp is unmaintained and slightly broken on newer
GCCs).  This change removes the requirement to have the dbus-c++
package installed on the build machine.

Change-Id: I25ad2ee3e80afc33b320de9256b724a3c254f4fb
2021-03-26 14:27:03 -04:00
e787de4ea5 aec: move aec implementations into EchoCanceller
Hide speexdsp's echo cancellation implementation details behind an
EchoCanceller derived class. An AudioLayer may now instantiate
implementations of the EchoCanceller. This may be platform specific
compile-time or swapped out at runtime.

Introduces a null echo canceller for testing. As the speexdsp aec
is not currently functional, the null echo canceller is replaced
as the default implementation.

GitLab: #454
Change-Id: I169f1e9758afbed884fc42d9d78a69ce28d12fe2
2021-03-15 16:58:58 -04:00
5d0247d275 contrib: add webrtc-audio-processing @ v0.3.1
Change-Id: Ib7396b12f98947b25bc96605381cbc29594aa1b7
2021-03-15 16:58:37 -04:00
924cd61091 conference: add account preference to enable moderation for all
Gitlab: #453

Change-Id: I9a870b2f930c69fe26432f1f15169d13365e702d
2021-03-09 16:16:59 -05:00
67d85f86cc account: add default moderator preference
Change-Id: I4c30fe6c8c99bdc518c0e81a89eaf5eb3ce2b726
2021-01-15 13:39:06 -05:00
6927411cf4 conference: add kick participant for moderator
Change-Id: Ieb4be786a286ce52501b270e473308ad1fd5ba23
2020-12-10 19:44:50 -05:00
4e5c4c7908 conference: add mute participant for moderator
Change-Id: I371809b140fb1587635131d3a1e6c75ad67d2966
2020-12-10 19:44:50 -05:00
75ec461623 conference: host can add or remove moderator
Change-Id: Idc4c6db249de7247d02c7cabb897d638c69674f3
2020-11-12 09:51:22 -05:00
de7a0a6726 cleanup: remove turn transport
Change-Id: I13245dc4c38090e75450d6cb0f47956e6444ce93
2020-10-27 11:08:47 -04:00
569d44b5f6 src: hooks: remove urlhook feature
This feature is mostly a relicate from SFLPhone and introduced a remote
attack vector abusing the system() function weaknesses.

Provided that "sipEnabled" parameter is on in the remote target's
configuration, a malicious peer calling that remote target could
send SIP messages with a crafted "X-ring-url" string in order to
execute arbitrary shell commands on the target.

Header entry "X-ring-url" content is actually consumed by UrlHook
as arguments for the "x-www-browser" command executed using system().

By adding a shell escape sequence to circumvent existing arguments
sanitizing attempts, the malicious peer could execute any shell command
under remote peer user's identity and access sensitive information
available using its privileges.

Remove that feature altogether and enforce users that are relying on
that feature to migrate to Jami "plugins", which are more suitable
for introducing custom Jami behaviors.

Change-Id: I1d6d07771e2b5a7c7f2cb8fc838821106c0a6708
2020-10-13 12:13:23 -04:00
69d60a4940 Revert "plugin: add editable preference"
This reverts commit 7f21500866.

Reason for revert: API design issue

Change-Id: I89b4bd9f59b95637acb7fd2199a4ccc43b1bda64
2020-09-01 13:20:26 -04:00
7f21500866 plugin: add editable preference
Change-Id: I61c074464e21344b2d7a1d64023f23bd96139c3b
2020-08-31 17:20:53 -04:00
b424a5d0bd recorder: add remote recording indicator
Change-Id: I711a0b2f446f1620d7dff66945bf9295fd8372ac
2020-08-31 16:10:50 -04:00
365a1169fb conference: add informations about rendered video and share with all peers
These informations contains the participants in a conference and their
position in the rendered frame. The description of the conference is
sent via a SIP message with "application/confInfo+json" for mimetype.

Gitlab: #241
Change-Id: I5a3ad81d1d1b8ba9c9ce84e57745a59a747b8e6c
2020-07-31 16:52:53 -04:00
8d40c627e3 video_mixer: support multiple video layouts in conference
This patch aims to improve the conference management for the host.
Now, the host is able to switch between 3 conferences layout:
1. The grid view (actual one) where all participants are shown
at the same height/width
2. The One big/Other in small which show one participant bigger than
the others
3. One participant in big

The daemon's API got two new methods:
+ setConferenceLayout() to switch between these layouts
+ setActiveParticipant() used in the 2 last layouts.

Change-Id: I3c16569e24d1b63331ffe9d79e35790a6ac47a0c
2020-07-14 11:27:04 -04:00
6b0311f38c build: use C++17
Change-Id: I94c88a504ae2a98043be8fd201f95227002d99c4
2020-07-13 07:42:49 -04:00
0b7a978737 plugin: exposing plugins to linux ui
Change-Id: I0919a3a78f4066122773a2ee9ab85d8e406e7e8f
2020-07-07 10:23:57 -04:00
03ed99103d plugin: libarchive and plugins as default for linux
fix preferences set in first plugin loading
small logic changes in libraries loading
related to: https://review.jami.net/c/ring-project/+/14433

Change-Id: I4730f279ee38d337e3ef94dd9562a5dfc1a63c32
2020-06-05 10:17:10 -04:00
b7d4ab38d0 plugin: add plugin to dbus interface
Change-Id: I0bdffd53e9ba9463e3daacbc0641ab82e1ba89dd
2020-06-05 10:17:10 -04:00
f1ff4c3e11 archiver: add libarchive
Change-Id: I2ff7d879de55e18bedcbddce74f743ffe8755ca6
2020-05-26 11:04:10 -04:00
442b6b44c1 accounts: emit signal when an avatar is received in JAMS response
- adds signal <AccountAvatarReceived> for <account_id> with base64
  <photo>
- handles incoming avatar during account authorization response in
  on success callback by emitting <AccountAvatarReceived>

Change-Id: I8b6b9685691e1335b895a12c35ea14b53ec6260c
2020-03-12 15:53:46 -04:00
e40f5facdb dring: add message id in IncomingAccountMessage
Change-Id: I5622a466d0baccf906e6934b748719b2aa3ec37b
2020-03-04 14:13:35 -05:00
623f8082ce media player: initial implementation
This patch adds API for manage video player.
During player initialization it opens file, initialize video
and audio input, starts audio stream if needed.
Initial player state is paused.
It is up to client unpause player, get first frame and pause again
to get image for preview.
Current player functionality is
- play/pause
- seeking
- mute audio

Change-Id: I8cba50e1ab424d5acde9c38214af2cfe51064607
2020-03-02 10:57:17 -05:00
4ec9e1a2bc messages: add isComposing indicator
Change-Id: Ie7d90b5e77d320b53a91a16047a8fe3406591586
2020-02-28 16:07:13 -05:00
c3c15164dd build: link/include with ffmpeg
Gitlab: #54
Change-Id: Ieedfde12a0c9602f8ce664ef99b7205e9899751a
2019-12-20 11:59:17 -05:00
75b134cf17 jamiaccount: split account management
Change-Id: I669bfcc6f0e3f7bd60c56f0046f8701ad14541ce
2019-09-10 17:35:34 -04:00
b16a85a206 manager: add shared asio::io_context
Change-Id: Id3c5b959811b678df850a7025a7008e1591aaf0e
2019-09-10 12:50:56 -04:00
2100815f51 namedirectory: replace restbed by restinio
Depends-On: If43bab09e0d209aef1e92217d145a22f0cdab466
Change-Id: Ic8f55919f82c2e2ab088d4bc38814c99e1006062
2019-09-10 11:16:07 -04:00
fd970d5e2f Revert "manager: add shared asio::io_context"
This reverts commit 36dfd11f52.

Reason for revert: temporary win32 incompatibility

Change-Id: Ib6718b2427cf4e0f3d2f456c4722830232b850cd
2019-09-06 16:27:03 -04:00
36dfd11f52 manager: add shared asio::io_context
Change-Id: Iebd54e75d9f7baaa61547dd1e18100a7d88cc807
2019-09-05 17:20:37 -04:00
431cee5d12 recorder: add preferences
Adds whether or not the local video feed should be overlaid on the
remote video feed. Adds a quality setting for the recorder.

Change-Id: I60bd80c6441c7d516120680bebb1acdeb3824c49
2019-08-07 15:05:27 -04:00
60515d893a upnp: support libupnp and libnatnatpmp simultaneously
Update libupnp to version 1.8.4.

For windows, the IPV6 preprocessor must be undefined. Or else
libupnp won't initialize. Added visual studio 2017 support
via one patch for windows that also combines previous windows
patches.

UPnPController: Class that the jami classes use to control the
opening and closing of ports. Every  service has it's own upnp
controller. The controller does it's actions by using the upnp
context class. Also refactored the functions used to add
mappings. Instead of using two different functions with
different types of parameters, we now use one function with
parameters that have default values. The logic stays the same
but the function call is more clear.

UPnPContext: Class that holds a (linked) list of discovered IGDs
and their corresponding protocols (which discovered them).
Whenever the controller wants to add or remove a mapping, the
context picks a valid IGD in it's list and uses the correct
protocol to complete the required action. This class also has
the ability to swap protocols for an IGD that was discovered
by more then one protocol.

UPnPProtocol: Virtual base class that defines the functions
needed by the context to use the corresponding protocol.

PUPnP: UPnPProtocol derived class that represents a upnp client
that uses the portable upnp library (libupnp). Every time the
client discovers a new IGD it uses a callback to add it to the
context's main IGD linked list. It also has an internal list of
IGDs that it discovered. Added features to this class include:
	- IGD event subscription.
	- Use UpnpInit2 function instead of deprecated UpnpInit
	  function. It's also supposed to support IPv6.

NatPmp: UPnPProtocol derived class that represents a upnp client
that uses the NAT-PMP library (libnatpmp). Unlike libupnp,
libnatpmp only supports discovering one IGD. Also uses callbacks
to add the IGD it finds to the context's main IGD class.

Also inclided debug warning prints whenever a controller opens
and closes the ports. That way we can keep track of whenever
the application opens and closes ports on the internet
gateway device.

Gitlab: #96

Change-Id: I199271edac2c6d93dc60c24e2e2aefe36de7950c
2019-08-02 17:29:10 -04:00