#include "sm.h"
#ifdef HAVE_TZNAME
extern char *tzname[];
#endif
static mod_ret_t _iq_time_pkt_sm(mod_instance_t mi, pkt_t pkt)
{
time_t t;
struct tm *tm;
char buf[64];
char *c;
if(pkt->type != pkt_IQ || pkt->ns != ns_TIME)
return mod_PASS;
t = time(NULL);
sm_timestamp(t, buf);
nad_insert_elem(pkt->nad, 2, NAD_ENS(pkt->nad, 1), "utc", buf);
tm = localtime(&t);
strcpy(buf, asctime(tm));
c = strchr(buf, '\n');
if(c != NULL)
*c = '\0';
nad_insert_elem(pkt->nad, 2, NAD_ENS(pkt->nad, 1), "display", buf);
tzset();
#if defined(HAVE_STRUCT_TM_TM_ZONE)
nad_insert_elem(pkt->nad, 2, NAD_ENS(pkt->nad, 1), "tz", (char *) tm->tm_zone);
#elif defined(HAVE_TZNAME)
nad_insert_elem(pkt->nad, 2, NAD_ENS(pkt->nad, 1), "tz", tzname[0]);
#endif
nad_set_attr(pkt->nad, 1, -1, "type", "result", 6);
pkt_router(pkt_tofrom(pkt));
return mod_HANDLED;
}
int iq_time_init(mod_instance_t mi, char *arg)
{
module_t mod = mi->mod;
if(mod->init) return 0;
mod->pkt_sm = _iq_time_pkt_sm;
feature_register(mod->mm->sm, uri_TIME);
return 0;
}