diff options
Diffstat (limited to 'xmpp-vala/src/module/xep')
12 files changed, 77 insertions, 110 deletions
diff --git a/xmpp-vala/src/module/xep/0030_service_discovery/module.vala b/xmpp-vala/src/module/xep/0030_service_discovery/module.vala index e63dee74..708d5311 100644 --- a/xmpp-vala/src/module/xep/0030_service_discovery/module.vala +++ b/xmpp-vala/src/module/xep/0030_service_discovery/module.vala @@ -100,7 +100,7 @@ public class Module : XmppStreamModule, Iq.Handler { return result; } - public void on_iq_get(XmppStream stream, Iq.Stanza iq) { + public async void on_iq_get(XmppStream stream, Iq.Stanza iq) { StanzaNode? query_node = iq.stanza.get_subnode("query", NS_URI_INFO); if (query_node != null) { send_query_result(stream, iq); diff --git a/xmpp-vala/src/module/xep/0045_muc/module.vala b/xmpp-vala/src/module/xep/0045_muc/module.vala index 3434c138..f8845427 100644 --- a/xmpp-vala/src/module/xep/0045_muc/module.vala +++ b/xmpp-vala/src/module/xep/0045_muc/module.vala @@ -333,9 +333,9 @@ public class Module : XmppStreamModule { Jid bare_jid = presence.from.bare_jid; if (flag.get_enter_id(bare_jid) != null) { - query_affiliation(stream, bare_jid, "member", null); - query_affiliation(stream, bare_jid, "admin", null); - query_affiliation(stream, bare_jid, "owner", null); + query_affiliation.begin(stream, bare_jid, "member"); + query_affiliation.begin(stream, bare_jid, "admin"); + query_affiliation.begin(stream, bare_jid, "owner"); flag.finish_muc_enter(bare_jid, presence.from.resourcepart); flag.enter_futures[bare_jid].set_value(new JoinResult() {nick=presence.from.resourcepart}); @@ -437,36 +437,38 @@ public class Module : XmppStreamModule { room_info_updated(stream, jid); } - public delegate void OnAffiliationResult(XmppStream stream, Gee.List<Jid> jids); - private void query_affiliation(XmppStream stream, Jid jid, string affiliation, owned OnAffiliationResult? listener) { + private async Gee.List<Jid>? query_affiliation(XmppStream stream, Jid jid, string affiliation) { Iq.Stanza iq = new Iq.Stanza.get( new StanzaNode.build("query", NS_URI_ADMIN) .add_self_xmlns() .put_node(new StanzaNode.build("item", NS_URI_ADMIN) .put_attribute("affiliation", affiliation)) ) { to=jid }; - stream.get_module(Iq.Module.IDENTITY).send_iq(stream, iq, (stream, iq) => { - if (iq.is_error()) return; - StanzaNode? query_node = iq.stanza.get_subnode("query", NS_URI_ADMIN); - if (query_node == null) return; - Gee.List<StanzaNode> item_nodes = query_node.get_subnodes("item", NS_URI_ADMIN); - Gee.List<Jid> ret_jids = new ArrayList<Jid>(Jid.equals_func); - foreach (StanzaNode item in item_nodes) { - string jid__ = item.get_attribute("jid"); - string? affiliation_ = item.get_attribute("affiliation"); - if (jid__ != null && affiliation_ != null) { - try { - Jid jid_ = new Jid(jid__); - stream.get_flag(Flag.IDENTITY).set_offline_member(iq.from, jid_, parse_affiliation(affiliation_)); - ret_jids.add(jid_); - received_occupant_jid(stream, iq.from, jid_); - } catch (InvalidJidError e) { - warning("Received invalid occupant jid: %s", e.message); - } + + + Iq.Stanza iq_result = yield stream.get_module(Iq.Module.IDENTITY).send_iq_async(stream, iq); + if (iq_result.is_error()) return null; + + StanzaNode? query_node = iq_result.stanza.get_subnode("query", NS_URI_ADMIN); + if (query_node == null) return null; + + Gee.List<StanzaNode> item_nodes = query_node.get_subnodes("item", NS_URI_ADMIN); + Gee.List<Jid> ret_jids = new ArrayList<Jid>(Jid.equals_func); + foreach (StanzaNode item in item_nodes) { + string jid__ = item.get_attribute("jid"); + string? affiliation_ = item.get_attribute("affiliation"); + if (jid__ != null && affiliation_ != null) { + try { + Jid jid_ = new Jid(jid__); + stream.get_flag(Flag.IDENTITY).set_offline_member(iq_result.from, jid_, parse_affiliation(affiliation_)); + ret_jids.add(jid_); + received_occupant_jid(stream, iq_result.from, jid_); + } catch (InvalidJidError e) { + warning("Received invalid occupant jid: %s", e.message); } } - if (listener != null) listener(stream, ret_jids); - }); + } + return ret_jids; } private static ArrayList<int> get_status_codes(StanzaNode x_node) { diff --git a/xmpp-vala/src/module/xep/0047_in_band_bytestreams.vala b/xmpp-vala/src/module/xep/0047_in_band_bytestreams.vala index 9aa2d98c..1e423b49 100644 --- a/xmpp-vala/src/module/xep/0047_in_band_bytestreams.vala +++ b/xmpp-vala/src/module/xep/0047_in_band_bytestreams.vala @@ -18,7 +18,7 @@ public class Module : XmppStreamModule, Iq.Handler { stream.get_module(Iq.Module.IDENTITY).unregister_from_namespace(NS_URI, this); } - public void on_iq_set(XmppStream stream, Iq.Stanza iq) { + public async void on_iq_set(XmppStream stream, Iq.Stanza iq) { // the iq module ensures that there's only one child node StanzaNode? node = null; node = (node != null) ? node : iq.stanza.get_subnode("open", NS_URI); diff --git a/xmpp-vala/src/module/xep/0048_bookmarks.vala b/xmpp-vala/src/module/xep/0048_bookmarks.vala index daacf1a4..90a0c2e7 100644 --- a/xmpp-vala/src/module/xep/0048_bookmarks.vala +++ b/xmpp-vala/src/module/xep/0048_bookmarks.vala @@ -7,25 +7,21 @@ public class Module : BookmarksProvider, XmppStreamModule { public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, "0048_bookmarks_module"); public async Set<Conference>? get_conferences(XmppStream stream) { - Set<Conference> ret = new HashSet<Conference>(Conference.hash_func, Conference.equals_func); StanzaNode get_node = new StanzaNode.build("storage", NS_URI).add_self_xmlns(); - stream.get_module(PrivateXmlStorage.Module.IDENTITY).retrieve(stream, get_node, (stream, node) => { - if (node != null) { - Gee.List<StanzaNode> conferences_node = node.get_subnode("storage", NS_URI).get_subnodes("conference", NS_URI); - foreach (StanzaNode conference_node in conferences_node) { - Conference? conference = Bookmarks1Conference.create_from_stanza_node(conference_node); - ret.add(conference); - } - } - Idle.add(get_conferences.callback); - }); - yield; + StanzaNode? result_node = yield stream.get_module(PrivateXmlStorage.Module.IDENTITY).retrieve(stream, get_node); + if (result_node == null) return null; + Set<Conference> ret = new HashSet<Conference>(Conference.hash_func, Conference.equals_func); + Gee.List<StanzaNode> conferences_node = result_node.get_subnode("storage", NS_URI).get_subnodes("conference", NS_URI); + foreach (StanzaNode conference_node in conferences_node) { + Conference? conference = Bookmarks1Conference.create_from_stanza_node(conference_node); + ret.add(conference); + } return ret; } - private void set_conferences(XmppStream stream, Set<Conference> conferences) { + private async void set_conferences(XmppStream stream, Set<Conference> conferences) { StanzaNode storage_node = (new StanzaNode.build("storage", NS_URI)).add_self_xmlns(); foreach (Conference conference in conferences) { Bookmarks1Conference? bookmarks1conference = conference as Bookmarks1Conference; @@ -46,15 +42,14 @@ public class Module : BookmarksProvider, XmppStreamModule { storage_node.put_node(conference_node); } } - stream.get_module(PrivateXmlStorage.Module.IDENTITY).store(stream, storage_node, (stream) => { - stream.get_module(Module.IDENTITY).received_conferences(stream, conferences); - }); + yield stream.get_module(PrivateXmlStorage.Module.IDENTITY).store(stream, storage_node); + stream.get_module(Module.IDENTITY).received_conferences(stream, conferences); } public async void add_conference(XmppStream stream, Conference conference) { Set<Conference>? conferences = yield get_conferences(stream); conferences.add(conference); - set_conferences(stream, conferences); + yield set_conferences(stream, conferences); } public async void replace_conference(XmppStream stream, Jid muc_jid, Conference modified_conference) { @@ -67,13 +62,13 @@ public class Module : BookmarksProvider, XmppStreamModule { conference.password = modified_conference.password; } } - set_conferences(stream, conferences); + yield set_conferences(stream, conferences); } public async void remove_conference(XmppStream stream, Conference conference_remove) { Set<Conference>? conferences = yield get_conferences(stream); conferences.remove(conference_remove); - set_conferences(stream, conferences); + yield set_conferences(stream, conferences); } public override void attach(XmppStream stream) { } diff --git a/xmpp-vala/src/module/xep/0049_private_xml_storage.vala b/xmpp-vala/src/module/xep/0049_private_xml_storage.vala index 5b3eb1b6..81ccde9b 100644 --- a/xmpp-vala/src/module/xep/0049_private_xml_storage.vala +++ b/xmpp-vala/src/module/xep/0049_private_xml_storage.vala @@ -6,22 +6,17 @@ namespace Xmpp.Xep.PrivateXmlStorage { public class Module : XmppStreamModule { public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, "0049_private_xml_storage"); - public delegate void OnSuccess(XmppStream stream); - public void store(XmppStream stream, StanzaNode node, owned OnSuccess listener) { + public async void store(XmppStream stream, StanzaNode node) { StanzaNode queryNode = new StanzaNode.build("query", NS_URI).add_self_xmlns().put_node(node); Iq.Stanza iq = new Iq.Stanza.set(queryNode); - stream.get_module(Iq.Module.IDENTITY).send_iq(stream, iq, (stream, iq) => { - listener(stream); - }); + yield stream.get_module(Iq.Module.IDENTITY).send_iq_async(stream, iq); } - public delegate void OnResponse(XmppStream stream, StanzaNode? node); - public void retrieve(XmppStream stream, StanzaNode node, owned OnResponse listener) { + public async StanzaNode? retrieve(XmppStream stream, StanzaNode node) { StanzaNode queryNode = new StanzaNode.build("query", NS_URI).add_self_xmlns().put_node(node); Iq.Stanza iq = new Iq.Stanza.get(queryNode); - stream.get_module(Iq.Module.IDENTITY).send_iq(stream, iq, (stream, iq) => { - listener(stream, iq.stanza.get_subnode("query", NS_URI)); - }); + Iq.Stanza iq_result = yield stream.get_module(Iq.Module.IDENTITY).send_iq_async(stream, iq); + return iq_result.stanza.get_subnode("query", NS_URI); } public override void attach(XmppStream stream) { } diff --git a/xmpp-vala/src/module/xep/0065_socks5_bytestreams.vala b/xmpp-vala/src/module/xep/0065_socks5_bytestreams.vala index 2631040d..bdc54879 100644 --- a/xmpp-vala/src/module/xep/0065_socks5_bytestreams.vala +++ b/xmpp-vala/src/module/xep/0065_socks5_bytestreams.vala @@ -27,7 +27,7 @@ public class Module : XmppStreamModule, Iq.Handler { } public override void detach(XmppStream stream) { } - public void on_iq_set(XmppStream stream, Iq.Stanza iq) { } + public async void on_iq_set(XmppStream stream, Iq.Stanza iq) { } public Gee.List<Proxy> get_proxies(XmppStream stream) { return stream.get_flag(Flag.IDENTITY).proxies; 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 f7bfeb26..c67ef987 100644 --- a/xmpp-vala/src/module/xep/0077_in_band_registration.vala +++ b/xmpp-vala/src/module/xep/0077_in_band_registration.vala @@ -8,34 +8,27 @@ public class Module : XmppStreamNegotiationModule { public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, "0077_in_band_registration"); public async Form? get_from_server(XmppStream stream, Jid jid) { - Iq.Stanza request_form_iq = new Iq.Stanza.get(new StanzaNode.build("query", NS_URI).add_self_xmlns()); + StanzaNode query_node = new StanzaNode.build("query", NS_URI).add_self_xmlns(); + Iq.Stanza request_form_iq = new Iq.Stanza.get(query_node) { to=jid }; request_form_iq.to = jid; SourceFunc callback = get_from_server.callback; - Form? form = null; - stream.get_module(Iq.Module.IDENTITY).send_iq(stream, request_form_iq, (stream, response_iq) => { - form = new Form.from_node(stream, response_iq); - Idle.add((owned)callback); - }); - yield; - return form; + + Iq.Stanza iq_result = yield stream.get_module(Iq.Module.IDENTITY).send_iq_async(stream, request_form_iq); + return new Form.from_node(stream, iq_result); } 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); - iq.to = jid; - string? error_message = null; - SourceFunc callback = submit_to_server.callback; - stream.get_module(Iq.Module.IDENTITY).send_iq(stream, iq, (stream, response_iq) => { - if (response_iq.is_error()) { - ErrorStanza? error_stanza = response_iq.get_error(); - error_message = error_stanza.text ?? "Error"; - } - Idle.add((owned)callback); - }); - yield; - return error_message; + Iq.Stanza iq = new Iq.Stanza.set(query_node) { to=jid }; + + Iq.Stanza iq_result = yield stream.get_module(Iq.Module.IDENTITY).send_iq_async(stream, iq); + if (iq_result.is_error()) { + ErrorStanza? error_stanza = iq_result.get_error(); + return error_stanza.text ?? "Error"; + } + + return null; } public override bool mandatory_outstanding(XmppStream stream) { return false; } diff --git a/xmpp-vala/src/module/xep/0166_jingle.vala b/xmpp-vala/src/module/xep/0166_jingle.vala index 7274c757..15c310bd 100644 --- a/xmpp-vala/src/module/xep/0166_jingle.vala +++ b/xmpp-vala/src/module/xep/0166_jingle.vala @@ -295,7 +295,7 @@ public class Module : XmppStreamModule, Iq.Handler { current_stream.get_flag(Flag.IDENTITY).remove_session(sid); } - public void on_iq_set(XmppStream stream, Iq.Stanza iq) { + public async void on_iq_set(XmppStream stream, Iq.Stanza iq) { try { handle_iq_set(stream, iq); } catch (IqError e) { diff --git a/xmpp-vala/src/module/xep/0191_blocking_command.vala b/xmpp-vala/src/module/xep/0191_blocking_command.vala index fbedc8b3..be312581 100644 --- a/xmpp-vala/src/module/xep/0191_blocking_command.vala +++ b/xmpp-vala/src/module/xep/0191_blocking_command.vala @@ -45,7 +45,7 @@ public class Module : XmppStreamModule, Iq.Handler { return stream.has_flag(Flag.IDENTITY); } - private void on_iq_set(XmppStream stream, Iq.Stanza iq) { + private async void on_iq_set(XmppStream stream, Iq.Stanza iq) { StanzaNode? block_node = iq.stanza.get_subnode("block", NS_URI); StanzaNode? unblock_node = iq.stanza.get_subnode("unblock", NS_URI); Gee.List<string> jids; diff --git a/xmpp-vala/src/module/xep/0199_ping.vala b/xmpp-vala/src/module/xep/0199_ping.vala index 07ee8ec8..12997f32 100644 --- a/xmpp-vala/src/module/xep/0199_ping.vala +++ b/xmpp-vala/src/module/xep/0199_ping.vala @@ -6,13 +6,10 @@ namespace Xmpp.Xep.Ping { public class Module : XmppStreamModule, Iq.Handler { public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, "0199_ping"); - public delegate void OnResult(XmppStream stream); - public void send_ping(XmppStream stream, Jid jid, owned OnResult? listener) { - Iq.Stanza iq = new Iq.Stanza.get(new StanzaNode.build("ping", NS_URI).add_self_xmlns()); - iq.to = jid; - stream.get_module(Iq.Module.IDENTITY).send_iq(stream, iq, (stream) => { - if (listener != null) listener(stream); - }); + public async void send_ping(XmppStream stream, Jid jid) { + StanzaNode ping_node = new StanzaNode.build("ping", NS_URI).add_self_xmlns(); + Iq.Stanza iq = new Iq.Stanza.get(ping_node) { to=jid }; + yield stream.get_module(Iq.Module.IDENTITY).send_iq_async(stream, iq); } public override void attach(XmppStream stream) { @@ -25,8 +22,8 @@ namespace Xmpp.Xep.Ping { stream.get_module(ServiceDiscovery.Module.IDENTITY).remove_feature(stream, NS_URI); } - public void on_iq_get(XmppStream stream, Iq.Stanza iq) { - stream.get_module(Iq.Module.IDENTITY).send_iq(stream, new Iq.Stanza.result(iq)); + public async void on_iq_get(XmppStream stream, Iq.Stanza iq) { + yield stream.get_module(Iq.Module.IDENTITY).send_iq_async(stream, new Iq.Stanza.result(iq)); } public override string get_ns() { return NS_URI; } diff --git a/xmpp-vala/src/module/xep/0280_message_carbons.vala b/xmpp-vala/src/module/xep/0280_message_carbons.vala index 8d45ad38..cfc95262 100644 --- a/xmpp-vala/src/module/xep/0280_message_carbons.vala +++ b/xmpp-vala/src/module/xep/0280_message_carbons.vala @@ -7,14 +7,14 @@ public class Module : XmppStreamModule { private ReceivedPipelineListener received_pipeline_listener = new ReceivedPipelineListener(); - public void enable(XmppStream stream) { + public async void enable(XmppStream stream) { Iq.Stanza iq = new Iq.Stanza.set(new StanzaNode.build("enable", NS_URI).add_self_xmlns()); - stream.get_module(Iq.Module.IDENTITY).send_iq(stream, iq); + yield stream.get_module(Iq.Module.IDENTITY).send_iq_async(stream, iq); } - public void disable(XmppStream stream) { + public async void disable(XmppStream stream) { Iq.Stanza iq = new Iq.Stanza.set(new StanzaNode.build("disable", NS_URI).add_self_xmlns()); - stream.get_module(Iq.Module.IDENTITY).send_iq(stream, iq); + yield stream.get_module(Iq.Module.IDENTITY).send_iq_async(stream, iq); } public override void attach(XmppStream stream) { diff --git a/xmpp-vala/src/module/xep/0313_message_archive_management.vala b/xmpp-vala/src/module/xep/0313_message_archive_management.vala index bba52702..dfb3bb7a 100644 --- a/xmpp-vala/src/module/xep/0313_message_archive_management.vala +++ b/xmpp-vala/src/module/xep/0313_message_archive_management.vala @@ -56,18 +56,10 @@ public class Module : XmppStreamModule { if (stream.get_flag(Flag.IDENTITY) == null) return null; var query_node = crate_base_query(stream, jid, query_id, start_time, end_time); - query_node.put_node(create_set_rsm_node(end_id)); Iq.Stanza iq = new Iq.Stanza.set(query_node); - Iq.Stanza? result_iq = null; - stream.get_module(Iq.Module.IDENTITY).send_iq(stream, iq, (stream, iq) => { - result_iq = iq; - Idle.add(query_archive.callback); - }); - yield; - - return result_iq; + return yield stream.get_module(Iq.Module.IDENTITY).send_iq_async(stream, iq); } public override void attach(XmppStream stream) { @@ -98,14 +90,7 @@ public class Module : XmppStreamModule { Iq.Stanza paging_iq = new Iq.Stanza.set(query_node); - Iq.Stanza? result_iq = null; - stream.get_module(Iq.Module.IDENTITY).send_iq(stream, paging_iq, (stream, iq) => { - result_iq = iq; - Idle.add(page_through_results.callback); - }); - yield; - - return result_iq; + return yield stream.get_module(Iq.Module.IDENTITY).send_iq_async(stream, paging_iq); } private async void query_availability(XmppStream stream) { |