1 /*
2  * This file is part of gtkD.
3  *
4  * gtkD is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU Lesser General Public License
6  * as published by the Free Software Foundation; either version 3
7  * of the License, or (at your option) any later version, with
8  * some exceptions, please read the COPYING file.
9  *
10  * gtkD is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public License
16  * along with gtkD; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110, USA
18  */
19 
20 // generated automatically - do not change
21 // find conversion definition on APILookup.txt
22 // implement new conversion functionalities on the wrap.utils pakage
23 
24 
25 module gio.DBusMethodInvocation;
26 
27 private import gio.DBusConnection;
28 private import gio.DBusMessage;
29 private import gio.DBusMethodInfo;
30 private import gio.DBusPropertyInfo;
31 private import gio.UnixFDList;
32 private import gio.c.functions;
33 public  import gio.c.types;
34 private import glib.ErrorG;
35 private import glib.Str;
36 private import glib.Variant;
37 private import gobject.ObjectG;
38 public  import gtkc.giotypes;
39 
40 
41 /**
42  * Instances of the #GDBusMethodInvocation class are used when
43  * handling D-Bus method calls. It provides a way to asynchronously
44  * return results and errors.
45  * 
46  * The normal way to obtain a #GDBusMethodInvocation object is to receive
47  * it as an argument to the handle_method_call() function in a
48  * #GDBusInterfaceVTable that was passed to g_dbus_connection_register_object().
49  *
50  * Since: 2.26
51  */
52 public class DBusMethodInvocation : ObjectG
53 {
54 	/** the main Gtk struct */
55 	protected GDBusMethodInvocation* gDBusMethodInvocation;
56 
57 	/** Get the main Gtk struct */
58 	public GDBusMethodInvocation* getDBusMethodInvocationStruct(bool transferOwnership = false)
59 	{
60 		if (transferOwnership)
61 			ownedRef = false;
62 		return gDBusMethodInvocation;
63 	}
64 
65 	/** the main Gtk struct as a void* */
66 	protected override void* getStruct()
67 	{
68 		return cast(void*)gDBusMethodInvocation;
69 	}
70 
71 	/**
72 	 * Sets our main struct and passes it to the parent class.
73 	 */
74 	public this (GDBusMethodInvocation* gDBusMethodInvocation, bool ownedRef = false)
75 	{
76 		this.gDBusMethodInvocation = gDBusMethodInvocation;
77 		super(cast(GObject*)gDBusMethodInvocation, ownedRef);
78 	}
79 
80 
81 	/** */
82 	public static GType getType()
83 	{
84 		return g_dbus_method_invocation_get_type();
85 	}
86 
87 	/**
88 	 * Gets the #GDBusConnection the method was invoked on.
89 	 *
90 	 * Returns: A #GDBusConnection. Do not free, it is owned by @invocation.
91 	 *
92 	 * Since: 2.26
93 	 */
94 	public DBusConnection getConnection()
95 	{
96 		auto p = g_dbus_method_invocation_get_connection(gDBusMethodInvocation);
97 
98 		if(p is null)
99 		{
100 			return null;
101 		}
102 
103 		return ObjectG.getDObject!(DBusConnection)(cast(GDBusConnection*) p);
104 	}
105 
106 	/**
107 	 * Gets the name of the D-Bus interface the method was invoked on.
108 	 *
109 	 * If this method call is a property Get, Set or GetAll call that has
110 	 * been redirected to the method call handler then
111 	 * "org.freedesktop.DBus.Properties" will be returned.  See
112 	 * #GDBusInterfaceVTable for more information.
113 	 *
114 	 * Returns: A string. Do not free, it is owned by @invocation.
115 	 *
116 	 * Since: 2.26
117 	 */
118 	public string getInterfaceName()
119 	{
120 		return Str.toString(g_dbus_method_invocation_get_interface_name(gDBusMethodInvocation));
121 	}
122 
123 	/**
124 	 * Gets the #GDBusMessage for the method invocation. This is useful if
125 	 * you need to use low-level protocol features, such as UNIX file
126 	 * descriptor passing, that cannot be properly expressed in the
127 	 * #GVariant API.
128 	 *
129 	 * See this [server][gdbus-server] and [client][gdbus-unix-fd-client]
130 	 * for an example of how to use this low-level API to send and receive
131 	 * UNIX file descriptors.
132 	 *
133 	 * Returns: #GDBusMessage. Do not free, it is owned by @invocation.
134 	 *
135 	 * Since: 2.26
136 	 */
137 	public DBusMessage getMessage()
138 	{
139 		auto p = g_dbus_method_invocation_get_message(gDBusMethodInvocation);
140 
141 		if(p is null)
142 		{
143 			return null;
144 		}
145 
146 		return ObjectG.getDObject!(DBusMessage)(cast(GDBusMessage*) p);
147 	}
148 
149 	/**
150 	 * Gets information about the method call, if any.
151 	 *
152 	 * If this method invocation is a property Get, Set or GetAll call that
153 	 * has been redirected to the method call handler then %NULL will be
154 	 * returned.  See g_dbus_method_invocation_get_property_info() and
155 	 * #GDBusInterfaceVTable for more information.
156 	 *
157 	 * Returns: A #GDBusMethodInfo or %NULL. Do not free, it is owned by @invocation.
158 	 *
159 	 * Since: 2.26
160 	 */
161 	public DBusMethodInfo getMethodInfo()
162 	{
163 		auto p = g_dbus_method_invocation_get_method_info(gDBusMethodInvocation);
164 
165 		if(p is null)
166 		{
167 			return null;
168 		}
169 
170 		return ObjectG.getDObject!(DBusMethodInfo)(cast(GDBusMethodInfo*) p);
171 	}
172 
173 	/**
174 	 * Gets the name of the method that was invoked.
175 	 *
176 	 * Returns: A string. Do not free, it is owned by @invocation.
177 	 *
178 	 * Since: 2.26
179 	 */
180 	public string getMethodName()
181 	{
182 		return Str.toString(g_dbus_method_invocation_get_method_name(gDBusMethodInvocation));
183 	}
184 
185 	/**
186 	 * Gets the object path the method was invoked on.
187 	 *
188 	 * Returns: A string. Do not free, it is owned by @invocation.
189 	 *
190 	 * Since: 2.26
191 	 */
192 	public string getObjectPath()
193 	{
194 		return Str.toString(g_dbus_method_invocation_get_object_path(gDBusMethodInvocation));
195 	}
196 
197 	/**
198 	 * Gets the parameters of the method invocation. If there are no input
199 	 * parameters then this will return a GVariant with 0 children rather than NULL.
200 	 *
201 	 * Returns: A #GVariant tuple. Do not unref this because it is owned by @invocation.
202 	 *
203 	 * Since: 2.26
204 	 */
205 	public Variant getParameters()
206 	{
207 		auto p = g_dbus_method_invocation_get_parameters(gDBusMethodInvocation);
208 
209 		if(p is null)
210 		{
211 			return null;
212 		}
213 
214 		return new Variant(cast(GVariant*) p);
215 	}
216 
217 	/**
218 	 * Gets information about the property that this method call is for, if
219 	 * any.
220 	 *
221 	 * This will only be set in the case of an invocation in response to a
222 	 * property Get or Set call that has been directed to the method call
223 	 * handler for an object on account of its property_get() or
224 	 * property_set() vtable pointers being unset.
225 	 *
226 	 * See #GDBusInterfaceVTable for more information.
227 	 *
228 	 * If the call was GetAll, %NULL will be returned.
229 	 *
230 	 * Returns: a #GDBusPropertyInfo or %NULL
231 	 *
232 	 * Since: 2.38
233 	 */
234 	public DBusPropertyInfo getPropertyInfo()
235 	{
236 		auto p = g_dbus_method_invocation_get_property_info(gDBusMethodInvocation);
237 
238 		if(p is null)
239 		{
240 			return null;
241 		}
242 
243 		return ObjectG.getDObject!(DBusPropertyInfo)(cast(GDBusPropertyInfo*) p);
244 	}
245 
246 	/**
247 	 * Gets the bus name that invoked the method.
248 	 *
249 	 * Returns: A string. Do not free, it is owned by @invocation.
250 	 *
251 	 * Since: 2.26
252 	 */
253 	public string getSender()
254 	{
255 		return Str.toString(g_dbus_method_invocation_get_sender(gDBusMethodInvocation));
256 	}
257 
258 	/**
259 	 * Gets the @user_data #gpointer passed to g_dbus_connection_register_object().
260 	 *
261 	 * Returns: A #gpointer.
262 	 *
263 	 * Since: 2.26
264 	 */
265 	public void* getUserData()
266 	{
267 		return g_dbus_method_invocation_get_user_data(gDBusMethodInvocation);
268 	}
269 
270 	/**
271 	 * Finishes handling a D-Bus method call by returning an error.
272 	 *
273 	 * This method will take ownership of @invocation. See
274 	 * #GDBusInterfaceVTable for more information about the ownership of
275 	 * @invocation.
276 	 *
277 	 * Params:
278 	 *     errorName = A valid D-Bus error name.
279 	 *     errorMessage = A valid D-Bus error message.
280 	 *
281 	 * Since: 2.26
282 	 */
283 	public void returnDbusError(string errorName, string errorMessage)
284 	{
285 		g_dbus_method_invocation_return_dbus_error(gDBusMethodInvocation, Str.toStringz(errorName), Str.toStringz(errorMessage));
286 	}
287 
288 	/**
289 	 * Like g_dbus_method_invocation_return_error() but without printf()-style formatting.
290 	 *
291 	 * This method will take ownership of @invocation. See
292 	 * #GDBusInterfaceVTable for more information about the ownership of
293 	 * @invocation.
294 	 *
295 	 * Params:
296 	 *     domain = A #GQuark for the #GError error domain.
297 	 *     code = The error code.
298 	 *     message = The error message.
299 	 *
300 	 * Since: 2.26
301 	 */
302 	public void returnErrorLiteral(GQuark domain, int code, string message)
303 	{
304 		g_dbus_method_invocation_return_error_literal(gDBusMethodInvocation, domain, code, Str.toStringz(message));
305 	}
306 
307 	/**
308 	 * Like g_dbus_method_invocation_return_error() but intended for
309 	 * language bindings.
310 	 *
311 	 * This method will take ownership of @invocation. See
312 	 * #GDBusInterfaceVTable for more information about the ownership of
313 	 * @invocation.
314 	 *
315 	 * Params:
316 	 *     domain = A #GQuark for the #GError error domain.
317 	 *     code = The error code.
318 	 *     format = printf()-style format.
319 	 *     varArgs = #va_list of parameters for @format.
320 	 *
321 	 * Since: 2.26
322 	 */
323 	public void returnErrorValist(GQuark domain, int code, string format, void* varArgs)
324 	{
325 		g_dbus_method_invocation_return_error_valist(gDBusMethodInvocation, domain, code, Str.toStringz(format), varArgs);
326 	}
327 
328 	/**
329 	 * Like g_dbus_method_invocation_return_error() but takes a #GError
330 	 * instead of the error domain, error code and message.
331 	 *
332 	 * This method will take ownership of @invocation. See
333 	 * #GDBusInterfaceVTable for more information about the ownership of
334 	 * @invocation.
335 	 *
336 	 * Params:
337 	 *     error = A #GError.
338 	 *
339 	 * Since: 2.26
340 	 */
341 	public void returnGerror(ErrorG error)
342 	{
343 		g_dbus_method_invocation_return_gerror(gDBusMethodInvocation, (error is null) ? null : error.getErrorGStruct());
344 	}
345 
346 	/**
347 	 * Finishes handling a D-Bus method call by returning @parameters.
348 	 * If the @parameters GVariant is floating, it is consumed.
349 	 *
350 	 * It is an error if @parameters is not of the right format: it must be a tuple
351 	 * containing the out-parameters of the D-Bus method. Even if the method has a
352 	 * single out-parameter, it must be contained in a tuple. If the method has no
353 	 * out-parameters, @parameters may be %NULL or an empty tuple.
354 	 *
355 	 * |[<!-- language="C" -->
356 	 * GDBusMethodInvocation *invocation = some_invocation;
357 	 * g_autofree gchar *result_string = NULL;
358 	 * g_autoptr (GError) error = NULL;
359 	 *
360 	 * result_string = calculate_result (&error);
361 	 *
362 	 * if (error != NULL)
363 	 * g_dbus_method_invocation_return_gerror (invocation, error);
364 	 * else
365 	 * g_dbus_method_invocation_return_value (invocation,
366 	 * g_variant_new ("(s)", result_string));
367 	 *
368 	 * // Do not free @invocation here; returning a value does that
369 	 * ]|
370 	 *
371 	 * This method will take ownership of @invocation. See
372 	 * #GDBusInterfaceVTable for more information about the ownership of
373 	 * @invocation.
374 	 *
375 	 * Since 2.48, if the method call requested for a reply not to be sent
376 	 * then this call will sink @parameters and free @invocation, but
377 	 * otherwise do nothing (as per the recommendations of the D-Bus
378 	 * specification).
379 	 *
380 	 * Params:
381 	 *     parameters = A #GVariant tuple with out parameters for the method or %NULL if not passing any parameters.
382 	 *
383 	 * Since: 2.26
384 	 */
385 	public void returnValue(Variant parameters)
386 	{
387 		g_dbus_method_invocation_return_value(gDBusMethodInvocation, (parameters is null) ? null : parameters.getVariantStruct());
388 	}
389 
390 	/**
391 	 * Like g_dbus_method_invocation_return_value() but also takes a #GUnixFDList.
392 	 *
393 	 * This method is only available on UNIX.
394 	 *
395 	 * This method will take ownership of @invocation. See
396 	 * #GDBusInterfaceVTable for more information about the ownership of
397 	 * @invocation.
398 	 *
399 	 * Params:
400 	 *     parameters = A #GVariant tuple with out parameters for the method or %NULL if not passing any parameters.
401 	 *     fdList = A #GUnixFDList or %NULL.
402 	 *
403 	 * Since: 2.30
404 	 */
405 	public void returnValueWithUnixFdList(Variant parameters, UnixFDList fdList)
406 	{
407 		g_dbus_method_invocation_return_value_with_unix_fd_list(gDBusMethodInvocation, (parameters is null) ? null : parameters.getVariantStruct(), (fdList is null) ? null : fdList.getUnixFDListStruct());
408 	}
409 
410 	/**
411 	 * Like g_dbus_method_invocation_return_gerror() but takes ownership
412 	 * of @error so the caller does not need to free it.
413 	 *
414 	 * This method will take ownership of @invocation. See
415 	 * #GDBusInterfaceVTable for more information about the ownership of
416 	 * @invocation.
417 	 *
418 	 * Params:
419 	 *     error = A #GError.
420 	 *
421 	 * Since: 2.30
422 	 */
423 	public void takeError(ErrorG error)
424 	{
425 		g_dbus_method_invocation_take_error(gDBusMethodInvocation, (error is null) ? null : error.getErrorGStruct(true));
426 	}
427 }