- 论坛徽章:
- 0
|
typedef struct{
int id;
int parent_id;
char *mt_title;
}MSG_STRUCT;
static void* mt_query_dbus_message_get(DBusMessageIter *iter)
{
DBusMessageIter array_iter;
DBusMessageIter struct_iter;
int num_attrs;
int i;
MSG_STRUCT *mt_table;
if(DBUS_TYPE_INT32 != dbus_message_iter_get_arg_type(iter))
{
fprintf(stderr, "There must be something wrong in the server.\n");
exit(0);
}
dbus_message_iter_get_basic(iter, &num_attrs);
dbus_message_iter_next(iter);
dbus_message_iter_recurse(iter, &array_iter);
mt_table = (MSG_STRUCT*)malloc(sizeof(MSG_STRUCT)*num_attrs);
for(i = 0; i < num_attrs; i++)
{
if(dbus_message_iter_get_arg_type(&array_iter) == DBUS_TYPE_STRUCT)
{
dbus_message_iter_recurse(&array_iter, &struct_iter);
dbus_message_iter_get_basic(&struct_iter,&(mt_table.id));
dbus_message_iter_next(&struct_iter);
dbus_message_iter_get_basic(&struct_iter,&(mt_table.parent_id));
dbus_message_iter_next(&struct_iter);
dbus_message_iter_get_basic(&struct_iter,&(mt_table.mt_title));
// printf("get argument:%s\n",mt_table.mt_title);
}
dbus_message_iter_next(&array_iter);
}
mt_print_table(mt_table, num_attrs);
free(mt_table);
}
/**
* Send the argument
*/
static void* mt_query_dbus_message_send(char**szResult, int iRow, int iColumn, DBusMessageIter *args)
{
int i;
DBusMessageIter struct_args;
DBusMessageIter array_args;
if(!dbus_message_iter_append_basic(args, DBUS_TYPE_INT32, &iRow))
{
fprintf(stderr,"Out Of Memory!\n");
exit(0);
}
dbus_message_iter_open_container(args, DBUS_TYPE_ARRAY, "(iis)",&array_args);
for(i = 1;i <= iRow; i++)
{
dbus_message_iter_open_container(&array_args, DBUS_TYPE_STRUCT, 0, &struct_args);
int object_id;
int parent_id;
char **mt_title;
object_id = atoi(szResult[i*iColumn+0]);
parent_id = atoi(szResult[i*iColumn+2]);
mt_title = &(szResult[i*iColumn+5]);
if(!dbus_message_iter_append_basic(&struct_args,DBUS_TYPE_INT32,&object_id))
{
fprintf(stderr,"Out Of Memory!\n");
exit(0);
}
if(!dbus_message_iter_append_basic(&struct_args,DBUS_TYPE_INT32,&parent_id))
{
fprintf(stderr,"Out Of Memory!\n");
exit(0);
}
if(!dbus_message_iter_append_basic(&struct_args,DBUS_TYPE_STRING,mt_title))
{
fprintf(stderr,"Out Of Memory!\n");
exit(0);
}
dbus_message_iter_close_container(&array_args,&struct_args);
}
dbus_message_iter_close_container(args, &array_args);
}
上面是两个调用了DBUS中和消息参数管理相关的几个主要API的函数,接下来将详细介绍这几个接口的调用方法。
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/86244/showart_1657787.html |
|