59 Commits

Author SHA1 Message Date
88ffdfb299 meson: require sdbus-c++ 2.0+
Change-Id: I4db2d2425ff52b599c3e648673313ed90e031126
2025-08-01 11:45:15 -04:00
86d3bb6644 ArchiveAccountManager: add support for p2p account import
Gitlab: #930
Change-Id: I76f07a81c4887d0dc127d74bc6c4de2e9f4f2ee8
2025-03-06 12:19:47 -05:00
b0e223ff3c misc: add an API to set the client app's resource directory path
This approach allows client apps that install ringtones (and any other resources) in custom locations to specify that directory at runtime. This will take precedence over the build time data directory supplied for platforms which install to a fixed path.

https: //git.jami.net/savoirfairelinux/jami-client-qt/-/issues/1619
Change-Id: I81616f79196e645a5ad677d6956be6a2ffcd976a
2024-06-04 09:57:32 -04:00
09ec8e6f43 conversation: re-design sending/sent status
The goal of this patch is to allow the clients to get a better
sent/read status from the daemon.

API doesn't change much, but internal logic got some changes. For the
client:
+ SwarmMessage now contains a map<string,int> status where string is the
  uri of a member, int is the status (0 = sending, 1 = sent, 2 = read)
+ cancelMessage is removed as not used anymore (sendMessage with flag=1
  will edit a message)
+ getMessageStatus is removed as the status is sent in the SwarmMessage
+ accountMessageStatusChanged is now emitted for swarm messages when a
  fetch or setDisplay occurs. Client must handle this signal correctly.
+ Previous code to manage last displayed, fetched status is now merged
  with message status
+ Sync info is done when the sync is opened, else status are not updated
  correctly

GitLab: #948
Change-Id: I60763d4de8a995c6fc9f6df6434e266211f8dc2f
2024-02-15 13:52:39 -05:00
ba09b11b42 conversation: add new loadConversationUntil and SwarmMessageVect type
GitLab: #831

Change-Id: I8e2aa205629735df043618a87e54ae6a43e6ca3f
2024-01-09 09:42:03 -05:00
8468f15927 conversation: move logic of message management in daemon
This heavily changes the API for the client. The goal here is
to move the logic to construct the history to show in the daemon
and not the client. This has several advantages:

1. Logic is common across every platforms, so bugs should not be
platform-specific
2. Client got less logic
3. Signal are simplified, if an edition comes, "MessageUpdated"
will be triggered instead MessageReceived.
4. Some tests are added for linearizing the history.
5. Search on edition is fixed.

Tests got heavily re-written, but the content didn't change (2 tests
are added, the rest is simplification).

GitLab: #831
Change-Id: Ie7c81077067e9e49db1dd396829c9225c0512c16
2023-12-28 16:05:40 -05:00
a5a46c0385 filesharings: integrate audio stream
GitLab: #485
Change-Id: I0ae7c23da2a1f2384699639cc0de58f8f05b33ec
2023-11-01 11:02:32 -04:00
809600018b filesharing: use mediaplayer
GitLab: #485
Change-Id: Ie3f129cd0cee14a97764eb22ee2b5f530a3f3023
2023-11-01 11:02:32 -04:00
81f43b901b misc: fix DBUS build
Change-Id: Ia6d43b818b705c13da979d90920ff2df585f5cec
2023-08-28 10:21:36 -03:00
1085874379 New API for connection monitoring
GitLab: #851
Change-Id: I3bbb529eccb3dbb6389621dbfc38f5cf081a98ad
2023-08-15 15:41:47 -04:00
25f6415265 switch to dhtnet
Change-Id: Ib53b7e170df59f873fbd85f6e7d4bf338d04cb9c
2023-07-27 12:51:32 -04:00
c83a427001 meson: fix build definition
Change-Id: I50749a002936da4159be9479f256aa45fce64221
2023-05-31 12:07:13 +03:00
3dd5f4ebfd dbus: use sdbus-c++ for dbus communications
Change-Id: If10740b4fd192a1043c5f83adc9072fe67df7862
2023-05-29 11:57:03 -04:00
32415a8327 contrib: update msgpack-cxx to 6.0.0
Change-Id: I94da5dedff8f29e38f7aa517cf2212f5142d8f29
2023-04-26 14:39:33 -04:00
c6f9250758 meson: update tests
Change-Id: I0a72cd58d0c3822ecb99366f2e96c10eb81d7900
2023-02-04 00:34:16 +03:00
8960936221 swarm: add call support
This patch introduces the ability to start calls and extends the
usage of rendezvous points to swarm with multiple participants.

