summaryrefslogtreecommitdiff
path: root/codegen/valagdbusservermodule.vala
diff options
context:
space:
mode:
authorJürg Billeter <j@bitron.ch>2010-10-18 18:37:52 +0200
committerJürg Billeter <j@bitron.ch>2010-10-23 18:11:47 +0200
commit4584bde2e8c07e823b261a97b5cc3b37260a4bd4 (patch)
tree1e2e12906817757f771990b1f6ed74d5b58668ad /codegen/valagdbusservermodule.vala
parent12b44a8b138a3d5d4e9d179fc4e9229cebb8c1e7 (diff)
downloadvala-4584bde2e8c07e823b261a97b5cc3b37260a4bd4.tar.gz
D-Bus: Add support for sending file descriptors with GDBus
Diffstat (limited to 'codegen/valagdbusservermodule.vala')
-rw-r--r--codegen/valagdbusservermodule.vala20
1 files changed, 17 insertions, 3 deletions
diff --git a/codegen/valagdbusservermodule.vala b/codegen/valagdbusservermodule.vala
index 754204d53..fff2f260c 100644
--- a/codegen/valagdbusservermodule.vala
+++ b/codegen/valagdbusservermodule.vala
@@ -74,6 +74,8 @@ public class Vala.GDBusServerModule : GDBusClientModule {
push_function (function);
+ cfile.add_include ("gio/gunixfdlist.h");
+
if (ready) {
ccode.add_declaration ("GDBusMethodInvocation *", new CCodeVariableDeclarator ("invocation", new CCodeIdentifier ("_user_data_")));
}
@@ -229,6 +231,9 @@ public class Vala.GDBusServerModule : GDBusClientModule {
builder_init.add_argument (new CCodeIdentifier ("G_VARIANT_TYPE_TUPLE"));
ccode.add_expression (builder_init);
+ ccode.add_declaration ("GUnixFDList", new CCodeVariableDeclarator ("*_fd_list"));
+ ccode.add_expression (new CCodeAssignment (new CCodeIdentifier ("_fd_list"), new CCodeFunctionCall (new CCodeIdentifier ("g_unix_fd_list_new"))));
+
foreach (FormalParameter param in m.get_parameters ()) {
if (param.direction != ParameterDirection.OUT) {
continue;
@@ -248,14 +253,14 @@ public class Vala.GDBusServerModule : GDBusClientModule {
}
}
- write_expression (param.variable_type, new CCodeIdentifier ("_reply_builder"), new CCodeIdentifier (param.name), param);
+ send_dbus_value (param.variable_type, new CCodeIdentifier ("_reply_builder"), new CCodeIdentifier (param.name), param);
}
if (!(m.return_type is VoidType)) {
if (m.return_type.is_real_non_null_struct_type ()) {
ccode.add_declaration (m.return_type.get_cname (), new CCodeVariableDeclarator.zero ("result", default_value_for_type (m.return_type, true)));
- write_expression (m.return_type, new CCodeIdentifier ("_reply_builder"), new CCodeIdentifier ("result"), m);
+ send_dbus_value (m.return_type, new CCodeIdentifier ("_reply_builder"), new CCodeIdentifier ("result"), m);
if (requires_destroy (m.return_type)) {
// keep local alive (symbol_reference is weak)
@@ -280,7 +285,7 @@ public class Vala.GDBusServerModule : GDBusClientModule {
}
}
- write_expression (m.return_type, new CCodeIdentifier ("_reply_builder"), new CCodeIdentifier ("result"), m);
+ send_dbus_value (m.return_type, new CCodeIdentifier ("_reply_builder"), new CCodeIdentifier ("result"), m);
if (requires_destroy (m.return_type)) {
// keep local alive (symbol_reference is weak)
@@ -304,6 +309,15 @@ public class Vala.GDBusServerModule : GDBusClientModule {
set_body.add_argument (new CCodeIdentifier ("_reply_message"));
set_body.add_argument (new CCodeIdentifier ("_reply"));
ccode.add_expression (set_body);
+
+ ccall = new CCodeFunctionCall (new CCodeIdentifier ("g_dbus_message_set_unix_fd_list"));
+ ccall.add_argument (new CCodeIdentifier ("_reply_message"));
+ ccall.add_argument (new CCodeIdentifier ("_fd_list"));
+ ccode.add_expression (ccall);
+
+ ccall = new CCodeFunctionCall (new CCodeIdentifier ("g_object_unref"));
+ ccall.add_argument (new CCodeIdentifier ("_fd_list"));
+ ccode.add_expression (ccall);
} else {
ccode.add_expression (ccall);
}