aboutsummaryrefslogtreecommitdiff
path: root/xmpp-vala/src/module/xep/0461_replies.vala
diff options
context:
space:
mode:
Diffstat (limited to 'xmpp-vala/src/module/xep/0461_replies.vala')
-rw-r--r--xmpp-vala/src/module/xep/0461_replies.vala41
1 files changed, 41 insertions, 0 deletions
diff --git a/xmpp-vala/src/module/xep/0461_replies.vala b/xmpp-vala/src/module/xep/0461_replies.vala
new file mode 100644
index 00000000..870df295
--- /dev/null
+++ b/xmpp-vala/src/module/xep/0461_replies.vala
@@ -0,0 +1,41 @@
+namespace Xmpp.Xep.Replies {
+
+ public const string NS_URI = "urn:xmpp:reply:0";
+
+ public class ReplyTo {
+ public Jid to_jid { get; set; }
+ public string to_message_id { get; set; }
+
+ public ReplyTo(Jid to_jid, string to_message_id) {
+ this.to_jid = to_jid;
+ this.to_message_id = to_message_id;
+ }
+ }
+
+ public static void set_reply_to(MessageStanza message, ReplyTo reply_to) {
+ StanzaNode reply_node = (new StanzaNode.build("reply", NS_URI))
+ .add_self_xmlns()
+ .put_attribute("to", reply_to.to_jid.to_string())
+ .put_attribute("id", reply_to.to_message_id);
+ message.stanza.put_node(reply_node);
+ }
+
+ public ReplyTo? get_reply_to(MessageStanza message) {
+ StanzaNode? reply_node = message.stanza.get_subnode("reply", NS_URI);
+ if (reply_node == null) return null;
+
+ string? to_str = reply_node.get_attribute("to");
+ if (to_str == null) return null;
+ try {
+ Jid to_jid = new Jid(to_str);
+
+ string? id = reply_node.get_attribute("id");
+ if (id == null) return null;
+
+ return new ReplyTo(to_jid, id);
+ } catch (InvalidJidError e) {
+ return null;
+ }
+ return null;
+ }
+} \ No newline at end of file