diff --git a/examples/echo/echo-introspect.xml b/examples/echo/echo-introspect.xml
index be04755..7d415ab 100644
--- a/examples/echo/echo-introspect.xml
+++ b/examples/echo/echo-introspect.xml
@@ -12,6 +12,10 @@
+
+
+
+
diff --git a/examples/echo/echo-server.cpp b/examples/echo/echo-server.cpp
index d0716d7..251e1a2 100644
--- a/examples/echo/echo-server.cpp
+++ b/examples/echo/echo-server.cpp
@@ -2,6 +2,7 @@
#include
#include
#include
+#include
static const char* ECHO_SERVER_NAME = "org.freedesktop.DBus.Examples.Echo";
static const char* ECHO_SERVER_PATH = "/org/freedesktop/DBus/Examples/Echo";
@@ -28,6 +29,21 @@ DBus::Variant EchoServer::Echo( const DBus::Variant& value )
return value;
}
+std::vector< DBus::Byte > EchoServer::Cat( const DBus::String & file )
+{
+ FILE* handle = fopen(file.c_str(), "rb");
+
+ if(!handle) throw DBus::Error("org.freedesktop.DBus.EchoDemo.ErrorFileNotFound", "file not found");
+
+ DBus::Byte buff[1024];
+
+ size_t nread = fread(buff, 1, sizeof(buff), handle);
+
+ fclose(handle);
+
+ return std::vector< DBus::Byte > (buff, buff + nread);
+}
+
DBus::Int32 EchoServer::Sum( const std::vector& ints )
{
DBus::Int32 sum = 0;
diff --git a/examples/echo/echo-server.h b/examples/echo/echo-server.h
index 5d3de8c..d1007ac 100644
--- a/examples/echo/echo-server.h
+++ b/examples/echo/echo-server.h
@@ -19,6 +19,8 @@ public:
DBus::Variant Echo( const DBus::Variant & value );
+ std::vector< DBus::Byte > Cat( const DBus::String & file );
+
DBus::Int32 Sum( const std::vector & ints );
std::map< DBus::String, DBus::String > Info();
diff --git a/include/dbus-c++/types.h b/include/dbus-c++/types.h
index 5bc2b54..a180c9f 100644
--- a/include/dbus-c++/types.h
+++ b/include/dbus-c++/types.h
@@ -288,7 +288,9 @@ inline DBus::MessageIter& operator << ( DBus::MessageIter& iter, const std::vect
template<>
inline DBus::MessageIter& operator << ( DBus::MessageIter& iter, const std::vector& val )
{
- iter.append_array('y', &val.front(), val.size());
+ DBus::MessageIter ait = iter.new_array("y");
+ ait.append_array('y', &val.front(), val.size());
+ iter.close_container(ait);
return iter;
}
@@ -447,9 +449,12 @@ inline DBus::MessageIter& operator >> ( DBus::MessageIter& iter, std::vector(&val.front()));
+ DBus::Byte* array;
+ size_t length = ait.get_array(&array);
+
+ val.insert(val.end(), array, array+length);
return ++iter;
}
diff --git a/src/message.cpp b/src/message.cpp
index 100aa91..ef3823f 100644
--- a/src/message.cpp
+++ b/src/message.cpp
@@ -231,7 +231,7 @@ char* MessageIter::signature() const
bool MessageIter::append_array( char type, const void* ptr, size_t length )
{
- return dbus_message_iter_append_fixed_array((DBusMessageIter*)&_iter, type, ptr, length);
+ return dbus_message_iter_append_fixed_array((DBusMessageIter*)&_iter, type, &ptr, length);
}
int MessageIter::array_type()