When starting a call in a swarm with multiple participats, one device
will work as the host of the conference, and the caller will
immediately start the call alone.
Other peers will receive a commit and a notification to be able
to join the active call. To join a call, users needs to call
rdv:uri/device/convId/confId to be added (if authorized) to the conf.

There are some majors differences in the process.
First, every conversation will be able to decide a default host
for conferences. This still needs some design and will be
introduced in another patch. For now, the caller is the host.
Then, because all members of the call may not be interested to join
a call, or they may want to get several calls at the same time, the
system must be able to manage more than one active calls (e.g. a
company with multiple projects can do several standups at the same
time).
Finally, in the conversation, two commits will be generated to be
able to know what active calls are available. The first is
announcing that a conference started, the second announces that
the conference stopped (the host closed the call).
However, this introduces a difficulty. The host may crash and not
commit the end of the call in time. In this case, hostedCalls are
stored in a file and the conversation is updated during the init
of the daemon.

Change-Id: I081a4920edb3773bbed884ae50f34e476ad42094
Documentation: https://docs.jami.net/technical/swarm.html#call-in-swarm
GitLab: #312
2022-11-17 08:10:17 -05:00
d54a84ec0b Replace DRing for libjami
It's not possible to replace the DRing namespace for jami because of conflicts
with namespaces and classes defined under the jami namespace.  Thus, use libjami
as the namespace.

Script to reproduce:

 rg -l DRing | sort | uniq | awk '$0 !~ /NEWS/' | xargs sed -i -e 's|DRing|libjami|g'
 rg -l DRING_ | sort | uniq | xargs sed -i -e 's|DRING_|LIBJAMI_|g'
 sed -i -e 's|dring|jami|g' src/jami/CMakeLists.txt
 sed -i -e 's|dring|jami|g' src/jami/def.h

Change-Id: I80e8c8b58a7586527a016bbef850bab07869c473
2022-10-29 16:49:27 -04:00
0f6b74b194 conversation: add support for message edition
For now, only be able to edit messages from our-self and with the
text/plain type

Change-Id: I20c6ed7dad3892f0fa655812242b9ca6e77e69b3
GitLab: #316
2022-10-24 14:29:19 -04:00
a4ff4abe70 swarm: add method to save user's preferences
This store user's preferences per conversation into
conversation_data/<convId>/preferences
In this way, the daemon is able to sync this file across devices
and remove preferences at the same time we remove the conversation.

For now, only support "color" and "ignoreNotifications"

The preferences are synced via partial SyncMsg sent across devices.

Change-Id: I8fe74cc06733ad61d45d721e0264b1941d4cf122
2022-10-06 14:47:30 -04:00
76226044f5 Revert "fileutils: migrate to boost::nowide"
Causes issues with yaml-cpp. Reverting temporarily until we fix the issue.

Change-Id: I2df0823554ad87880bc965bdff4f4707a6129789
2022-09-08 14:23:55 -04:00
05ff5b3bfe fileutils: migrate to boost::nowide
Change-Id: Iceae2a19ce3febce62f7916af8b4242e06a7e1d4
2022-09-08 13:13:13 -04:00
8145803524 meson: remove subprojects
Change-Id: I384328c002aa1dc495e29dfa16ada3044cdeda28
2022-09-06 11:15:21 +03:00
5d3412e1d0 meson: make a Speex audio processor a feature
Change-Id: I6542e049809ab2526fa652986a4078f3a9969733
2022-08-11 11:34:34 +03:00
6ff875cb59 audio: add voice activity detection
* rename EchoCanceller to AudioProcessor
* enable echo cancellation and voice activity detection
* add minimum active duration and trigger time to voice activation

Gitlab: #741
Change-Id: I98662462c17539fca1d042482e97fdb3eff86130
2022-08-09 14:09:13 -04:00
acfbf582fc meson: add support for tracepoints
Change-Id: If19db447c903478ac07c852b03aede50508608f1
2022-07-16 13:41:32 -04:00
3e029a9b04 misc: fix unit tests
+ Bump deamon version to enable multistream
+ use signal for recorder to check if file stopped
+ answerMediaChangeRequest pass isRemote for tests

