dino/xmpp-vala/src/module/xep/0461_replies.vala

41 lines
1.3 KiB
Vala

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;
}
}