static void jabber_iq_time_parse(JabberStream *js, xmlnode *packet) { const char *type, *from, *id, *xmlns; JabberIq *iq; xmlnode *query; time_t now_t; struct tm *now; time(&now_t); now = localtime(&now_t); type = xmlnode_get_attrib(packet, "type"); from = xmlnode_get_attrib(packet, "from"); id = xmlnode_get_attrib(packet, "id"); /* we're gonna throw this away in a moment, but we need it * to get the xmlns, so we can figure out if this is * jabber:iq:time or urn:xmpp:time */ query = xmlnode_get_child(packet, "query"); xmlns = xmlnode_get_namespace(query); if(type && !strcmp(type, "get")) { xmlnode *utc; const char *date; iq = jabber_iq_new_query(js, JABBER_IQ_RESULT, xmlns); jabber_iq_set_id(iq, id); xmlnode_set_attrib(iq->node, "to", from); query = xmlnode_get_child(iq->node, "query"); date = purple_utf8_strftime("%Y%m%dT%T", now); utc = xmlnode_new_child(query, "utc"); xmlnode_insert_data(utc, date, -1); if(!strcmp("urn:xmpp:time", xmlns)) { xmlnode_insert_data(utc, "Z", 1); /* of COURSE the thing that is the same is different */ date = purple_get_tzoff_str(now, TRUE); xmlnode_insert_data(xmlnode_new_child(query, "tzo"), date, -1); } else { /* jabber:iq:time */ date = purple_utf8_strftime("%Z", now); xmlnode_insert_data(xmlnode_new_child(query, "tz"), date, -1); date = purple_utf8_strftime("%d %b %Y %T", now); xmlnode_insert_data(xmlnode_new_child(query, "display"), date, -1); } jabber_iq_send(iq); } }
static void jabber_time_parse(JabberStream *js, const char *from, JabberIqType type, const char *id, PurpleXmlNode *child) { JabberIq *iq; time_t now_t; struct tm *tm; time(&now_t); if(type == JABBER_IQ_GET) { PurpleXmlNode *tzo, *utc; const char *date, *tz; iq = jabber_iq_new(js, JABBER_IQ_RESULT); jabber_iq_set_id(iq, id); if (from) purple_xmlnode_set_attrib(iq->node, "to", from); child = purple_xmlnode_new_child(iq->node, child->name); purple_xmlnode_set_namespace(child, NS_ENTITY_TIME); /* <tzo>-06:00</tzo> */ tm = localtime(&now_t); tz = purple_get_tzoff_str(tm, TRUE); tzo = purple_xmlnode_new_child(child, "tzo"); purple_xmlnode_insert_data(tzo, tz, -1); /* <utc>2006-12-19T17:58:35Z</utc> */ tm = gmtime(&now_t); date = purple_utf8_strftime("%Y-%m-%dT%H:%M:%SZ", tm); utc = purple_xmlnode_new_child(child, "utc"); purple_xmlnode_insert_data(utc, date, -1); jabber_iq_send(iq); } else { /* TODO: Errors */ } }