Commit Graph

15442 Commits

Author SHA1 Message Date
02c5cecd36 agent/active-agent: Fix calling problems
Change-Id: I3f7b3fd9e5bea986f5b600273ae4ddb07bdd787a
2021-12-23 09:52:48 -05:00
ea6a019d97 logger: Add NO_COLOR for console logger
Change-Id: I02ccb3c2d05aaa14a7f42dd0c6e2854f9905ccf2
2021-12-22 10:59:09 -05:00
21c8feb731 meson: link the library with '-Wl,-Bsymbolic'
Change-Id: I2496bc42192ad65135c781476f6f5d4bcc795d19
2021-12-20 15:42:45 +03:00
884549c8c1 build: fix build with --disable-video
Change-Id: I564d9d68f73c20a3105bfd706627b6e3db02aaf5
GitLab: #238
2021-12-17 11:37:17 -05:00
38981578d5 auto-answer - add unit test
Add a media negotiation unit test for auto-answer mode

Gitlab: #645

Change-Id: I37f768ce48e078fbd95a2c9b28997877a4dc468d
2021-12-17 09:35:33 -05:00
c74375b3f8 sipvoiplink: avoid to drop rotation's informations
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
2021-12-16 15:36:43 -05:00
a887b2dee1 SDP - set media direction according to mute state
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
2021-12-16 15:32:36 -05:00
dd700c3177 misc: remove dead code
This code is unused since we introduced processRtcpChecker()

Change-Id: If86295d885997c415e8f1681c6b9ad049c93de9e
2021-12-16 14:32:01 -05:00
40ee25ff8e videomanager: protect double video input creation
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
2021-12-15 15:36:53 -05:00
ea97002a08 opensl: fix incorrect injected buffer
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
2021-12-15 15:05:16 -05:00
41eab75d73 video: fix screen sharing on macOS
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
2021-12-15 12:13:54 -05:00
9c9d11e410 misc: fix typo
- tranport -> transport

Change-Id: I1991ba7324c22625e8b6cdf568357e3ff6540557
2021-12-15 12:01:43 -05:00
09359cdfb3 logger: Fix missing TID for custom timestamp
Change-Id: I3f0015d5f492137592af5d6c247ca439dd75dd38
2021-12-14 13:31:47 -05:00
800dbaba99 logger: Add custom timestamp format
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
2021-12-14 11:00:07 -05:00
1bb4739f59 media-encoder: decouple session creation and initialization
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
2021-12-13 15:07:34 -05:00
3236a6af07 account_archive: add test for import/export on DHT
Change-Id: I547dfeaf1734873ac9f8db82a181769de11a2bb6
2021-12-10 11:54:14 -05:00
a5aed459a0 agent/bindings/conversation: Add swarm bindings
Change-Id: I8a02ae82cb2cf1494a13b263aca0555ab84ed98f
2021-12-10 09:21:18 -05:00
b65146fed3 agent/bindings/account: Add add-contact, remove-contact bindings
Change-Id: I2fca281e9144d06243ca09879a1d86551ccd1996
2021-12-10 09:21:18 -05:00
66ab51817f agent/bindings/signal: Protect from GC callbacks
Change-Id: If91bed7badd8229aee216a91445b758e8901e573
2021-12-10 09:21:18 -05:00
440a71b488 conference: fix current protocol issues
This patch fix 3 little issues:
+ "device" was always empty. Uses the transport to fill the device
field. This will be used in the next version of the protocol.
+ raiseHand was bugguy in two ways:
    + It was only usable by moderators
    + Somebody was able to change the raiseHand for other peers

Change-Id: I32bf37c5063973a5a5962dd8984c87fb05d33a3d
2021-12-09 14:50:33 -05:00
ff37ad28cc dbuscpp: uncomment check for version
Change-Id: I82bde67fed7a295e888c2ea8f96c6e4646f51e64
2021-12-08 16:19:57 -05:00
b4167b175b screensharing: add framerate for macOS
Change-Id: I2a22e80a8ea826641afef9a82bf3b17ca35fcaed
2021-12-08 16:18:11 -05:00
dc71d87c73 media_encoder: avoid segfault on nullptr
Caught by ut_media_encoder:

READ of size 8 at 0x602000029818 thread T0
    #0 0x5649e914d6e0 in jami::MediaEncoder::send(AVPacket&, int) media/media_encoder.cpp:504
    #1 0x5649e914d05c in jami::MediaEncoder::encode(AVFrame*, int) media/media_encoder.cpp:480
    #2 0x5649e8cac119 in jami::test::MediaEncoderTest::testMultiStream() media/test_media_encoder.cpp:183

outputCtx_->nb_streams can be different from encoders.size(), and if
not checked can lead to a crash

