Commit Graph

10217 Commits

Author SHA1 Message Date
renovate[bot]
7c9426d12d
Update media3_version to v1.5.1
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-07 13:12:57 +00:00
Nextcloud Android Bot
1d0ce26dcc Weekly 21.0.0 Alpha 08 2025-01-06 03:10:30 +00:00
Nextcloud bot
214623a7af
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2025-01-04 03:03:24 +00:00
Marcel Hibbe
e6f44cb466
Merge pull request #4569 from nextcloud/fix-audio-and-video-not-received
Fix audio and video not received
2025-01-03 13:47:05 +01:00
Daniel Calviño Sánchez
f112e26d25
Fix SDP constraints used by PeerConnectionWrapper
The SDP constraints for publisher connections when the MCU is used were
set for all connections. Those constraints set "OfferToReceiveAudio" and
"OfferToReceiveVideo" to false, which disables receiving audio and video
when the local participant is the one sending the offer. Therefore,
audio and video was not received when the MCU was not used and the local
participant was the one initiating the connection.

The "OfferToReceiveXXX" configurations have no effect when set on an
answer (and thus are not even set, an empty MediaConstraints is used in
that case). However, when "OfferToReceiveVideo = false" is set the video
transceiver is explicitly stopped (which is used to avoid receiving
video when joining a call with audio only). Therefore, as
"OfferToReceiveVideo = false" was always set, video was never received
in subscriber connections when the MCU is used, or connections initiated
by the other peer when the MCU is not used.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2025-01-03 13:26:43 +01:00
Daniel Calviño Sánchez
94257da123
Rename attribute to a more accurate name
The SDP constraints should be set when the MCU is used, but only for
publisher connections; receiver connections should use the general SDP
constraints.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2025-01-03 13:26:42 +01:00
Marcel Hibbe
22efcd7e83
Merge pull request #4574 from nextcloud/convertLogClassToKotlin
Convert log class to kotlin
2025-01-03 13:14:00 +01:00
github-actions[bot]
40799bc606
Merge pull request #4573 from nextcloud/renovate/mockito-monorepo
Update mockito monorepo to v5.15.2
2025-01-03 11:50:09 +00:00
Marcel Hibbe
3874751fcb
convert Log class to kotlin
@JvmStatic is necessary to keep the static behavior of the method calls

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-01-03 12:44:56 +01:00
Marcel Hibbe
7680d51b09
Rename .java to .kt
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2025-01-03 12:44:53 +01:00
renovate[bot]
f21fe475a9
Update mockito monorepo to v5.15.2
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-03 11:37:28 +00:00
Marcel Hibbe
159465a945
Merge pull request #4536 from nextcloud/improve-handling-of-data-channels
Improve handling of data channels
2025-01-03 12:29:12 +01:00
Daniel Calviño Sánchez
d63bb31595
Fix "send" not respecting order of pending messages
When the data channel is not open yet data channel messages are queued
and then sent once opened. "onStateChange" is called from the WebRTC
signaling thread, while "send" can be called potentially from any
thread, so to send the data channel messages in the same order that they
were added new messages need to be enqueued until all the pending
messages have been sent. Otherwise, even if there is synchronization
already, it could happen that "onStateChange" was called but, before
getting the lock, "send" gets it and sends the new message before the
pending messages were sent.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2025-01-03 10:52:43 +01:00
Daniel Calviño Sánchez
b6d6986b62
Fix "removePeerConnection" not being thread-safe
Adding and disposing remote data channels is done from different
threads; they are added from the WebRTC signaling thread when
"onDataChannel" is called, while they can be disposed potentially from
any thread when "removePeerConnection" is called. To prevent race
conditions between them now both operations are synchronized.

However, as "onDataChannel" belongs to an inner class it needs to use a
synchronized statement with the outer class lock. This could still cause
a race condition if the same data channel was added again; this should
not happen, but it is handled just in case.

Moreover, once a data channel is disposed it can be no longer used, and
trying to call any of its methods throws an "IllegalStateException". Due
to this, as sending can be also done potentially from any thread, it
needs to be synchronized too with removing the peer connection.

