* Fixed marshaling of D-Bus dictionary types

git-svn-id: http://dev.openwengo.org/svn/openwengo/wengophone-ng/branches/wengophone-dbus-api/libs/dbus@8808 30a43799-04e7-0310-8b2b-ea0d24f86d0e
This commit is contained in:
pdurante 2006-12-11 16:50:03 +00:00
parent 8484b18054
commit 0084392c53
7 changed files with 47 additions and 27 deletions

View file

@ -246,13 +246,9 @@ int MessageIter::get_array( void* ptr )
return length;
}
MessageIter MessageIter::new_array( const char* sig )
int MessageIter::array_length()
{
MessageIter arr(msg());
dbus_message_iter_open_container(
(DBusMessageIter*)&_iter, DBUS_TYPE_ARRAY, sig, (DBusMessageIter*)&(arr._iter)
);
return arr;
return dbus_message_iter_get_array_len((DBusMessageIter*)&_iter);
}
bool MessageIter::is_array()
@ -260,25 +256,20 @@ bool MessageIter::is_array()
return dbus_message_iter_get_arg_type((DBusMessageIter*)&_iter) == DBUS_TYPE_ARRAY;
}
int MessageIter::array_length()
{
return dbus_message_iter_get_array_len((DBusMessageIter*)&_iter);
}
MessageIter MessageIter::new_dict_entry()
{
MessageIter ent(msg());
dbus_message_iter_open_container(
(DBusMessageIter*)_iter, DBUS_TYPE_DICT_ENTRY, 0, (DBusMessageIter*)&(ent._iter)
);
return ent;
}
bool MessageIter::is_dict()
{
return is_array() && dbus_message_iter_get_element_type((DBusMessageIter*)_iter) == DBUS_TYPE_DICT_ENTRY;
}
MessageIter MessageIter::new_array( const char* sig )
{
MessageIter arr(msg());
dbus_message_iter_open_container(
(DBusMessageIter*)&_iter, DBUS_TYPE_ARRAY, sig, (DBusMessageIter*)&(arr._iter)
);
return arr;
}
MessageIter MessageIter::new_variant( const char* sig )
{
MessageIter var(msg());
@ -292,11 +283,20 @@ MessageIter MessageIter::new_struct()
{
MessageIter stu(msg());
dbus_message_iter_open_container(
(DBusMessageIter*)_iter, DBUS_TYPE_STRUCT, 0, (DBusMessageIter*)&(stu._iter)
(DBusMessageIter*)_iter, DBUS_TYPE_STRUCT, NULL, (DBusMessageIter*)&(stu._iter)
);
return stu;
}
MessageIter MessageIter::new_dict_entry()
{
MessageIter ent(msg());
dbus_message_iter_open_container(
(DBusMessageIter*)_iter, DBUS_TYPE_DICT_ENTRY, NULL, (DBusMessageIter*)&(ent._iter)
);
return ent;
}
void MessageIter::close_container( MessageIter& container )
{
dbus_message_iter_close_container((DBusMessageIter*)&_iter, (DBusMessageIter*)&(container._iter));