Change-Id: I396b8246264cb7826350f75e74f20f05b864f384
2022-07-14 13:31:35 -04:00
f773e24851 webview: add initial WebView support to the daemon
Change-Id: Id6967f8fd0976caae81e4c951d0d5dc9901b23d3
2022-06-27 16:08:53 -04:00
fa7fb8beb0 build: use ifdef instead of `if for various defines
Change-Id: I386bd1adddf403ff450e5d22688337b7d6d7c1f6
2022-06-22 23:14:41 -04:00
ea2e2e4dbc conference: improve conference protocol for multi stream
The current design got some limitations. It's not possible to
control informations per shared media. This means that we can't
got several active sinks for example.
The goal of this patch here is to update the conferences orders
to be able to control the state of each sink individually and for
the client to be able to handle conferences with accounts connected
via several devices with several medias per devices.
So each orders is sent with a different level (account/device/media)

For example, we will be able to send a moderator order for an account,
to hangup a device or to set a media active.

To support those orders, both sides MUST be patched. Else, the old
protocol will be used. The version of the protocol supported is sent
in the conferences informations to notify the peer what version to use.

Finally, this patch changes some APIs to support multisteam:
+ Some APIs now takes the deviceId or the sinkId when necessary

https://git.jami.net/savoirfairelinux/jami-project/-/issues/1429
Doc: https://git.jami.net/savoirfairelinux/jami-project/-/wikis/technical/6.1.-Conference-Protocol
Change-Id: Ieedd6055fd43b2a09b2cc8b253dcd6a3bf260a39
2022-06-17 10:07:43 -04:00
4af0279fa2 video API: unify SinkTarget and AVSinkTarget
Change-Id: I6cbbdc1ec6953c1c9ec47a57acf8ac4d8995468d
2022-03-21 16:56:54 -04:00
f6bf52ea15 re-invite: bump Daemon version to 11.0.2
Bump Daemon version to 11.0.2 to enable re-invite without ICE
renegotiation.

Gitlab: #671

Change-Id: I287a034b0fb6b6fde77c091ac3543978e533c56a
2022-02-24 13:56:11 -05:00
70a2a65086 SIP call: re-invite without ice re-negotiation
When muting/un-muting the video, a re-invite is performed
leading to a full media renegotiation and restart,  including
ICE session if used.
With these changes, the mute/unmute video will still require
a re-invite (a new SDP to indicate the new media directions), but
the ICE session is re-used and only the video is stopped/started
accordingly.
The behavior improves the UX by avoiding unnecessary audio disruptions
and is more compliant with SIP/ICE specs (see RFC-5245 section 9.1.1.1
for example)

Gitlab: #671

Change-Id: I13caf9a965af1d76e922fe5f6b86d5332b3296d6
2022-01-25 10:09:13 -05:00
754ae6bfdb build: Rename PROGSHAREDIR to JAMI_DATADIR.
This name matches a common naming convention in build systems.

* compat/msvc/config.h (PROGSHAREDIR): Rename to...
(JAMI_DATADIR) ... this.
* globals.mk (-DJAMI_DATADIR): Likewise.
* meson.build (conf): Likewise.
* src/account.cpp: Likewise.
* src/manager.cpp (Manager::playRingtone): Likewise.

Change-Id: I123251f3e420948bc7359ce0a3ac54bddd12977a
2022-01-20 13:31:58 -05:00
256743d590 meson: update tests
Change-Id: I834b8f24f94e639ab65272a2ff7e5ac4ea84c725
2022-01-05 12:15:55 -05:00
21c8feb731 meson: link the library with '-Wl,-Bsymbolic'
Change-Id: I2496bc42192ad65135c781476f6f5d4bcc795d19
2021-12-20 15:42:45 +03:00
01cb294c44 callmanager: add accountId to identify calls, conferences
This starts the work to move calls and conference per account,
cleaning up the API and start future re-factorization.

Change-Id: I2a3a2c77e9ba78b1a280bdf8dca7eeaabb72f3fd
2021-11-16 15:59:41 -05:00
7d1c3d662a meson: declare using of objective-c++ compiler on osx and ios
Change-Id: Iec6822356d65d1df2fd057920fc30ae56581d76e
2021-11-14 11:53:24 -05:00
6bb307bda4 meson: update the list of sources and dependencies
Change-Id: I6b419ff3e1bc4f8dd8958974e4ae4bc98d30cf06
2021-11-13 16:11:02 -05:00
6ba2ce016a build: disable SHM if DBUS is not used
As libwrap is used by default, HAVE_SHM should only be true
if directrenderer is not used to avoid useless work

Change-Id: I9f819a7c06c667ccf08066f70104dcd3667f8546
2021-11-09 12:34:34 -05:00
17f31b5941 meson: update the list of sources and dependencies
Change-Id: I19bc2fe4edef3c8dc7992473235f6ffd002c6e0b
2021-10-10 17:21:32 -04:00
ba3a411ca3 daemon: Rename dring occurrences in code and file names to jamid.
Automated using the following commands:

  $ mv src/{dring,jami}
  $ git grep -l src/dring | xargs sed -i 's,src/dring,src/jami,g'
  $ git grep -l '#include "dring/' | \
    xargs sed -i 's,#include "dring/,#include "jami/,g'
  $ git grep -l 'dring.h' | xargs sed -i 's,dring.h,jami.h,g'

And finally,

  $ git grep -l 'dring' | xargs sed -i 's,dring,jami,g'

  $ files=$(find -name '*dring*' | sort)
  $ for f in $files; do mkdir -p "$(dirname "$f")"; \
      mv "$f" "$(echo $f | sed 's/dring/jami/g')"; done

To resolve a bad renaming favorably:

  $ git grep -l -i AlsaCarjami | \
    xargs sed -i -E 's/([Aa])lsaCarjami/\1lsaCardRingtone/g'

The above renaming command is not perfect, so some hand-tuning was
required to complete it.

* src/manager.cpp (Manager::ManagerPimpl::retrieveConfigPath):
Preserve the dring.yml configuration file name, until we add something
to migrate (rename) it to jami.yml.
* man/dring.pod: Delete.
* bin/dbus/jamid.pod: Move to ...
* man/jamid.pod: here.
* bin/dbus/meson.build (jamid_targets): Normalize man section to the
pre-existing 1 and adjust accordingly.
* src/jami/def.h (dring_EXPORTS): Rename to ...
(jami_EXPORTS): ... this.

change-Id: I9828be6da9c711ab2f22c4d1b9539fea89d7b6fb
2021-07-15 10:57:26 -04:00
f0fb8148ba daemon: Use the PROGSHAREDIR macro to refer to the custom datadir.
The sources previously hard-coded the location of the default Jami
ringtone as "/usr/share/ring/ringtones/default.opus".  It should
instead be computed from the already existing PROGSHAREDIR macro,
which is built from Autoconf's configurable datadir.

* globals.mk (-DPROGSHAREDIR): Rename the 'ring' subdirectory to
'jami'.
* meson.build (conf): Likewise.
* ringtones/Makefile.am (dist_jamiringtones_DATA): s/ring/jami/g
* ringtones/meson.build: Likewise.
* src/account.cpp (DEFAULT_RINGTONE_PATH): Define in terms of
PROGSHAREDIR.
* bin/dbus/Makefile.am (libclient_dbus_la_CXXFLAGS): Remove extraneous
flags, already propagated via AM_CPPFLAGS.  Honor AM_CXXFLAGS.
* src/client/Makefile.am (libclient_la_CXXFLAGS): Remove.
* src/plugin/Makefile.am (libplugin_la_CXXFLAGS): Likewise.

Change-Id: Icaa0a92e896f86b0bb07f82e4079570db08fafbd
2021-06-28 10:52:29 -04:00
612f7f6b41 data-transfer: re-ask for transfer
add API to ask for a failed transfer. This can be used when the
client detects a transfer they doesn't have yet. It will ask all
members of the conversation to send the transfer back.

GitLab: #136
Change-Id: I1484298c4fa0eabb614132e22d8032612e14b949
2021-06-11 15:26:00 -04:00
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
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
e7537f3ac4 meson: rename the option from 'webrtc-audio-processing' to 'aec'
Change-Id: I69cc9da36dfbb1258f8f84e9351a6c1c29c2a722
2021-03-24 09:25:36 -04:00
a699262e72 build: fix meson for webrtc support
Change-Id: Iedcfe91af40893004c8f640c8a718966db8d7468
2021-03-19 13:09:49 -04:00
a04ed04264 plugins: add ChatHandler API
- add internal preference for always turn on plugin

GitLab: jami-plugins#4
GitLab: #394
Change-Id: Ic37fb486531cf436df4346246ec74f6480e4c0fd
2021-02-01 11:21:16 -05:00
69f559976e plugins: add callId to API
Change-Id: I2b59205b9ad2f75c6c8602a5a273a7d8115e5db6
2020-11-12 10:56:07 -05: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