Change-Id: I3c0217ec3e1d50950bf46989e0dd6797fee8972e
2021-12-08 08:47:46 -05:00
feb26e4741 sink: avoid deadock during frame size change
Lock was:
    frame #3: 0x00000074f22d0b74 libc++_shared.so`std::__ndk1::mutex::lock()
    frame #5: 0x00000074f2f91b10 libring.so`std::__ndk1::lock_guard<std::__ndk1::mutex>::lock_guard()
    frame #6: 0x00000074f3156d3c libring.so`jami::video::SinkClient::registerTarget() at sinkclient.h:80:37
    frame #7: 0x00000074f3154f74 libring.so`DRing::registerSinkTarget(sinkId="2920319278288091") at videomanager.cpp:527:15
    frame #8: 0x00000074f2f1dccc libring.so`Java_net_jami_daemon_JamiServiceJNI_unregisterVideoCallback()
    frame #45: 0x00000074f2f3491c libring.so`SwigDirector_VideoCallback::decodingStopped()
    frame #48: 0x00000074f319a480 libring.so`void jami::emitSignal<DRing::VideoSignal::DecodingStopped>() at ring_signal.h:66:13
    frame #49: 0x00000074f31993ec libring.so`jami::video::SinkClient::setFrameSize(this=0x00000074c298caa0, width=0, height=0) at sinkclient.cpp:482:9
    frame #50: 0x00000074f3199f74 libring.so`jami::video::SinkClient::update() at sinkclient.cpp:427:13
    frame #51: 0x00000074f316c69c libring.so`jami::Observable<std::__ndk1::shared_ptr<DRing::MediaFrame> >::notify() at observer.h:138:23
    frame #52: 0x00000074f31a7094 libring.so`jami::video::VideoGenerator::publishFrame() at video_base.cpp:56:5


Change-Id: I1824bad767543a3e789e13af1489613a044a7473
2021-12-07 13:13:09 -05:00
9c74ea2cbb contrib: fix build without flock
Change-Id: I274ed5b9b6f97b06e7a355b941f81f86c7816c24
2021-12-07 10:31:58 -05:00
3466f1a2af build: lower minimum required version for webrtc-audio-processing to 0.3
This allows us to build with webrtc-audio-processing distro packages
currently available across supported Debian releases.

Change-Id: I25584a0564ceb78e8eefec78e5e903356c37ddab
2021-12-06 13:55:04 -05:00
0264efe968 ffmpeg: enable mkv support
This fix ut_media_encoder
Also avoid crash when outputCtx_ is nullptr and the format is unrecognised.

Change-Id: I6df5a2e229e0313ea2b3c34b37f9f2900058c75f
2021-12-03 10:43:23 -05:00
ac4993401a video sender: allow sending encoded packets
This fixes Android' accelerated video encoding

Change-Id: Ie0cc7f3699f8c74eb205a395ae4235b1b1a7af89
2021-12-02 17:39:03 -05:00
de0b797836 sinkclient: add the ability to disable shm via libwrap
This allow to generate jamid for dbus usage and client-qt with
libwrap.

Change-Id: Ia23a0cec2efb4347166e0123c662da6c134c2238
GitLab: https://git.jami.net/savoirfairelinux/jami-project/-/issues/1312
2021-12-02 12:16:21 -05:00
cc8fb02462 x11: window sharing
+ If in screen sharing, the hardware acceleration encoding is disabled

GitLab: https://git.jami.net/savoirfairelinux/jami-project/-/issues/1294

Change-Id: I24982b4454d724bb86059a50a3c2d01fe6fab147
2021-11-30 12:08:50 -05:00
35e4cfce40 multiplexed_socket: fix race condition on acceptation
Because some callbacks can take a long time (accepting a SIP channel
will starts to sync profiles, ask for new channel, etc), control packets
are handled in their own thread. However, if the peer accepts a request,
it can starts to use it and send data on it. When finished, it will close
the socket and both peer will remove the channel.
In some case, the channel can be removed before
MultiplexedSocket::Impl::onAccept, causing upper layers to handle a
bad channel. In this patch, we removes the channel only when upper layers
know that the channel is accepted and ready to use. Also, onAccept()
doesn't create wrong channels (which was a bug, where isInitiator() was
in the wrong state).

GitLab: #659
Change-Id: I4f45feacc2624ce0135ace09f7e0188b56fcf81f
2021-11-29 09:57:52 -05:00
81d75c92d5 jamiaccount: protect module's initialization
Else, the module can be created twice and one will be invalidated
causing some crashes

Change-Id: I1403fc27e3baa24c1ad6e4c8ae5a352e328374ee
2021-11-25 15:29:19 -05:00
c6661d1857 swarm: fix racecondition with acceptTrustRequest
AcceptTrustRequest should update conversation's module to directly
return the syncing conversation. Moreover, configurationMutex_ should
be recursive to allow sync between trust and conversation's requests.

This fix ut_conversationRequest where the problem was that the
conversation's requests were updated after ContactAdded, causing
removeContact() to remove the conversation, but acceptTrustRequest
re-adds it during the operation.