State changes on data channels as well as receiving messages are also
done in the WebRTC signaling thread. State changes needs synchronization
as well, although receiving messages should not, as it does not directly
use the data channel (and it is assumed that using the buffers of a
disposed data channel is safe). Nevertheless a little check (which in
this case requires synchronization) was added to ignore the received
messages if the peer connection was removed already.

Finally, the synchronization added to "send" and "onStateChange" had the
nice side effect of making the pending data channel messages thread-safe
too, as before it could happen that a message was enqueued when the
pending messages were being sent, which caused a
"ConcurrentModificationException".

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2025-01-03 10:52:43 +01:00
Daniel Calviño Sánchez
a301bdeb76
Store data channel label
Getting the label is no longer possible once the data channel has been
disposed. This will help to make the observer thread-safe.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2025-01-03 10:52:43 +01:00
Daniel Calviño Sánchez
fae86910b8
Add logs for sending data channel messages
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2025-01-03 10:52:42 +01:00
Daniel Calviño Sánchez
ddd451dadb
Queue data channel messages sent when data channel is not open
Data channel messages can be sent only when the data channel is open.
Otherwise the message is simply lost. Clients of the
PeerConnectionWrapper do not need to be aware of that detail or keep
track of whether the data channel was open already or not, so now data
channel messages sent before the data channel is open are queued and
sent once the data channel is opened.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2025-01-03 10:52:42 +01:00
Daniel Calviño Sánchez
7cfee8f848
Split condition
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2025-01-03 10:52:42 +01:00
Daniel Calviño Sánchez
bcd3893e7d
Rewrite method to return early
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2025-01-03 10:52:42 +01:00
Daniel Calviño Sánchez
c222e01095
Move variable declaration into try block
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2025-01-03 10:52:41 +01:00
Daniel Calviño Sánchez
4d4b8832aa
Fix remote data channels not disposed when removing peer connection
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2025-01-03 10:52:41 +01:00
Daniel Calviño Sánchez
c940175453
Send data channel messages using "status" data channel
Data channel messages are expected to be sent using the "status" data
channel that is locally created. However, if another data channel was
opened by the remote peer the reference to the "status" data channel was
overwritten with the new data channel, and messages were sent instead on
the remote data channel.

In current Talk versions that was not a problem, and the change makes no
difference either, because since the support for Janus 1.x was added
data channel messages are listened on all data channels, independently
of their label or whether they were created by the local or remote peer.

However, in older Talk versions this fixes a regression introduced with
the support for Janus 1.x. In those versions only messages coming from
the "status" or "JanusDataChannel" data channels were taken into
account. When Janus is not used the WebUI opens the legacy
"simplewebrtc" data channel, so that data channel may be the one used to
send data channel messages (if it is open after the "status" data
channel), but the messages received on that data channel were ignored by
the WebUI. Nevertheless, at this point this is more an academic problem
than a real world problem, as it is unlikely that there are many
Nextcloud servers with Talk < 16 and without HPB being used.

