From a59f728bdd7b81964a460b96b6c56da0d9dfda01 Mon Sep 17 00:00:00 2001 From: fiaxh Date: Sat, 12 Aug 2017 23:14:50 +0200 Subject: Stream Management --- libdino/src/entity/jid.vala | 8 ++++---- libdino/src/service/connection_manager.vala | 2 +- libdino/src/service/module_manager.vala | 14 ++++++++++++-- libdino/src/service/stream_interactor.vala | 3 ++- 4 files changed, 19 insertions(+), 8 deletions(-) (limited to 'libdino') diff --git a/libdino/src/entity/jid.vala b/libdino/src/entity/jid.vala index 2283b466..42218fb2 100644 --- a/libdino/src/entity/jid.vala +++ b/libdino/src/entity/jid.vala @@ -63,12 +63,12 @@ public class Dino.Entities.Jid : Object { return jid; } - public bool equals_bare(Jid jid) { - return equals_bare_func(this, jid); + public bool equals_bare(Jid? jid) { + return jid != null && equals_bare_func(this, jid); } - public bool equals(Jid jid) { - return equals_func(this, jid); + public bool equals(Jid? jid) { + return jid != null && equals_func(this, jid); } public static new bool equals_bare_func(Jid jid1, Jid jid2) { diff --git a/libdino/src/service/connection_manager.vala b/libdino/src/service/connection_manager.vala index 509964b3..d932d1cc 100644 --- a/libdino/src/service/connection_manager.vala +++ b/libdino/src/service/connection_manager.vala @@ -126,7 +126,7 @@ public class ConnectionManager { Connection connection = new Connection(stream, new DateTime.now_local()); connections[account] = connection; change_connection_state(account, ConnectionState.CONNECTING); - stream.stream_negotiated.connect((stream) => { + stream.attached_modules.connect((stream) => { change_connection_state(account, ConnectionState.CONNECTED); }); stream.get_module(PlainSasl.Module.IDENTITY).received_auth_failure.connect((stream, node) => { diff --git a/libdino/src/service/module_manager.vala b/libdino/src/service/module_manager.vala index b10765f1..437ecaf0 100644 --- a/libdino/src/service/module_manager.vala +++ b/libdino/src/service/module_manager.vala @@ -33,20 +33,30 @@ public class ModuleManager { public ArrayList get_modules(Account account, string? resource = null) { ArrayList modules = new ArrayList(); - modules.add(new Bind.Module(resource == null ? account.resourcepart : resource)); - modules.add(new PlainSasl.Module(account.bare_jid.to_string(), account.password)); lock (module_map) { if (!module_map.has_key(account)) initialize(account); foreach (Core.XmppStreamModule module in module_map[account]) modules.add(module); } + + foreach (Core.XmppStreamModule module in module_map[account]) { + if (module.get_id() == Bind.Module.IDENTITY.id) { + (module as Bind.Module).requested_resource == null ? account.resourcepart : resource; + } else if (module.get_id() == PlainSasl.Module.IDENTITY.id) { + (module as PlainSasl.Module).password = account.password; + } + } return modules; } public void initialize(Account account) { lock(module_map) { module_map[account] = new ArrayList(); + module_map[account].add(new Iq.Module()); module_map[account].add(new Tls.Module()); module_map[account].add(new Xep.SrvRecordsTls.Module()); + module_map[account].add(new PlainSasl.Module(account.bare_jid.to_string(), account.password)); + module_map[account].add(new Xep.StreamManagement.Module()); + module_map[account].add(new Bind.Module(account.resourcepart)); module_map[account].add(new Session.Module()); module_map[account].add(new Roster.Module()); module_map[account].add(new Xep.ServiceDiscovery.Module.with_identity("client", "pc")); diff --git a/libdino/src/service/stream_interactor.vala b/libdino/src/service/stream_interactor.vala index 028d031b..f97eb482 100644 --- a/libdino/src/service/stream_interactor.vala +++ b/libdino/src/service/stream_interactor.vala @@ -10,6 +10,7 @@ public class StreamInteractor { public signal void account_added(Account account); public signal void account_removed(Account account); public signal void stream_negotiated(Account account, Core.XmppStream stream); + public signal void attached_modules(Account account, Core.XmppStream stream); public ModuleManager module_manager; public ConnectionManager connection_manager; @@ -84,4 +85,4 @@ public interface StreamInteractionModule : Object { public abstract string id { get; } } -} \ No newline at end of file +} -- cgit v1.2.3-70-g09d2