Change-Id: If676dc58290f87c289a6e63eb9afa04d2cc25df5
GitLab: #659
2021-11-25 15:29:19 -05:00
82707afc80 conference - add support to change media attributes of the host
Gitlab: #638

Change-Id: I3c656bccc13c595bc44023d3642f820ab580961b
2021-11-24 14:57:58 -05:00
c5608b933a videomanager: add deviceId to RequestKeyFrame
Change-Id: Ie8cdb2a771a64dbdb9384fbbfadb255bec64d9c6
2021-11-23 12:08:55 -05:00
f3af8193ea update metainfo
Change-Id: Ibb5b615d613cb1f1edf2c0ddaec6caba2d22c5ab
2021-11-23 10:23:37 -05:00
df9dba9bba multi-stream - remove legacy code
Remove obsolete code kept for backward compatibility.
Add call transfer test case

Gitlab: #470

Change-Id: I81472b8308ec402911670e8658308a184b97206c
2021-11-22 15:37:14 -05:00
db0726465c player: fix close player signature
Change-Id: I9f435dc52218222ccbfae1fb507f13a8cb71f6f7
2021-11-22 13:49:03 -05:00
71b4d7a396 swarm: various fixes
This patch fixes current unitTest
+ Fix testCreateConversationWithMessagesThenAddDevice messageReceived
flag
+ Remove useless sleep in tests
+ in ut_conversation fix messageReceived flag
+ lock convInfo and convRequests to avoid invalid write operations
+ fix pending callbacks if connected via a DHT request
+ remove useless log

Change-Id: If53ecf0c064e9c1424c11a4af1e13d31294e6be9
2021-11-22 13:26:34 -05:00
8448d70c5d SIP - set peer's 'Allow' methods if present in header
SIP specification does not mandate the use of 'Allow'
header and which message must contain this header.
So, the 'Allow' header may be present in some SIP
messages (e.g. INVITE) but not in subsequent messages
(e.g. ACK), thus the current list of methods (if any)
will be updated only if the new list is not empty.

Gitlab: #572

Change-Id: If10c73dd116ebd2bbcec413d377caf524aca8897
2021-11-22 12:28:02 -05:00
709d51f485 ice_transport: Replace assertion for conditional
Change-Id: Ieb12a81646de61bce2cbb1e369e1c8a82ea118da
2021-11-22 09:37:53 -05:00
caad9b34c9 tests: fix ut_conference
The conference should be used in the tests after the first
conferenceChanged, to be sure that every calls are binded to the
conference.
Then, before adding a call to the conference, it should be CURRENT
from the host perspective, not the receiver. So, add "hostState"
to store the state of the call from the host perspective.

Change-Id: I9d27b4c0461ede05d27ea849de08c22e9fc3b249
2021-11-19 14:01:35 -05:00
5e6b8823fb agent/bindings: Bump bindings to new API for calls, conferences
Change-Id: I759ebe5f1827c27468f0d60e91098c70257c7b30
2021-11-19 10:55:15 -05:00
24d9284dd5 SIP MESSAGE - check UA allowed methods
SIP MESSAGE method is an extention to SIP methods and might not be
supported by all User Agents (UA).
In this change, the MESSAGE method is only used if it's present in
the list of allowed methods (Allow header).
Since the Allow header is not mandatory, if the Allow header is not
present we assume that the MESSAGE method is not supported.

Gitlab: #572

Change-Id: I85d35fa0f9be108b34a538b8c732f1530ad68bd6
2021-11-18 14:34:39 -05:00
eacbec668d videomanager api: add deviceId to stopCapture
Change-Id: Ie1b88abf5790e2f17251e2c34ed229e34cdc496c
2021-11-18 12:22:37 -05:00
f4a57d918d ice transport - fix illegal memory access
Set vector size of remote addresses to component count
when initializing the ICE instance.

Gitlab: #573

Change-Id: Iff02142dfb36326e6baa239900ced9452ab3bb8e
2021-11-18 10:49:24 -05:00
9e3d8ac70e callmanager: fix signature for dbus
Change-Id: Id2e2a1f79be9ee21c127b3b77fb189af78517138
2021-11-17 16:23:37 -05: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
517f6299e4 api: replace {start/stop}Camera, switchInput with {open/close}VideoInput
Gitlab: #594
Change-Id: Ie9ed60ed9e1ec6f1d7344b2c79544b9cd6f22a91
2021-11-16 14:20:23 -05:00
0d1a7ab224 ice transport: avoid deadlock in send callback
deadlock could happen with:
* handleEvents -> pj_lock -> on_data_sent -> iceMutex_
* send() -> iceMutex_ -> pj_ice_strans_sendto2 -> pj_lock

This was fixed by:
* Not setting on_data_sent callback for UDP
* Using a different mutex than iceMutex_ to wait for data send

Change-Id: Ic50698ac9dfe37574f145baa718fff8b74cc99be
2021-11-16 14:20:23 -05:00