If a device expires, a migration will regenerate the device's
certificate. In this case, the device certificate in swarms must
be updated.
So, the idea of this patch is to verify that the current certificate
in the repository for this device is still correct. If the device or
the member got invalidated, it tries to replace the current certificate
(updated via the migration). So that the new commits will still be valid.
Change-Id: I75b19b0edbb5601a758a73a4c4a44678d77295e1
GitLab: #684
The hash changed because the libressl team updated their tool,
changing the copyright in the tarball
Change-Id: I0fcf3d65d5058a5fdfdc161aa427758ca20e9a2f
On older versions, removeConversation didn't update appdata/contacts
causing some removed conversations to be announced in contacts details.
On Android, this hide the contact from the smartlist, as it's waiting
for a removed conversation.
Change-Id: I05be12ffcd2e5fe38d84c6f972b97e082c612ac7
GitLab: #714
When a device is expired, the migration will update the certificate
chain with the previous key. So, after a migration, the device's id
must be unchanged.
However, if a device is revoked, this should trigger a re-generation
of the device with a new PrivateKey (so generates a new device).
Add related unit tests.
GitLab: #684 (this is some preparative work)
Change-Id: I7ff0cff97b7285186539cfadc6e33b620ded5b27
+ testSetMessageDisplayed and testSetMessageDisplayedPreference were
broken because the lastDisplayed behaviour was recently changed to
support syncing across devices. Update the two related tests. Also,
avoid to update the lastDisplayed on merge
+ testSyncWithoutPinnedCert was badly written causing some sporadic
failures.
Change-Id: I364818b4ececb0fa63e87441f55a7da76fe1feb6
Since the video split, the daemon can manages a lot of Sink clients
which are generally not used by any client. This introduces a lot
of wasted computation.
One of the problems is that every sink client have a SHM memory if
dbus is enabled and any update generates frames for this SHM memory
even if the client is not showing them.
This patch introduces VideoManager::startShmSink, which enable
or disable transfer and works like VideoManager::registerSinkTarget.
Thus, a transfer will only be done if the client is explicitly
asking to transfer frames.
Change-Id: I1d265b7ffcdc37aff9c5f729a146fa26c5d7d4a1
GitLab: https://git.jami.net/savoirfairelinux/jami-product-backlog/-/issues/9
Small helpers for signal handling.
`with-signal-handler` is useful for scoping signal handler and
`with-signal-handler-sync` for signal synchronization.
Change-Id: Idc7696fb273003d526f3a4658e7fb5623c2c5827
Because swarm is a synched history compatible with multi-devices,
if a message from the swarm is read on one device it should be
synchronized with other devices as much as possible.
The idea of this patch is to add lastDisplayed sent in synched
datas to allow clients to update the read status. However, there
is several scenarios to take into account, because the history
can be partially synched across devices.
5 scenarios are supported:
+ if the last displayed sent by other devices is the same as the
current one, there is nothing to do.
+ if there is no last displayed for the current device, the remote
displayed message is used.
+ if the remote last displayed is not present in the repo, it means
that the commit will be fetched later, so cache the result
+ if the remote is already fetched, we check that the local last
displayed is before in the history to replace it
+ Finally if a message is announced from the same author, it means
that we need to update the last displayed.
If the last displayed message is updated, AccountMessageStatusChanged
is triggered for the client.
Doc: https://git.jami.net/savoirfairelinux/jami-project/-/wikis/technical/2.3.%20Swarm
Change-Id: Iedd29129d72cbeb43499471bdfd492dd4d49dcb6
Accounts can see their certificates expire. When it's the case, a
migration is needed. However, several regressions can happen, because
this behaviour can be tricky to test correctly. In this patch, a
test is added to validate that the migration is done whenever the
certificate expires.
+ OpenDHT needs to be bumped in order to be able to change the validity
period of a certificate.
+ In ArchiveAccountManager, a method is added to change the validity
of a certificate in the chain.
+ This patch also fixes a crash when a migration occurs directly on
the archive (info_ was null causing a segfault).
+ Finally, cleanup some signatures unused in JamiAccount.
GitLab: #684 (this is some preparative work)
Change-Id: I901bc67fd63ce2ab26ded64662f8333d3a0eed50
The method was bugguy, because the whole point here is to check
if the conversation contains enough informations at this point to
validate the user, not to compare with pinned certificate.
Moreover, a user can sync the history from another device, without
ever connecting to the original author, so the certificateStore
will not have the device certificate in this case, so only uses
from the repository.
A test is added to reflect this.
Change-Id: I3af5e7769174eedcb54e17181d4530593960c9c9
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
Because multiple threads can access the TrustStore to update/add/rm
certificates, introduce a mutex to protect the maps.
Because a lot of methods only access the maps in read-only, the
mutex is mutable. Moreover, because isAllowed will check the whole
chain, to avoid multiple lock/unlocks, the mutex is a recursive one.
Change-Id: Iec197221e2eefba4a7192f36f1a9a952f2533778
GitLab: #690
In conference and auto-answer mode, if the remote peer requests
a media change, the remote media was used to configure the local
media. This is bad, since if the remote muted its audio, it will
also mute the local audio.
Now, the existing media will not be modified, and the new media
will be automatically added if any.
Gitlab: #688
Change-Id: Id5388ed916eaa5755202b4b5b5fad118f0dc9c1e
If the account is incorrectly registered (i.e. the common case
is that the DHT socket is not correctly initialized),
setRegistrationState(RegistrationState::ERROR_GENERIC) will be
called and the dht will not be usable.
Calling doUnregister will cause the daemon to block on
dht_->shutdown(). Because the account is not ready to be used,
doUnregister() should do nothing if any error happened during the
registration.
Also, removes 2 unused states.
Change-Id: I0393786afea8c13506c7c87caf265b09182ea0ae
When processing an incoming or outgoing re-invite, the ice media
session and its associated RTP sessions are kept until the
new ice media session is successfully negotiated.
Gitlab: #666
Change-Id: I608d241d82b346b2c190ada046eed86dd86a7178
GOOPS is Guile Object Oriented Programming System.
It's easier to extend and break less the scenarios using GOOPS. e.g., a
scenario published on Gitlab should work two weeks later. This is not the case
right now and the goal of using GOOPS is to offer a stable API for the agent,
while keeping it flexible.
Change-Id: If6a038b6d8c371f8e74849749770f1dec8559b91
callbacks, such as transaction_request_cb uses the sipTransportBroker
object. So, sipTransportBroker MUST be destroyed after that every
callbacks are called, so after the destruction of endpt_
Change-Id: I795e02544abf9188db4971d7465ac537b1a568d9
GitLab: #681
if videoRtp is not initialized, the information is dropped. So,
it should be stored to avoid any drop of informations.
Note: in the future the container should change, because rotation
is currently applied to all video streams.
Change-Id: I036ffe7b6a248a3d8d7defeff1be78e008447fbd
GitLab: #678
Currently, the media attribute in the SDP is always set to
'sendrecv' regardless of the mute state of the media.
In this patch, media direction will be set according to mute
state of the media.
Note that this only applies if the mute/unmute requires media
renegotiation (SIP re-invite with new SDP session). Currently,
this only the case for video media. For audio, mute/unmute is
done locally without SIP re-invite.
References:
RFC-3264
RFC-4317 (non-normative)
Gitlab: #645
Change-Id: I604331255bd25dfe732e192039a673a0980105fa
getVideoInput is called in two different place:
+ openVideoInput from the client
+ VideoRtpSession::startSender() from the daemon
Nothing is blocking both sides to do it at the same time.
In this case, two VideoInputs can be created, causing the second
one to fail because the device is busy (used by the first one)
and causing weird results (i.e. sometimes the video is not shown).
Change-Id: I23e34a95efe4972fbe111c19f0f0989f5e8ae8a9
Sometimes, buffer with incorrect capacity were injected into
the audio, causing the daemon to crash.
Before the stream's split, stopStream was flushing the buffers.
In this patch, stopStream will correctly re-init the buffers and
avoid to inject incorrect buffer into the audio.
Also, remove unused value in buf_manager.h and clean some warnings
for log.
Finally, modify engineServiceRing to avoid many push operations
and make it similar to engineServicePlay
Change-Id: I589cea814452d3dbf5172af6369e448dcd9d5c72
GitLab: #676
Because media encoder flush() involves encoding we should change
initialized flag after calling flush(), otherwise, it could lead to
new stream initializing.
https://git.jami.net/savoirfairelinux/jami-client-macos/-/issues/299
Change-Id: I88d5648a6f252bd78776f505f891f09a4e5b12e1
Using JAMI_TIMESTAMP_FMT, developers can now format the log's timestamp
according to their needs and taste. The formatting is the same as strftime(3).
Change-Id: Ibea56852b2efc37f66aeeeda857e307130099720
Decouple the creation and the initialization of media coding
sessions to ease the re-initialization of encoding session
(when resolution changes for instance).
Gitlab: https://git.jami.net/savoirfairelinux/jami-project/-/issues/1294
Change-Id: Id5927d4aeb29bc9d4fe806bde6dc9bd28a0e6fe2