43 lines
1.3 KiB
Vala
43 lines
1.3 KiB
Vala
|
using Gee;
|
||
|
|
||
|
using Xmpp;
|
||
|
using Dino.Entities;
|
||
|
|
||
|
namespace Dino {
|
||
|
|
||
|
public class Register {
|
||
|
|
||
|
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.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, () => {
|
||
|
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);
|
||
|
}
|
||
|
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);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|