Exemple #1
0
static struct mi_root* mi_b2b_list(struct mi_root* cmd, void* param)
{
	int i, len, index;
	char* p;
	b2bl_tuple_t* tuple;
	struct mi_root *rpl_tree;
	struct mi_node *node=NULL, *node1=NULL, *rpl=NULL, *node_a=NULL;
	struct mi_attr* attr;

	rpl_tree = init_mi_tree( 200, MI_OK_S, MI_OK_LEN);
	if (rpl_tree==NULL) return NULL;
	rpl = &rpl_tree->node;
	rpl->flags |= MI_IS_ARRAY;

	for(i = 0; i< b2bl_hsize; i++)
	{
		lock_get(&b2bl_htable[i].lock);
		tuple = b2bl_htable[i].first;
		while(tuple)
		{
			p = int2str((unsigned long)(tuple->id), &len);
			node = add_mi_node_child(rpl, MI_DUP_VALUE, "tuple", 5, p, len);
			if(node == NULL) goto error;
			attr = add_mi_attr(node, MI_DUP_VALUE, "key", 3,
					tuple->key->s, tuple->key->len);
			if(attr == NULL) goto error;
			p = int2str((unsigned long)(tuple->scenario_state), &len);
			attr = add_mi_attr(node, MI_DUP_VALUE, "scenario_state", 14, p, len);
			if(attr == NULL) goto error;
			p = int2str((unsigned long)(tuple->lifetime), &len);
			attr = add_mi_attr(node, MI_DUP_VALUE, "lifetime", 8, p, len);
			if(attr == NULL) goto error;
			p = int2str((unsigned long)(tuple->db_flag), &len);
			attr = add_mi_attr(node, MI_DUP_VALUE, "db_flag", 7, p, len);
			if(attr == NULL) goto error;

			if (tuple->scenario)
			{
				attr = add_mi_attr(node, MI_DUP_VALUE, "scenario", 8,
						tuple->scenario->id.s, tuple->scenario->id.len);
				if(attr == NULL) goto error;
				p = int2str((unsigned long)(tuple->next_scenario_state), &len);
				attr = add_mi_attr(node, MI_DUP_VALUE, "next_scenario_state", 19,
						p, len);
				if(attr == NULL) goto error;
			}

			for (node_a=NULL,index=0; index < MAX_B2BL_ENT; index++)
			{
				if (tuple->servers[index] != NULL)
				{
					if (node_a==NULL) {
						node_a = add_mi_node_child(node, MI_IS_ARRAY,
							"SERVERS", 7, NULL, 0);
						if (node_a==NULL) goto error;
					}
					p = int2str((unsigned long)(index), &len);
					node1 = add_mi_node_child(node_a, MI_DUP_VALUE,
						"server", 6, p, len);
					if(node1 == NULL) goto error;
					if (internal_mi_print_b2bl_entity_id(node1,
							tuple->servers[index])!=0)
						goto error;
				}
			}
			for (node_a=NULL,index=0; index < MAX_B2BL_ENT; index++)
			{
				if (tuple->clients[index] != NULL)
				{
					if (node_a==NULL) {
						node_a = add_mi_node_child(node, MI_IS_ARRAY,
							"CLIENTS", 7, NULL, 0);
						if (node_a==NULL) goto error;
					}
					p = int2str((unsigned long)(index), &len);
					node1 = add_mi_node_child(node_a, MI_DUP_VALUE,
						"client", 6, p, len);
					if(node1 == NULL) goto error;
					if (internal_mi_print_b2bl_entity_id(node1,
							tuple->clients[index])!=0)
						goto error;
				}
			}
			for (node_a=NULL,index=0; index < MAX_BRIDGE_ENT; index++)
			{
				if (tuple->bridge_entities[index] != NULL)
				{
					if (node_a==NULL) {
						node_a = add_mi_node_child(node, MI_IS_ARRAY,
							"BRIDGE_ENTITIES", 15, NULL, 0);
						if (node_a==NULL) goto error;
					}
					p = int2str((unsigned long)(index), &len);
					node1 = add_mi_node_child(node_a, MI_DUP_VALUE,
							"bridge_entitie", 14, p, len);
					if(node1 == NULL) goto error;
					if (internal_mi_print_b2bl_entity_id(node1,
							tuple->bridge_entities[index])!=0)
						goto error;
				}
			}
			tuple = tuple->next;
		}
		lock_release(&b2bl_htable[i].lock);
	}
	return rpl_tree;
error:
	lock_release(&b2bl_htable[i].lock);
	LM_ERR("Unable to create reply\n");
	free_mi_tree(rpl_tree);
	return NULL;
}
Exemple #2
0
static mi_response_t *mi_b2b_list(const mi_params_t *params,
								struct mi_handler *async_hdl)
{
	int i, index;
	b2bl_tuple_t* tuple;

