diff options
Diffstat (limited to 'libdino/src/service/registration.vala')
-rw-r--r-- | libdino/src/service/registration.vala | 41 |
1 files changed, 38 insertions, 3 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; } } |