示例#1
0
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));
	}
}
示例#2
0
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;
}
示例#3
0
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))
	));
}
示例#4
0
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);
}