#include "jsm.h"
mreturn mod_log_session_end(mapi m, void *arg)
{
time_t t = time(NULL);
log_debug(ZONE,"creating session log entry");
log_record(jid_full(m->user->id), "session", "end", "%d %d %d %s", (int)(t - m->s->started), m->s->c_in, m->s->c_out, m->s->res);
return M_PASS;
}
mreturn mod_log_archiver(mapi m, void* arg)
{
jid svcs = (jid)arg;
xmlnode x;
char *syslogsvc = "syslog";
char *svcname = "";
char *logMessage = "";
if(m->packet->type != JPACKET_MESSAGE) return M_IGNORE;
log_debug(ZONE,"archiving message");
x = xmlnode_wrap(xmlnode_dup(m->packet->x), "route");
xmlnode_put_attrib(x,"type","archive");
for(;svcs->next != NULL; svcs = svcs->next)
{
svcname = jid_full(svcs);
xmlnode_put_attrib(x, "to", svcname);
logMessage = xmlnode2str(x);
if (strncmp(syslogsvc, svcname, 6) == 0)
syslog(LOG_NOTICE | LOG_DAEMON, "%s", logMessage);
else
deliver(dpacket_new(xmlnode_dup(x)), NULL);
}
svcname = jid_full(svcs);
xmlnode_put_attrib(x, "to", svcname);
logMessage = xmlnode2str(x);
if (strncmp(syslogsvc, svcname, 6) == 0)
syslog(LOG_NOTICE | LOG_DAEMON, "%s", logMessage);
else
deliver(dpacket_new(x), NULL);
log_debug(".",logMessage);
return M_PASS;
}
mreturn mod_log_session(mapi m, void *arg)
{
jid svcs = (jid)arg;
if(svcs != NULL)
{
js_mapi_session(es_IN, m->s, mod_log_archiver, svcs);
js_mapi_session(es_OUT, m->s, mod_log_archiver, svcs);
}
js_mapi_session(es_END, m->s, mod_log_session_end, NULL);
return M_PASS;
}
void mod_log(jsmi si)
{
xmlnode cfg = js_config(si,"archive");
jid svcs = NULL;
char* svcName="";
char* enabled="";
log_debug(ZONE,"mod_log init");
for(cfg = xmlnode_get_firstchild(cfg); cfg != NULL; cfg = xmlnode_get_nextsibling(cfg))
{
if(xmlnode_get_type(cfg) != NTYPE_TAG || j_strcmp(xmlnode_get_name(cfg),"service") != 0) continue;
svcName = xmlnode2str(cfg);
if (NULL== svcName || ( svcName && 0 == *svcName))
continue;
log_debug(ZONE,"mod_log has log service=%s", svcName);
if(svcs == NULL)
svcs = jid_new(si->p,xmlnode_get_data(cfg));
else
jid_append(svcs,jid_new(si->p,xmlnode_get_data(cfg)));
}
set_syslog_flag(0);
cfg = js_config(si,"logxml");
for(cfg = xmlnode_get_firstchild(cfg); cfg != NULL; cfg = xmlnode_get_nextsibling(cfg))
{
if(xmlnode_get_type(cfg) != NTYPE_TAG || j_strcmp(xmlnode_get_name(cfg),"syslog") != 0) continue;
enabled = xmlnode_get_data(cfg);
if (NULL== enabled || ( enabled && 0 == *enabled))
continue;
if (j_strcmp(enabled,"enable") == 0)
set_syslog_flag(1);
log_debug(ZONE,"mod_log has logxml:syslog=%s", enabled);
}
js_mapi_register(si,e_SESSION, mod_log_session, (void*)svcs);
}