#include "jsm.h"
mreturn mod_agents_agents(mapi m)
{
xmlnode ret, retq, agents, cur, a, cur2;
agents = js_config(m->si,"browse");
if(agents == NULL)
return M_PASS;
log_debug("mod_agents","handling agents query");
ret = jutil_iqresult(m->packet->x);
retq = xmlnode_insert_tag(ret,"query");
xmlnode_put_attrib(retq,"xmlns",NS_AGENTS);
for(cur = xmlnode_get_firstchild(agents); cur != NULL; cur = xmlnode_get_nextsibling(cur))
{
if(xmlnode_get_type(cur) != NTYPE_TAG) continue;
a = xmlnode_insert_tag(retq,"agent");
xmlnode_put_attrib(a, "jid", xmlnode_get_attrib(cur,"jid"));
xmlnode_insert_cdata(xmlnode_insert_tag(a,"name"), xmlnode_get_attrib(cur,"name"), -1);
xmlnode_insert_cdata(xmlnode_insert_tag(a,"service"), xmlnode_get_attrib(cur,"type"), -1);
if(j_strcmp(xmlnode_get_name(cur),"conference") == 0)
xmlnode_insert_tag(a,"groupchat");
for(cur2 = xmlnode_get_firstchild(cur); cur2 != NULL; cur2 = xmlnode_get_nextsibling(cur2))
{
if(j_strcmp(xmlnode_get_name(cur2),"ns") != 0) continue;
if(j_strcmp(xmlnode_get_data(cur2),"jabber:iq:register") == 0)
xmlnode_insert_tag(a,"register");
if(j_strcmp(xmlnode_get_data(cur2),"jabber:iq:search") == 0)
xmlnode_insert_tag(a,"search");
if(j_strcmp(xmlnode_get_data(cur2),"jabber:iq:gateway") == 0)
xmlnode_insert_cdata(xmlnode_insert_tag(a,"transport"),"Enter ID", -1);
}
}
jpacket_reset(m->packet);
if(m->s != NULL)
{
xmlnode_put_attrib(m->packet->x,"from",m->packet->from->server);
js_session_to(m->s,m->packet);
}else{
js_deliver(m->si,m->packet);
}
return M_HANDLED;
}
mreturn mod_agents_agent(mapi m)
{
xmlnode ret, retq, info, agents, reg;
info = js_config(m->si,"vCard");
agents = js_config(m->si,"agents");
reg = js_config(m->si,"register");
if(info == NULL && agents == NULL && reg == NULL)
return M_PASS;
log_debug("mod_agent","handling agent query");
ret = jutil_iqresult(m->packet->x);
retq = xmlnode_insert_tag(ret,"query");
xmlnode_put_attrib(retq,"xmlns",NS_AGENT);
xmlnode_insert_cdata(xmlnode_insert_tag(retq,"name"),xmlnode_get_tag_data(info,"FN"),-1);
xmlnode_insert_cdata(xmlnode_insert_tag(retq,"url"),xmlnode_get_tag_data(info,"URL"),-1);
xmlnode_insert_cdata(xmlnode_insert_tag(retq,"service"),"jabber",6);
if(agents != NULL)
xmlnode_insert_tag(retq,"agents");
if(reg != NULL)
xmlnode_insert_tag(retq,"register");
jpacket_reset(m->packet);
if(m->s != NULL)
{
xmlnode_put_attrib(m->packet->x,"from",m->packet->from->server);
js_session_to(m->s,m->packet);
}else{
js_deliver(m->si,m->packet);
}
return M_HANDLED;
}
mreturn mod_agents_handler(mapi m, void *arg)
{
if(m->packet->type != JPACKET_IQ) return M_IGNORE;
if(jpacket_subtype(m->packet) != JPACKET__GET) return M_PASS;
if(m->s != NULL && (m->packet->to != NULL && j_strcmp(jid_full(m->packet->to),m->packet->from->server) != 0)) return M_PASS;
if(NSCHECK(m->packet->iq,NS_AGENT)) return mod_agents_agent(m);
if(NSCHECK(m->packet->iq,NS_AGENTS)) return mod_agents_agents(m);
return M_PASS;
}
mreturn mod_agents_shack(mapi m, void *arg)
{
js_mapi_session(es_OUT,m->s,mod_agents_handler,NULL);
return M_PASS;
}
void mod_agents(jsmi si)
{
log_debug("mod_agents","init");
js_mapi_register(si,e_SERVER, mod_agents_handler, NULL);
js_mapi_register(si,e_SESSION, mod_agents_shack, NULL);
}