diff options
author | fiaxh <git@lightrise.org> | 2021-03-19 22:46:39 +0100 |
---|---|---|
committer | fiaxh <git@lightrise.org> | 2021-03-21 12:40:04 +0100 |
commit | 2b90fcc39a1079346d6c5e2bfff8987104da737a (patch) | |
tree | e9c645a82010392623ec2cd3333e8dd1c8d4431a /xmpp-vala/src/module/xep/0166_jingle/component.vala | |
parent | 148cf48d2b68354881066e2587e2673c91d2619a (diff) | |
download | dino-2b90fcc39a1079346d6c5e2bfff8987104da737a.tar.gz dino-2b90fcc39a1079346d6c5e2bfff8987104da737a.zip |
Improve & refactor Jingle base implementation
Co-authored-by: Marvin W <git@larma.de>
Diffstat (limited to 'xmpp-vala/src/module/xep/0166_jingle/component.vala')
-rw-r--r-- | xmpp-vala/src/module/xep/0166_jingle/component.vala | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/xmpp-vala/src/module/xep/0166_jingle/component.vala b/xmpp-vala/src/module/xep/0166_jingle/component.vala new file mode 100644 index 00000000..544bcd69 --- /dev/null +++ b/xmpp-vala/src/module/xep/0166_jingle/component.vala @@ -0,0 +1,52 @@ +namespace Xmpp.Xep.Jingle { + + public abstract class ComponentConnection : Object { + public uint8 component_id { get; set; default = 0; } + public abstract async void terminate(bool we_terminated, string? reason_name = null, string? reason_text = null); + public signal void connection_closed(); + public signal void connection_error(IOError e); + } + + public abstract class DatagramConnection : ComponentConnection { + public bool ready { get; set; default = false; } + private string? terminate_reason_name = null; + private string? terminate_reason_text = null; + private bool terminated = false; + + public override async void terminate(bool we_terminated, string? reason_string = null, string? reason_text = null) { + if (!terminated) { + terminated = true; + terminate_reason_name = reason_string; + terminate_reason_text = reason_text; + connection_closed(); + } + } + + public signal void datagram_received(Bytes datagram); + public abstract void send_datagram(Bytes datagram); + } + + public class StreamingConnection : ComponentConnection { + public Gee.Future<IOStream> stream { get { return promise.future; } } + protected Gee.Promise<IOStream> promise = new Gee.Promise<IOStream>(); + private string? terminated = null; + + public async void init(IOStream stream) { + assert(!this.stream.ready); + promise.set_value(stream); + if (terminated != null) { + yield stream.close_async(); + } + } + + public override async void terminate(bool we_terminated, string? reason_name = null, string? reason_text = null) { + if (terminated == null) { + terminated = (reason_name ?? "") + " - " + (reason_text ?? "") + @"we terminated? $we_terminated"; + if (stream.ready) { + yield stream.value.close_async(); + } + } + } + } +} + |