static void gather_session(gpointer key, gpointer value, gpointer data) { struct show_sessions_data *ssd; struct mbb_session *ss; gchar *username; XmlTag *xt; guint sid; sid = GPOINTER_TO_INT(key); ss = (struct mbb_session *) value; ssd = (struct show_sessions_data *) data; if (ss->user == NULL) username = g_strdup("*"); else { mbb_user_lock(ss->user); username = g_strdup(ss->user->name); mbb_user_unlock(ss->user); } xml_tag_add_child(ssd->ans, xt = xml_tag_newc( "session", "sid", variant_new_int(sid), "user", variant_new_alloc_string(username), "peer", variant_new_string(ss->peer), "start", variant_new_alloc_string(g_strdup_printf("%ld", ss->start)) )); if (ssd->show_mtime) { gchar *mtime = g_strdup_printf("%ld", ss->mtime); xml_tag_set_attr(xt, "mtime", variant_new_alloc_string(mtime)); } }
static XmlTag *gather_entry(MbbInetPoolEntry *entry, XmlTag *tag) { time_t start, end; XmlTag *xt; start = mbb_inet_pool_entry_get_start(entry); end = mbb_inet_pool_entry_get_end(entry); xml_tag_add_child(tag, xt = xml_tag_newc( "inet_entry", "id", variant_new_int(entry->id), "inet", variant_new_alloc_string(inettoa(NULL, &entry->inet)), "start", variant_new_long(start), "end", variant_new_long(end), "nice", variant_new_int(entry->nice) )); if (entry->start < 0) xml_tag_set_attr(xt, "parent_start", variant_new_static_string("true") ); if (entry->end < 0) xml_tag_set_attr(xt, "parent_end", variant_new_static_string("true") ); if (entry->flag == FALSE) xml_tag_set_attr(xt, "exclusive", variant_new_static_string("true") ); return xt; }
static void gather_gateway(MbbGateway *gw, XmlTag *tag) { xml_tag_add_child(tag, xml_tag_newc( "gateway", "name", variant_new_string(gw->name), "addr", variant_new_alloc_string(ipv4toa(NULL, gw->addr)) )); }
static void process_request(struct http_thread_env *hte) { gchar *method; XmlTag *ans; method = hte->method; if (method != NULL) { if (hte->root_tag == NULL) hte->root_tag = xml_tag_newc("request"); xml_tag_set_attr(hte->root_tag, "name", variant_new_static_string(method) ); if (mbb_func_call(method, hte->root_tag, &ans) == FALSE) ans = mbb_xml_msg(MBB_MSG_UNKNOWN_METHOD, method); } else { Variant *var; XmlTag *tag; XmlTag *xt; ans = mbb_xml_msg_ok(); xt = xml_tag_get_child(hte->root_tag, "request"); xml_tag_reorder(xt); for (; xt != NULL; xt = xt->next) { var = xml_tag_get_attr(xt, "name"); if (var == NULL) continue; method = variant_get_string(var); if (mbb_func_call(method, xt, &tag) == FALSE) tag = mbb_xml_msg(MBB_MSG_UNKNOWN_METHOD, method); else if (tag == NULL) tag = mbb_xml_msg_ok(); xml_tag_set_attr(tag, "origin", variant_new_static_string(method) ); xml_tag_add_child(ans, tag); } xml_tag_reorder(xml_tag_get_child(ans, "response")); } push_http_xml_msg(hte, ans); }