Independently of all that, when the peer connection is removed only the
"status" data channel is disposed, but none of the remote data channels
are. This is just a variation of an already existing bug (the last open
data channel was the one disposed due to being the last saved reference,
but the rest were not) and it will be fixed in another commit.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2025-01-03 10:52:41 +01:00
Daniel Calviño Sánchez
a4cce0581c
Rename "sendChannelData" to "send"
The legacy name was a bit strange, so now it is renamed to just "send"
as the parameter type ("DataChannelMessage") gives enough context.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2025-01-03 10:52:41 +01:00
Daniel Calviño Sánchez
1f872553b9
Include data channel label in log message
This implicitly fixes trying to send the initial state on the latest
remote data channel found (which is the one stored in the "dataChannel"
attribute of the "PeerConnectionWrapper") when any other existing data
channel changes its status to open. Nevertheless, as all this will be
reworked, no unit test was added for it.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2025-01-03 10:52:40 +01:00
Daniel Calviño Sánchez
4daadc508c
Unify log messages for received data channel messages
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2025-01-03 10:52:40 +01:00
Daniel Calviño Sánchez
08630790b7
Add unit tests for receiving data channel messages
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2025-01-03 10:52:40 +01:00
Daniel Calviño Sánchez
ed69d96a43
Add dummy Log implementation to be used in tests
Log methods are static, so they can not be mocked using Mockito.
Although it might be possible to use PowerMockito a dummy implementation
was added instead, as Log uses are widespread and it is not something
worth mocking anyway.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2025-01-03 10:52:40 +01:00
Daniel Calviño Sánchez
d34fdfb1c5
Remove Dagger related code from PeerConnectionWrapper
The PeerConnectionWrapper does not need to be injected in the
application, nor the Context needs to be injected in the
PeerConnectionWrapper. This all seems to be leftovers from the past, and
removing them would ease adding unit tests for the
PeerConnectionWrapper.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2025-01-03 10:52:39 +01:00
Nextcloud bot
a65b52b0e5
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2025-01-03 03:03:50 +00:00
Nextcloud Android Bot
e5d946d973 Weekly 21.0.0 Alpha 07 2024-12-30 03:10:49 +00:00
Nextcloud bot
b0658caea2
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-12-28 03:04:16 +00:00
Nextcloud bot
9630fc130d
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-12-27 03:04:12 +00:00
Andy Scherzinger
bcc563f839
Merge pull request #4568 from nextcloud/feat/workflow-auto-update-reuse.yml
chore(CI): Updating reuse.yml workflow from template
2024-12-26 15:23:18 +01:00
Nextcloud bot
c2255c61c8 chore(CI): Updating reuse.yml workflow from template
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-12-26 14:17:17 +00:00
Nextcloud bot
d092f03c96
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-12-26 03:04:24 +00:00
Nextcloud bot
bc5a289ee5
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-12-25 03:03:55 +00:00
Nextcloud bot
97e4e3aa90
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-12-24 03:02:01 +00:00
Nextcloud Android Bot
3a85f146b1 Weekly 21.0.0 Alpha 06 2024-12-23 03:12:34 +00:00
Nextcloud bot
e7e6e421b0
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-12-23 03:01:48 +00:00
Nextcloud bot
127034fe33
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-12-22 03:18:49 +00:00
Andy Scherzinger
afd1187115
Merge pull request #4566 from nextcloud/fix/noid/ktlint
fix(ktlint): correct code formatting
2024-12-21 18:55:07 +01:00
Andy Scherzinger
62d1eeafce
fix(ktlint): correct code formatting
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2024-12-21 16:50:40 +01:00
Nextcloud bot
144ccc4106
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-12-21 03:03:23 +00:00
Andy Scherzinger
e1d18200ec
Merge pull request #4565 from nextcloud/renovate/daggerversion
Update daggerVersion to v2.54
2024-12-20 21:41:21 +01:00
renovate[bot]
85efdd5a7b
Update daggerVersion to v2.54
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-20 20:03:07 +00:00
Andy Scherzinger
4da0593775
Merge pull request #4562 from nextcloud/renovate/gradle-8.x
Update dependency gradle to v8.12
2024-12-20 20:39:13 +01:00
Andy Scherzinger
e4552a0216
Merge pull request #4564 from nextcloud/renovate/github-codeql-action-3.x
Update github/codeql-action action to v3.28.0
2024-12-20 20:38:47 +01:00
renovate[bot]
8247f429d8
Update github/codeql-action action to v3.28.0
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-20 19:19:50 +00:00
renovate[bot]
e139bf9d2f Update dependency gradle to v8.12
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-20 20:19:05 +01:00
github-actions[bot]
7e5755325d
Merge pull request #4561 from nextcloud/renovate/kotlinx-coroutines-monorepo
Update dependency org.jetbrains.kotlinx:kotlinx-coroutines-test to v1.10.1
2024-12-20 16:46:48 +00:00