using Gee, Lm;
class ModuleIq : Module {
const string NS_IQ_VERSION = "jabber:iq:version";
public static delegate void Callback(string id, MessageNode request, MessageNode response);
protected HashMap<string, Callback> callbacks;
public ModuleIq(Config cfg, Connection conn) {
base(cfg, conn);
var iq_handler = new Lm.MessageHandler((handler, connection, message) => {
var node = message.node;
var query = node.get_child("query");
if (query == null) return Lm.HandlerResult.ALLOW_MORE_HANDLERS;
var from = node.get_attribute("from");
var id = node.get_attribute("id");
var response = new Lm.Message(from, Lm.MessageType.IQ);
response.node.set_attribute("type","result");
if (id!=null)
response.node.set_attribute("id",id);
var rquery = response.node.add_child("query",null);
switch (query.get_attribute("xmlns")) {
case NS_IQ_VERSION:
rquery.set_attribute("xmlns", NS_IQ_VERSION);
rquery.add_child("name", "iswydt");
rquery.add_child("version", IswydtVersion);
stderr.printf("RQ: %s\n",rquery.to_string());
stderr.printf("RS: %s\n",response.node.to_string());
this.conn.cn.send(response);
return Lm.HandlerResult.REMOVE_MESSAGE;
}
return Lm.HandlerResult.ALLOW_MORE_HANDLERS;
}, null);
conn.cn.register_message_handler(iq_handler, Lm.MessageType.IQ, Lm.HandlerPriority.NORMAL);
}
public override string name() {
return "iq";
}
}