aboutsummaryrefslogtreecommitdiff
path: root/libdino/src/service
diff options
context:
space:
mode:
Diffstat (limited to 'libdino/src/service')
-rw-r--r--libdino/src/service/calls.vala49
1 files changed, 19 insertions, 30 deletions
diff --git a/libdino/src/service/calls.vala b/libdino/src/service/calls.vala
index ccae3e05..d8cb7990 100644
--- a/libdino/src/service/calls.vala
+++ b/libdino/src/service/calls.vala
@@ -375,13 +375,6 @@ namespace Dino {
content.accept();
}
- private void on_connection_ready(Call call) {
- if (call.state == Call.State.RINGING || call.state == Call.State.ESTABLISHING) {
- call.state = Call.State.IN_PROGRESS;
- }
- update_call_encryption(call);
- }
-
private void on_call_terminated(Call call, bool we_terminated, string? reason_name, string? reason_text) {
if (call.state == Call.State.RINGING || call.state == Call.State.IN_PROGRESS || call.state == Call.State.ESTABLISHING) {
call.end_time = new DateTime.now_utc();
@@ -452,7 +445,7 @@ namespace Dino {
}
rtp_content_parameter.stream_created.connect((stream) => on_stream_created(call, rtp_content_parameter.media, stream));
- rtp_content_parameter.connection_ready.connect((status) => on_connection_ready(call));
+ rtp_content_parameter.connection_ready.connect((status) => on_connection_ready(call, content, rtp_content_parameter.media));
content.senders_modify_incoming.connect((content, proposed_senders) => {
if (content.session.senders_include_us(content.senders) != content.session.senders_include_us(proposed_senders)) {
@@ -466,36 +459,32 @@ namespace Dino {
on_counterpart_mute_update(call, false, "video");
}
});
-
- content.notify["encryption"].connect((obj, _) => {
- if (rtp_content_parameter.media == "audio") {
- audio_encryption[call] = ((Xep.Jingle.Content) obj).encryption;
- } else if (rtp_content_parameter.media == "video") {
- video_encryption[call] = ((Xep.Jingle.Content) obj).encryption;
- }
- });
}
- private void update_call_encryption(Call call) {
- if (audio_encryption[call] == null) {
- call.encryption = Encryption.NONE;
- encryption_updated(call, null);
- return;
+ private void on_connection_ready(Call call, Xep.Jingle.Content content, string media) {
+ if (call.state == Call.State.RINGING || call.state == Call.State.ESTABLISHING) {
+ call.state = Call.State.IN_PROGRESS;
}
- bool consistent_encryption = video_encryption[call] != null && audio_encryption[call].encryption_ns == video_encryption[call].encryption_ns;
+ if (media == "audio") {
+ audio_encryption[call] = content.encryption;
+ } else if (media == "video") {
+ video_encryption[call] = content.encryption;
+ }
- if (video_content[call] == null || consistent_encryption) {
- if (audio_encryption[call].encryption_ns == Xep.JingleIceUdp.DTLS_NS_URI) {
- call.encryption = Encryption.DTLS_SRTP;
- } else if (audio_encryption[call].encryption_name == "SRTP") {
- call.encryption = Encryption.SRTP;
- }
- encryption_updated(call, audio_encryption[call]);
- } else {
+ if ((audio_encryption.has_key(call) && audio_encryption[call] == null) || (video_encryption.has_key(call) && video_encryption[call] == null)) {
call.encryption = Encryption.NONE;
encryption_updated(call, null);
+ return;
+ }
+
+ Xep.Jingle.ContentEncryption encryption = audio_encryption[call] ?? video_encryption[call];
+ if (encryption.encryption_ns == Xep.JingleIceUdp.DTLS_NS_URI) {
+ call.encryption = Encryption.DTLS_SRTP;
+ } else if (encryption.encryption_name == "SRTP") {
+ call.encryption = Encryption.SRTP;
}
+ encryption_updated(call, encryption);
}
private void remove_call_from_datastructures(Call call) {