	mi_response_t *resp;
	mi_item_t *resp_obj;
	mi_item_t *tuples_arr, *tuple_item;
	mi_item_t *servers_arr, *server_item;
	mi_item_t *clients_arr, *clients_item;
	mi_item_t *b_entities_arr, *b_entities_item;

	resp = init_mi_result_object(&resp_obj);
	if (!resp)
		return 0;

	tuples_arr = add_mi_array(resp_obj, MI_SSTR("Tuples"));
	if (!tuples_arr) {
		free_mi_response(resp);
		return 0;
	}

	for(i = 0; i< b2bl_hsize; i++)
	{
		lock_get(&b2bl_htable[i].lock);
		tuple = b2bl_htable[i].first;
		while(tuple)
		{
			tuple_item = add_mi_object(tuples_arr, NULL, 0);
			if (!tuple_item)
				goto error;

			if (add_mi_number(tuple_item, MI_SSTR("id"), tuple->id) < 0)
				goto error;
			if (add_mi_string(tuple_item, MI_SSTR("key"),
				tuple->key->s, tuple->key->len) < 0)
				goto error;
			if (add_mi_number(tuple_item, MI_SSTR("scenario_state"),
				tuple->scenario_state) < 0)
				goto error;
			if (add_mi_number(tuple_item, MI_SSTR("lifetime"),
				tuple->lifetime) < 0)
				goto error;
			if (add_mi_number(tuple_item, MI_SSTR("db_flag"),
				tuple->db_flag) < 0)
				goto error;

			if (tuple->scenario) {
				if (add_mi_string(tuple_item, MI_SSTR("scenario"),
					tuple->scenario->id.s, tuple->scenario->id.len) < 0)
					goto error;
				if (add_mi_number(tuple_item, MI_SSTR("next_scenario_state"),
					tuple->next_scenario_state) < 0)
					goto error;
			}

			servers_arr = add_mi_array(tuple_item, MI_SSTR("SERVERS"));
			if (!servers_arr)
				goto error;
			for (index=0; index < MAX_B2BL_ENT; index++)
			{
				if (tuple->servers[index] != NULL)
				{
					server_item = add_mi_object(servers_arr, NULL, 0);
					if (!server_item)
						goto error;

					if (add_mi_number(server_item, MI_SSTR("index"), index) < 0)
						goto error;
					if (internal_mi_print_b2bl_entity_id(server_item,
							tuple->servers[index])!=0)
						goto error;
				}
			}

			clients_arr = add_mi_array(tuple_item, MI_SSTR("CLIENTS"));
			if (!clients_arr)
				goto error;
			for (index=0; index < MAX_B2BL_ENT; index++)
			{
				if (tuple->clients[index] != NULL)
				{
					clients_item = add_mi_object(clients_arr, NULL, 0);
					if (!clients_item)
						goto error;

					if (add_mi_number(clients_item, MI_SSTR("index"), index) < 0)
						goto error;
					if (internal_mi_print_b2bl_entity_id(clients_item,
							tuple->clients[index])!=0)
						goto error;
				}
			}

			b_entities_arr = add_mi_array(tuple_item, MI_SSTR("BRIDGE_ENTITIES"));
			if (!b_entities_arr)
				goto error;
			for (index=0; index < MAX_BRIDGE_ENT; index++)
			{
				if (tuple->bridge_entities[index] != NULL)
				{
					b_entities_item = add_mi_object(b_entities_arr, NULL, 0);
					if (!b_entities_item)
						goto error;

					if (add_mi_number(b_entities_item, MI_SSTR("index"), index) < 0)
						goto error;
					if (internal_mi_print_b2bl_entity_id(b_entities_item,
							tuple->bridge_entities[index])!=0)
						goto error;
				}
			}
			tuple = tuple->next;
		}
		lock_release(&b2bl_htable[i].lock);
	}

	return resp;
error:
	lock_release(&b2bl_htable[i].lock);
	LM_ERR("Unable to create reply\n");
	free_mi_response(resp);
	return NULL;
}