diff --git a/libdino/src/service/registration.vala b/libdino/src/service/registration.vala index 8cac355e..f2384f52 100644 --- a/libdino/src/service/registration.vala +++ b/libdino/src/service/registration.vala @@ -75,42 +75,53 @@ public class Register : StreamInteractionModule, Object{ Idle.add((owned)callback); } }); - Timeout.add_seconds(5, () => { + + stream.connect.begin(jid.domainpart, (_, res) => { + try { + stream.connect.end(res); + } catch (Error e) { + debug("Error connecting to stream: %s", e.message); + } if (callback != null) { Idle.add((owned)callback); } - return false; }); - stream.connect.begin(jid.domainpart); yield; + try { stream.disconnect(); } catch (Error e) {} return ret; } - public static async Xep.InBandRegistration.Form get_registration_form(Jid jid) { + public static async Xep.InBandRegistration.Form? get_registration_form(Jid jid) { XmppStream stream = new XmppStream(); stream.add_module(new Tls.Module()); stream.add_module(new Iq.Module()); stream.add_module(new Xep.SrvRecordsTls.Module()); stream.add_module(new Xep.InBandRegistration.Module()); - stream.connect.begin(jid.bare_jid.to_string()); Xep.InBandRegistration.Form? form = null; SourceFunc callback = get_registration_form.callback; + stream.stream_negotiated.connect(() => { if (callback != null) { Idle.add((owned)callback); } }); - Timeout.add_seconds(5, () => { + + stream.connect.begin(jid.domainpart, (_, res) => { + try { + stream.connect.end(res); + } catch (Error e) { + debug("Error connecting to stream: %s", e.message); + } if (callback != null) { Idle.add((owned)callback); } - return false; }); + yield; if (stream.negotiation_complete) { form = yield stream.get_module(Xep.InBandRegistration.Module.IDENTITY).get_from_server(stream, jid); diff --git a/xmpp-vala/src/core/xmpp_stream.vala b/xmpp-vala/src/core/xmpp_stream.vala index aff0b216..4bf6e0db 100644 --- a/xmpp-vala/src/core/xmpp_stream.vala +++ b/xmpp-vala/src/core/xmpp_stream.vala @@ -60,6 +60,7 @@ public class XmppStream { stream = yield best_provider.connect(this); } if (stream == null) { + debug("Connecting to %s, xmpp-client, tcp (fallback)", this.remote_name.to_string()); stream = yield (new SocketClient()).connect_async(new NetworkService("xmpp-client", "tcp", this.remote_name.to_string())); } if (stream == null) { @@ -67,9 +68,10 @@ public class XmppStream { } reset_stream((!)stream); } catch (Error e) { - debug("[%p] Could not connect to server", this); + debug("[%p] Could not connect to server: %s", this, e.message); throw new IOStreamError.CONNECT(e.message); } + debug("Connected to %s", remote_name); yield loop(); } @@ -379,6 +381,7 @@ public class StartTlsConnectionProvider : ConnectionProvider { public async override IOStream? connect(XmppStream stream) { try { SocketClient client = new SocketClient(); + debug("Connecting to %s %i (starttls)", srv_target.get_hostname(), srv_target.get_port()); return yield client.connect_to_host_async(srv_target.get_hostname(), srv_target.get_port()); } catch (Error e) { return null; diff --git a/xmpp-vala/src/module/xep/0368_srv_records_tls.vala b/xmpp-vala/src/module/xep/0368_srv_records_tls.vala index a40d0bb5..3d0708fb 100644 --- a/xmpp-vala/src/module/xep/0368_srv_records_tls.vala +++ b/xmpp-vala/src/module/xep/0368_srv_records_tls.vala @@ -36,6 +36,7 @@ public class TlsConnectionProvider : ConnectionProvider { public async override IOStream? connect(XmppStream stream) { SocketClient client = new SocketClient(); try { + debug("Connecting to %s %i (tls)", srv_target.get_hostname(), srv_target.get_port()); IOStream? io_stream = yield client.connect_to_host_async(srv_target.get_hostname(), srv_target.get_port()); TlsConnection tls_connection = TlsClientConnection.new(io_stream, new NetworkAddress(stream.remote_name.to_string(), srv_target.get_port())); tls_connection.accept_certificate.connect(stream.get_module(Tls.Module.IDENTITY).on_invalid_certificate);