diff options
Diffstat (limited to 'xmpp-vala/src/module/xep/0166_jingle')
-rw-r--r-- | xmpp-vala/src/module/xep/0166_jingle/content.vala | 6 | ||||
-rw-r--r-- | xmpp-vala/src/module/xep/0166_jingle/session.vala | 85 |
2 files changed, 38 insertions, 53 deletions
diff --git a/xmpp-vala/src/module/xep/0166_jingle/content.vala b/xmpp-vala/src/module/xep/0166_jingle/content.vala index 41310aeb..be78c91a 100644 --- a/xmpp-vala/src/module/xep/0166_jingle/content.vala +++ b/xmpp-vala/src/module/xep/0166_jingle/content.vala @@ -229,6 +229,12 @@ public class Xmpp.Xep.Jingle.Content : Object { public void send_transport_info(StanzaNode transport) { session.send_transport_info(this, transport); } + + internal StanzaNode build_outer_content_node() { + return new StanzaNode.build("content", NS_URI) + .put_attribute("creator", content_creator.to_string()) + .put_attribute("name", content_name); + } } public class Xmpp.Xep.Jingle.ContentEncryption : Object { diff --git a/xmpp-vala/src/module/xep/0166_jingle/session.vala b/xmpp-vala/src/module/xep/0166_jingle/session.vala index 4d04c8d5..0b377d0f 100644 --- a/xmpp-vala/src/module/xep/0166_jingle/session.vala +++ b/xmpp-vala/src/module/xep/0166_jingle/session.vala @@ -444,93 +444,72 @@ public class Xmpp.Xep.Jingle.Session : Object { internal void send_session_info(StanzaNode child_node) { if (state == State.ENDED) return; - StanzaNode node = new StanzaNode.build("jingle", NS_URI).add_self_xmlns() - .put_attribute("action", "session-info") - .put_attribute("sid", sid) - // TODO put `initiator`? - .put_node(child_node); - Iq.Stanza iq = new Iq.Stanza.set(node) { to=peer_full_jid }; + StanzaNode jingle_node = build_outer_session_node("session-info").put_node(child_node); + Iq.Stanza iq = new Iq.Stanza.set(jingle_node) { to=peer_full_jid }; stream.get_module(Iq.Module.IDENTITY).send_iq(stream, iq); } internal void send_content_modify(Content content, Senders senders) { if (state == State.ENDED) return; - StanzaNode node = new StanzaNode.build("jingle", NS_URI).add_self_xmlns() - .put_attribute("action", "content-modify") - .put_attribute("sid", sid) - .put_node(new StanzaNode.build("content", NS_URI) - .put_attribute("creator", content.content_creator.to_string()) - .put_attribute("name", content.content_name) + StanzaNode jingle_node = build_outer_session_node("content-modify") + .put_node(content.build_outer_content_node() .put_attribute("senders", senders.to_string())); - Iq.Stanza iq = new Iq.Stanza.set(node) { to=peer_full_jid }; + + Iq.Stanza iq = new Iq.Stanza.set(jingle_node) { to=peer_full_jid }; stream.get_module(Iq.Module.IDENTITY).send_iq(stream, iq); } internal void send_transport_accept(Content content, TransportParameters transport_params) { if (state == State.ENDED) return; - StanzaNode jingle_response = new StanzaNode.build("jingle", NS_URI) - .add_self_xmlns() - .put_attribute("action", "transport-accept") - .put_attribute("sid", sid) - .put_node(new StanzaNode.build("content", NS_URI) - .put_attribute("creator", "initiator") - .put_attribute("name", content.content_name) - .put_node(transport_params.to_transport_stanza_node("transport-accept")) - ); - Iq.Stanza iq_response = new Iq.Stanza.set(jingle_response) { to=peer_full_jid }; + StanzaNode jingle_node = build_outer_session_node("transport-accept") + .put_node(content.build_outer_content_node() + .put_node(transport_params.to_transport_stanza_node("transport-accept"))); + + Iq.Stanza iq_response = new Iq.Stanza.set(jingle_node) { to=peer_full_jid }; stream.get_module(Iq.Module.IDENTITY).send_iq(stream, iq_response); } internal void send_transport_replace(Content content, TransportParameters transport_params) { if (state == State.ENDED) return; - StanzaNode jingle = new StanzaNode.build("jingle", NS_URI) - .add_self_xmlns() - .put_attribute("action", "transport-replace") - .put_attribute("sid", sid) - .put_node(new StanzaNode.build("content", NS_URI) - .put_attribute("creator", "initiator") - .put_attribute("name", content.content_name) - .put_node(transport_params.to_transport_stanza_node("transport-replace")) - ); - Iq.Stanza iq = new Iq.Stanza.set(jingle) { to=peer_full_jid }; + StanzaNode jingle_node = build_outer_session_node("transport-replace") + .put_node(content.build_outer_content_node() + .put_node(transport_params.to_transport_stanza_node("transport-replace"))); + + Iq.Stanza iq = new Iq.Stanza.set(jingle_node) { to=peer_full_jid }; stream.get_module(Iq.Module.IDENTITY).send_iq(stream, iq); } internal void send_transport_reject(Content content, StanzaNode transport_node) { if (state == State.ENDED) return; - StanzaNode jingle_response = new StanzaNode.build("jingle", NS_URI) - .add_self_xmlns() - .put_attribute("action", "transport-reject") - .put_attribute("sid", sid) - .put_node(new StanzaNode.build("content", NS_URI) - .put_attribute("creator", "initiator") - .put_attribute("name", content.content_name) - .put_node(transport_node) - ); - Iq.Stanza iq_response = new Iq.Stanza.set(jingle_response) { to=peer_full_jid }; + StanzaNode jingle_node = build_outer_session_node("transport-reject") + .put_node(content.build_outer_content_node().put_node(transport_node)); + + Iq.Stanza iq_response = new Iq.Stanza.set(jingle_node) { to=peer_full_jid }; stream.get_module(Iq.Module.IDENTITY).send_iq(stream, iq_response); } internal void send_transport_info(Content content, StanzaNode transport) { if (state == State.ENDED) return; - StanzaNode jingle = new StanzaNode.build("jingle", NS_URI) - .add_self_xmlns() - .put_attribute("action", "transport-info") - .put_attribute("sid", sid) - .put_node(new StanzaNode.build("content", NS_URI) - .put_attribute("creator", "initiator") - .put_attribute("name", content.content_name) - .put_node(transport) - ); - Iq.Stanza iq = new Iq.Stanza.set(jingle) { to=peer_full_jid }; + StanzaNode jingle_node = build_outer_session_node("transport-info") + .put_node(content.build_outer_content_node().put_node(transport)); + + Iq.Stanza iq = new Iq.Stanza.set(jingle_node) { to=peer_full_jid }; stream.get_module(Iq.Module.IDENTITY).send_iq(stream, iq); } + private StanzaNode build_outer_session_node(string action) { + return new StanzaNode.build("jingle", NS_URI) + .add_self_xmlns() + .put_attribute("action", action) + .put_attribute("initiator", we_initiated ? local_full_jid.to_string() : peer_full_jid.to_string()) + .put_attribute("sid", sid); + } + public bool senders_include_us(Senders senders) { switch (senders) { case Senders.BOTH: |