00001
#include <dbus-gvalue.h>
00002
00003 gboolean
00004 dbus_gvalue_demarshal (
DBusMessageIter *iter, GValue *value)
00005 {
00006 gboolean can_convert =
TRUE;
00007
00008
switch (
dbus_message_iter_get_arg_type (iter))
00009 {
00010
#define MAP(d_t, d_get, g_t, g_set) \
00011
case DBUS_##d_t: \
00012
g_value_init (value, G_##g_t); \
00013
g_value_##g_set (value, dbus_message_iter_##d_get (iter)); \
00014
break
00015
00016 MAP(TYPE_BYTE, get_byte, TYPE_UCHAR, set_uchar);
00017 MAP(TYPE_BOOLEAN, get_boolean, TYPE_BOOLEAN , set_boolean);
00018 MAP(TYPE_INT32, get_int32, TYPE_INT , set_int);
00019 MAP(TYPE_UINT32, get_uint32, TYPE_UINT , set_uint);
00020
#ifdef DBUS_HAVE_INT64
00021
MAP(TYPE_INT64, get_int64, TYPE_INT64 , set_int64);
00022 MAP(TYPE_UINT64, get_uint64, TYPE_UINT64 , set_uint64);
00023
#endif
00024
MAP(TYPE_DOUBLE, get_double, TYPE_DOUBLE , set_double);
00025
case DBUS_TYPE_STRING:
00026 {
00027
char *s;
00028
00029 g_value_init (value, G_TYPE_STRING);
00030
00031 s =
dbus_message_iter_get_string (iter);
00032 g_value_set_string (value, s);
00033 g_free (s);
00034 }
00035
break;
00036
default:
00037
00038
00039 can_convert =
FALSE;
00040
break;
00041 }
00042
#undef MAP
00043
return can_convert;
00044 }
00045
00046 gboolean
00047 dbus_gvalue_marshal (
DBusMessageIter *iter, GValue *value)
00048 {
00049 gboolean can_convert =
TRUE;
00050 GType value_type = G_VALUE_TYPE (value);
00051
00052 value_type = G_VALUE_TYPE (value);
00053
00054
switch (value_type)
00055 {
00056
case G_TYPE_CHAR:
00057
dbus_message_iter_append_byte (iter,
00058 g_value_get_char (value));
00059
break;
00060
case G_TYPE_UCHAR:
00061
dbus_message_iter_append_byte (iter,
00062 g_value_get_uchar (value));
00063
break;
00064
case G_TYPE_BOOLEAN:
00065
dbus_message_iter_append_boolean (iter,
00066 g_value_get_boolean (value));
00067
break;
00068
case G_TYPE_INT:
00069
dbus_message_iter_append_int32 (iter,
00070 g_value_get_int (value));
00071
break;
00072
case G_TYPE_UINT:
00073
dbus_message_iter_append_uint32 (iter,
00074 g_value_get_uint (value));
00075
break;
00076
00077
00078
00079
case G_TYPE_LONG:
00080
dbus_message_iter_append_int32 (iter,
00081 g_value_get_long (value));
00082
break;
00083
case G_TYPE_ULONG:
00084
dbus_message_iter_append_uint32 (iter,
00085 g_value_get_ulong (value));
00086
break;
00087
#ifdef DBUS_HAVE_INT64
00088
case G_TYPE_INT64:
00089
dbus_message_iter_append_int64 (iter,
00090 g_value_get_int64 (value));
00091
break;
00092
case G_TYPE_UINT64:
00093
dbus_message_iter_append_uint64 (iter,
00094 g_value_get_uint64 (value));
00095
break;
00096
#endif
00097
case G_TYPE_FLOAT:
00098
dbus_message_iter_append_double (iter,
00099 g_value_get_float (value));
00100
break;
00101
case G_TYPE_DOUBLE:
00102
dbus_message_iter_append_double (iter,
00103 g_value_get_double (value));
00104
break;
00105
case G_TYPE_STRING:
00106
00107
dbus_message_iter_append_string (iter,
00108 g_value_get_string (value));
00109
break;
00110
default:
00111
00112
00113 can_convert =
FALSE;
00114
break;
00115 }
00116
00117
return can_convert;
00118 }
00119