aboutsummaryrefslogtreecommitdiff
path: root/plugins/ice
diff options
context:
space:
mode:
authorMarvin W <git@larma.de>2021-12-19 22:36:26 +0100
committerMarvin W <git@larma.de>2021-12-19 22:36:26 +0100
commitb1c1751cc42948ae76a363691fad575348207396 (patch)
tree92820e67b9631a7543ca85db7079a3ca4144e607 /plugins/ice
parentb07c4187ef40295c17cc09fea6dc5ba4137fd73b (diff)
downloaddino-b1c1751cc42948ae76a363691fad575348207396.tar.gz
dino-b1c1751cc42948ae76a363691fad575348207396.zip
DTLS: Use own thread for connection establishment
Diffstat (limited to 'plugins/ice')
-rw-r--r--plugins/ice/src/dtls_srtp.vala52
1 files changed, 30 insertions, 22 deletions
diff --git a/plugins/ice/src/dtls_srtp.vala b/plugins/ice/src/dtls_srtp.vala
index 91c11eee..c5b2eb75 100644
--- a/plugins/ice/src/dtls_srtp.vala
+++ b/plugins/ice/src/dtls_srtp.vala
@@ -112,6 +112,19 @@ public class Handler {
}
public async Xmpp.Xep.Jingle.ContentEncryption? setup_dtls_connection() {
+ MainContext context = MainContext.current_source().get_context();
+ var thread = new Thread<Xmpp.Xep.Jingle.ContentEncryption>("dtls-connection", () => {
+ var res = setup_dtls_connection_thread();
+ Source source = new IdleSource();
+ source.set_callback(setup_dtls_connection.callback);
+ source.attach(context);
+ return res;
+ });
+ yield;
+ return thread.join();
+ }
+
+ private Xmpp.Xep.Jingle.ContentEncryption? setup_dtls_connection_thread() {
buffer_mutex.lock();
if (stop) {
restart = true;
@@ -146,28 +159,23 @@ public class Handler {
session.set_push_function(push_function);
session.set_verify_function(verify_function);
- Thread<int> thread = new Thread<int> (null, () => {
- DateTime maximum_time = new DateTime.now_utc().add_seconds(20);
- do {
- err = session.handshake();
+ DateTime maximum_time = new DateTime.now_utc().add_seconds(20);
+ do {
+ err = session.handshake();
+
+ DateTime current_time = new DateTime.now_utc();
+ if (maximum_time.compare(current_time) < 0) {
+ warning("DTLS handshake timeouted");
+ err = ErrorCode.APPLICATION_ERROR_MIN + 1;
+ break;
+ }
+ if (stop) {
+ debug("DTLS handshake stopped");
+ err = ErrorCode.APPLICATION_ERROR_MIN + 2;
+ break;
+ }
+ } while (err < 0 && !((ErrorCode)err).is_fatal());
- DateTime current_time = new DateTime.now_utc();
- if (maximum_time.compare(current_time) < 0) {
- warning("DTLS handshake timeouted");
- err = ErrorCode.APPLICATION_ERROR_MIN + 1;
- break;
- }
- if (stop) {
- debug("DTLS handshake stopped");
- err = ErrorCode.APPLICATION_ERROR_MIN + 2;
- break;
- }
- } while (err < 0 && !((ErrorCode)err).is_fatal());
- Idle.add(setup_dtls_connection.callback);
- return err;
- });
- yield;
- err = thread.join();
buffer_mutex.lock();
if (stop) {
stop = false;
@@ -176,7 +184,7 @@ public class Handler {
buffer_mutex.unlock();
if (restart) {
debug("Restarting DTLS handshake");
- return yield setup_dtls_connection();
+ return setup_dtls_connection_thread();
}
return null;
}