From fcce176b91f5136aac745cc3ab66afa632de8180 Mon Sep 17 00:00:00 2001 From: fiaxh Date: Mon, 18 Nov 2019 16:55:36 +0100 Subject: Open new connection to send filled-in registration form fixes #644 --- libdino/src/service/registration.vala | 41 ++++++++++++++++++++-- .../src/module/xep/0077_in_band_registration.vala | 2 +- 2 files changed, 39 insertions(+), 4 deletions(-) diff --git a/libdino/src/service/registration.vala b/libdino/src/service/registration.vala index 4fcfdeba..20ea6063 100644 --- a/libdino/src/service/registration.vala +++ b/libdino/src/service/registration.vala @@ -104,7 +104,6 @@ public class Register : StreamInteractionModule, Object{ stream.add_module(new Xep.SrvRecordsTls.Module()); stream.add_module(new Xep.InBandRegistration.Module()); - Xep.InBandRegistration.Form? form = null; SourceFunc callback = get_registration_form.callback; stream.stream_negotiated.connect(() => { @@ -125,14 +124,50 @@ public class Register : StreamInteractionModule, Object{ }); yield; + + Xep.InBandRegistration.Form? form = null; if (stream.negotiation_complete) { form = yield stream.get_module(Xep.InBandRegistration.Module.IDENTITY).get_from_server(stream, jid); } + try { + stream.disconnect(); + } catch (Error e) {} + return form; } - public static async string submit_form(Jid jid, Xep.InBandRegistration.Form form) { - return yield form.stream.get_module(Xep.InBandRegistration.Module.IDENTITY).submit_to_server(form.stream, jid, form); + public static async string? submit_form(Jid jid, Xep.InBandRegistration.Form form) { + XmppStream stream = new XmppStream(); + stream.log = new XmppLog(jid.to_string(), Application.print_xmpp); + 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()); + + SourceFunc callback = submit_form.callback; + + stream.stream_negotiated.connect(() => { + if (callback != null) { + Idle.add((owned)callback); + } + }); + + 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); + } + }); + + yield; + if (stream.negotiation_complete) { + return yield stream.get_module(Xep.InBandRegistration.Module.IDENTITY).submit_to_server(stream, jid, form); + } + return null; } } diff --git a/xmpp-vala/src/module/xep/0077_in_band_registration.vala b/xmpp-vala/src/module/xep/0077_in_band_registration.vala index 1c544c18..297f973c 100644 --- a/xmpp-vala/src/module/xep/0077_in_band_registration.vala +++ b/xmpp-vala/src/module/xep/0077_in_band_registration.vala @@ -20,7 +20,7 @@ public class Module : XmppStreamNegotiationModule { return form; } - public async string submit_to_server(XmppStream stream, Jid jid, Form form) { + public async string? submit_to_server(XmppStream stream, Jid jid, Form form) { StanzaNode query_node = new StanzaNode.build("query", NS_URI).add_self_xmlns(); query_node.put_node(form.get_submit_node()); Iq.Stanza iq = new Iq.Stanza.set(query_node); -- cgit v1.2.3-70-g09d2