Пример #1
0
EC_BOOL cextsrv_req_decode(CEXTSRV *cextsrv, const UINT8 *in_buff, const UINT32 in_buff_len, TASK_FUNC *task_req_func)
{
    UINT32 recv_comm;

    FUNC_ADDR_NODE *func_addr_node;
    TYPE_CONV_ITEM *type_conv_item;

    UINT32 position;

    recv_comm = CMPI_ANY_COMM;

    position = 0;

    cmpi_decode_uint32(recv_comm, in_buff, in_buff_len, &(position), &(task_req_func->func_id));
    cmpi_decode_uint32(recv_comm, in_buff, in_buff_len, &(position), &(task_req_func->func_para_num));

    if(0 != dbg_fetch_func_addr_node_by_index(task_req_func->func_id, &func_addr_node))
    {
        dbg_log(SEC_0069_CEXTSRV, 0)(LOGSTDOUT, "error:cextsrv_req_decode: failed to fetch func addr node by func id %lx\n", task_req_func->func_id);
        return (EC_FALSE);
    }

    type_conv_item = dbg_query_type_conv_item_by_type(func_addr_node->func_ret_type);
    if( NULL_PTR == type_conv_item )
    {
        dbg_log(SEC_0069_CEXTSRV, 0)(LOGSTDOUT,"error:cextsrv_req_decode: ret type %ld conv item is not defined\n", func_addr_node->func_ret_type);
        return (EC_FALSE);
    }
    if(EC_TRUE == TYPE_CONV_ITEM_VAR_POINTER_FLAG(type_conv_item))
    {
        alloc_static_mem(MD_TASK, 0, TYPE_CONV_ITEM_VAR_MM_TYPE(type_conv_item), (void **)&(task_req_func->func_ret_val), LOC_CEXTSRV_0007);
        dbg_tiny_caller(2, TYPE_CONV_ITEM_VAR_INIT_FUNC(type_conv_item), CMPI_ANY_MODI, task_req_func->func_ret_val);
    }

    if(EC_FALSE == task_req_func_para_decode(recv_comm, in_buff, in_buff_len, &(position),
                                              &(task_req_func->func_para_num), (FUNC_PARA *)task_req_func->func_para,
                                              func_addr_node))
    {
        dbg_log(SEC_0069_CEXTSRV, 0)(LOGSTDOUT, "error:cextsrv_req_decode: decode func paras failed\n");

        if(EC_TRUE == TYPE_CONV_ITEM_VAR_POINTER_FLAG(type_conv_item) && 0 != task_req_func->func_ret_val)
        {
            free_static_mem(MD_TASK, 0, TYPE_CONV_ITEM_VAR_MM_TYPE(type_conv_item), (void *)(task_req_func->func_ret_val), LOC_CEXTSRV_0008);
        }
        return (EC_FALSE);
    }

    return (EC_TRUE);
}
Пример #2
0
TASK_NODE *cproc_fetch_task_node(CPROC *cproc, CPROC_ITEM *cproc_item)
{
    UINT32    size;

    size = csocket_encode_actual_size();

    if(size <= cproc_probe_read_len(cproc, cproc_item))
    {
        UINT32  pos;

        UINT32  len;
        UINT32  tag;
        UINT8   out_buff[32];
        UINT32  out_size;

        TASK_NODE *task_node;
        TASK_BRD *task_brd;

        out_size = 0;
        if(EC_FALSE == cproc_probe(cproc, cproc_item, out_buff, size, &out_size))
        {
            return (NULL_PTR);
        }

        //sys_log(LOGSTDOUT, "[DEBUG] cproc_fetch_task_node: [rank: %ld => %ld] out_size = %ld\n", CPROC_ITEM_ROW_RANK(cproc_item), CPROC_ITEM_COL_RANK(cproc_item),out_size);
        //PRINT_BUFF("[DEBUG] cproc_fetch_task_node: ", out_buff, out_size);

        task_brd = task_brd_default_get();

        pos = 0;
        cmpi_decode_uint32(TASK_BRD_COMM(task_brd), out_buff, out_size, &pos, &len);
        cmpi_decode_uint32(TASK_BRD_COMM(task_brd), out_buff, out_size, &pos, &tag);

        //sys_log(LOGSTDOUT, "[DEBUG] cproc_fetch_task_node: len = %ld, tag = %ld\n", len, tag);

        task_node = task_node_new(len, LOC_CPROC_0002);
        if(NULL_PTR == task_node)
        {
            sys_log(LOGSTDOUT, "error:cproc_fetch_task_node: new task_node with %ld bytes failed\n", len);
            return (NULL_PTR);
        }

        TASK_NODE_TAG(task_node) = tag;

        cproc_recv(cproc, cproc_item, TASK_NODE_BUFF(task_node), TASK_NODE_BUFF_LEN(task_node), &(TASK_NODE_BUFF_POS(task_node)));
        return (task_node);
    }
    return (NULL_PTR);
}