Exemplo n.º 1
0
static int recur_build_response_array( xmlrpc_env * env, struct mi_node * tree,
                                       str * buf )
{
    for ( ; tree ; tree = tree->next ) {
        if (!(tree->flags & MI_WRITTEN)) {
            if ( xr_write_node( buf, tree ) != 0 ) {
                LM_ERR("failed to get MI node data!\n");
                return -1;
            }

            /* we are sure that this node has been written
            * => avoid writing it again */
            tree->flags |= MI_WRITTEN;
        }

        reply_buffer[reply_buffer_len-buf->len] = 0;
        reply_item = xmlrpc_build_value(env, "s", reply_buffer);
        xmlrpc_array_append_item(env, xr_response, reply_item);

        buf->s = reply_buffer;
        buf->len = reply_buffer_len;

        if ( tree->kids ) {
            if ( recur_build_response_array(env, tree->kids, buf) != 0 )
                return -1;
        }
    }
    return 0;
}
Exemplo n.º 2
0
int xr_build_response_array( xmlrpc_env * env, struct mi_root * tree )
{
    str buf;

    buf.s = reply_buffer;
    buf.len = reply_buffer_len;

    /* test if mi root value is 200 OK (if not no point to continue) */
    if ( tree->code<200 || tree->code>=300 ) {
        LM_DBG("command processing failure: %s\n", tree->reason.s);
        if (tree->reason.s)
            xmlrpc_env_set_fault(env, tree->code, tree->reason.s);
        else
            xmlrpc_env_set_fault(env, tree->code, "Error");
        goto error;
    }

    if ( recur_build_response_array(env, (&tree->node)->kids, &buf) != 0 ) {
        LM_ERR("failed to read from the MI tree!\n");
        xmlrpc_env_set_fault(env, 500, "Failed to write reply");
        goto error;
    }

    return 0;

error:
    if ( reply_buffer ) pkg_free(reply_buffer);
    return -1;
}
Exemplo n.º 3
0
static int recur_build_response_array( xmlrpc_env * env, struct mi_node * tree, str * buf )
{
	for ( ; tree ; tree = tree->next ) {
		
		if ( xr_write_node( buf, tree ) != 0 ) {
			LM_ERR("failed to get MI node data!\n");
			return -1;
		}	

		reply_buffer[reply_buffer_len-buf->len] = 0;
		reply_item = xmlrpc_build_value(env, "s", reply_buffer);
		xmlrpc_array_append_item(env, xr_response, reply_item);
		
		buf->s = reply_buffer; 
		buf->len = reply_buffer_len;

		if ( tree->kids ) {
			if ( recur_build_response_array(env, tree->kids, buf) != 0 )
				return -1;
		}
	}
	return 0;
}