aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libdino/src/service/registration.vala41
-rw-r--r--xmpp-vala/src/module/xep/0077_in_band_registration.vala2
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);