Commit Graph

104 Commits

Author SHA1 Message Date
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
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
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
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
Andy Scherzinger
12620a5c3e
style(detekt): shorten long methods
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2024-12-10 09:00:47 +01:00
Andy Scherzinger
06f7597de0
style(detekt): Ignore TooGenericExceptionThrown on test stub implementation
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2024-12-06 11:11:23 +01:00
Andy Scherzinger
5011649499
fix(detekt): shorten test method by extracting conversation object creation
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2024-12-02 18:12:35 +01:00
Daniel Calviño Sánchez
0705451921 Fix handling of end call for all with external signaling
When the message applies to all participants the property is all in
lower case. The comparison is case sensitive, so the message was ignored
and the call was not left by the Talk Android app.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2024-10-23 13:01:16 +02:00
Andy Scherzinger
4571732480
fix(ktlint): Replace wildcard import
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2024-10-07 15:45:20 +02:00
sowjanyakch
25846fe23f
set default emoji only when status icon is null
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-09-27 12:24:38 +02:00
Marcel Hibbe
78e738bd51
add copyright to fix reuse
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2024-09-27 09:37:42 +02:00
Marcel Hibbe
ebc2fd2702
Add test for conversation conversion
This test respects different API versions and checks if default values are set as expected.

- remove deprecated+unused methods
- remove comments
- remove unnecessary double-bang operator

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2024-09-26 13:27:44 +02:00
Daniel Calviño Sánchez
3b7c5e1d27
Store actor data from signaling messages with participant updates
Starting with Talk 20 the signaling messages that provide updates to the
participants ("participants->update" in the external signaling server,
"usersInRoom" in the internal signaling server) now include "actorType"
and "actorId" properties for each participant.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2024-09-13 15:51:20 +02:00
Marcel Hibbe
092499ce92
Merge pull request #4100 from nextcloud/restore-broken-tests
Revert "fix: deactivate broken test and remove test platform config"
2024-09-06 11:15:10 +02:00
sowjanyakch
dba56ddac0
Solved error unable to create call adapter for GenericOverall
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-09-05 15:41:11 +02:00
sowjanyakch
9ae0d524c0
update ContactsViewModelTest - shareTypes
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-09-05 15:41:09 +02:00
sowjanyakch
cd01c80d71
ConversationCreationActivity UI
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-09-05 15:41:08 +02:00
Marcel Hibbe
ac217163e9
add dummy initialization of Conversation
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2024-09-05 14:54:40 +02:00
rapterjet2004
bc0dae7dce
fixed CI
Signed-off-by: rapterjet2004 <juliuslinus1@gmail.com>
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2024-09-05 14:53:36 +02:00
Joas Schilling
8957cff0d0
Revert "fix: deactivate broken test and remove test platform config"
This reverts commit 37625403d6.

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2024-09-05 14:53:36 +02:00
Andy Scherzinger
37625403d6
fix: deactivate broken test and remove test platform config
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2024-08-20 14:56:05 +02:00
Marcel Hibbe
2408d639e4
Offline support for conversations and chats
Authors: Julius Linus and Marcel Hibbe

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2024-08-12 16:47:03 +02:00
sowjanyakch
4508cbb0aa
work on codacy warnings
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-08-09 15:44:36 +02:00
sowjanyakch
c6fb2ef6e1
refactoring
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-08-09 15:44:35 +02:00
sowjanyakch
77a9ae601f
add signature
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-08-09 15:44:35 +02:00
sowjanyakch
a51e3b98ad
Image uri test cases
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-08-09 15:44:35 +02:00
sowjanyakch
d656a93e8a
add test cases for create room
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-08-09 15:44:35 +02:00
sowjanyakch
8d52a6fcc9
add error test case for contacts fetch
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-08-09 15:44:35 +02:00
sowjanyakch
62b2ecd338
Add tests for fetching contacts
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-08-09 15:44:35 +02:00
sowjanyakch
9526825da7
Refactor - use Icons
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-08-09 15:44:34 +02:00
sowjanyakch
acbda6f887
Create fake data for unit tests
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-08-09 15:44:34 +02:00
sowjanyakch
1c26c757f0
Refactor ShareUtils and remove ShareUtilsTest file
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-04-17 13:39:31 +02:00
Andy Scherzinger
bfcc6e9f86
Add SPDX header
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2024-03-22 01:05:20 +01:00
Marcel Hibbe
abe9a9d5fb
fix ShareUtilsTest
fix to not assume baseUrl can't be null for mockito 'when' condition

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2024-03-04 12:58:40 +01:00
Marcel Hibbe
754b825096
pass spreedCapabilities instead user to CapabilitiesUtil
To support federated rooms, capabilities have to be checked from the room which now also has capabilities.
If room is not federated, capabilities fromuser are still checked.
This is why CapabilitiesUtil had to be refactored to accept SpreedCapabilities which can come from room or user.

Other than that, many other changes were made as a result of this change.

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2024-03-01 11:25:11 +01:00
Andy Scherzinger
3a6e18c07e
reformat test code for latest ktlint release
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-12-05 15:37:47 +01:00
Marcel Hibbe
591d6dc3e8
remove conductor
- replace remaining controllers with activities
- remove conductor lib
- modify some code related to account management and conductor

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2023-11-23 13:26:01 +01:00
tobiasKaminsky
838b14b9dc
extracted and created tests
Signed-off-by: tobiasKaminsky <tobias@kaminsky.me>
2023-09-20 18:11:56 +02:00
Smarshal21
58931564ff FIxed ktlintCheck Errors 2023-09-19 11:48:03 +05:30
Smarshal21
8913b0fc62 updated the author in the copyright headers 2023-09-19 11:48:03 +05:30
Smarshal21
b307add657 Fixed Codacy Static Code Warnings 2023-09-19 11:48:03 +05:30
Smarshal21
38081a523d Fixed Codacy Lint Warnings 2023-09-19 11:48:03 +05:30
Smarshal21
e5debca7c1 Added Instrumentation Test and Unit Tests 2023-09-19 11:48:03 +05:30
Andy Scherzinger
f77d7e57ed
remove empty line
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-09-08 18:47:00 +02:00
Smarshall
76e86ca536 Updated Gradle and added the license header as comment 2023-09-08 10:49:34 +02:00
Smarshall
27d977af11 Added Unit Test For UserIdUtils 2023-09-08 10:49:34 +02:00
Andy Scherzinger
7ad8e304e2
codacy: Fields should be declared at the top of the class, before any method declarations, constructors, initializers or inner classes.
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-06-01 22:27:43 +02:00
Andy Scherzinger
c084d63944
codacy: Fields should be declared at the top of the class, before any method declarations, constructors, initializers or inner classes.
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2023-06-01 19:10:35 +02:00