summaryrefslogtreecommitdiff
path: root/gio/gdbusprivate.h
blob: e7a5bfa4f14a1f17a40fca556735569f861297e2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
/* GDBus - GLib D-Bus Library
 *
 * Copyright (C) 2008-2010 Red Hat, Inc.
 *
 * SPDX-License-Identifier: LGPL-2.1-or-later
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General
 * Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
 *
 * Author: David Zeuthen <davidz@redhat.com>
 */

#ifndef __G_DBUS_PRIVATE_H__
#define __G_DBUS_PRIVATE_H__

#include <gio/giotypes.h>

G_BEGIN_DECLS

/* ---------------------------------------------------------------------------------------------------- */

typedef struct GDBusWorker GDBusWorker;

typedef void (*GDBusWorkerMessageReceivedCallback) (GDBusWorker   *worker,
                                                    GDBusMessage  *message,
                                                    gpointer       user_data);

typedef GDBusMessage *(*GDBusWorkerMessageAboutToBeSentCallback) (GDBusWorker   *worker,
                                                                  GDBusMessage  *message,
                                                                  gpointer       user_data);

typedef void (*GDBusWorkerDisconnectedCallback)    (GDBusWorker   *worker,
                                                    gboolean       remote_peer_vanished,
                                                    GError        *error,
                                                    gpointer       user_data);

/* This function may be called from any thread - callbacks will be in the shared private message thread
 * and must not block.
 */
GDBusWorker *_g_dbus_worker_new          (GIOStream                          *stream,
                                          GDBusCapabilityFlags                capabilities,
                                          gboolean                            initially_frozen,
                                          GDBusWorkerMessageReceivedCallback  message_received_callback,
                                          GDBusWorkerMessageAboutToBeSentCallback message_about_to_be_sent_callback,
                                          GDBusWorkerDisconnectedCallback     disconnected_callback,
                                          gpointer                            user_data);

/* can be called from any thread - steals blob */
void         _g_dbus_worker_send_message (GDBusWorker    *worker,
                                          GDBusMessage   *message,
                                          gchar          *blob,
                                          gsize           blob_len);

/* can be called from any thread */
void         _g_dbus_worker_stop         (GDBusWorker    *worker);

/* can be called from any thread */
void         _g_dbus_worker_unfreeze     (GDBusWorker    *worker);

/* can be called from any thread (except the worker thread) */
gboolean     _g_dbus_worker_flush_sync   (GDBusWorker    *worker,
                                          GCancellable   *cancellable,
                                          GError        **error);

/* can be called from any thread */
void         _g_dbus_worker_close        (GDBusWorker         *worker,
                                          GTask               *task);

/* ---------------------------------------------------------------------------------------------------- */

void _g_dbus_initialize (void);
gboolean _g_dbus_debug_authentication (void);
gboolean _g_dbus_debug_transport (void);
gboolean _g_dbus_debug_message (void);
gboolean _g_dbus_debug_payload (void);
gboolean _g_dbus_debug_call    (void);
gboolean _g_dbus_debug_signal  (void);
gboolean _g_dbus_debug_incoming (void);
gboolean _g_dbus_debug_return (void);
gboolean _g_dbus_debug_emission (void);
gboolean _g_dbus_debug_address (void);
gboolean _g_dbus_debug_proxy (void);

void     _g_dbus_debug_print_lock (void);
void     _g_dbus_debug_print_unlock (void);

gboolean _g_dbus_address_parse_entry (const gchar  *address_entry,
                                      gchar       **out_transport_name,
                                      GHashTable  **out_key_value_pairs,
                                      GError      **error);

GVariantType * _g_dbus_compute_complete_signature (GDBusArgInfo **args);

gchar *_g_dbus_hexdump (const gchar *data, gsize len, guint indent);

/* ---------------------------------------------------------------------------------------------------- */

#ifdef G_OS_WIN32
gchar *_g_dbus_win32_get_user_sid (void);

#define _GDBUS_ARG_WIN32_RUN_SESSION_BUS "_win32_run_session_bus"
/* The g_win32_run_session_bus is exported from libgio dll on win32,
 * but still is NOT part of API/ABI since it is declared in private header
 * and used only by tool built from same sources.
 * Initially this function was introduces for usage with rundll,
 * so the signature is kept rundll-compatible, though parameters aren't used.
 */
_GIO_EXTERN void __stdcall
g_win32_run_session_bus (void* hwnd, void* hinst, const char* cmdline, int cmdshow);
gchar *_g_dbus_win32_get_session_address_dbus_launch (GError **error);
#endif

gchar *_g_dbus_get_machine_id (GError **error);

gchar *_g_dbus_enum_to_string (GType enum_type, gint value);

/* ---------------------------------------------------------------------------------------------------- */

GDBusMethodInvocation *_g_dbus_method_invocation_new (const gchar             *sender,
                                                      const gchar             *object_path,
                                                      const gchar             *interface_name,
                                                      const gchar             *method_name,
                                                      const GDBusMethodInfo   *method_info,
                                                      const GDBusPropertyInfo *property_info,
                                                      GDBusConnection         *connection,
                                                      GDBusMessage            *message,
                                                      GVariant                *parameters,
                                                      gpointer                 user_data);

/* ---------------------------------------------------------------------------------------------------- */

gboolean _g_signal_accumulator_false_handled (GSignalInvocationHint *ihint,
                                              GValue                *return_accu,
                                              const GValue          *handler_return,
                                              gpointer               dummy);

gboolean _g_dbus_object_skeleton_has_authorize_method_handlers (GDBusObjectSkeleton *object);

void _g_dbus_object_proxy_add_interface (GDBusObjectProxy *proxy,
                                         GDBusProxy       *interface_proxy);
void _g_dbus_object_proxy_remove_interface (GDBusObjectProxy *proxy,
                                            const gchar      *interface_name);

gchar *_g_dbus_hexencode (const gchar *str,
                          gsize        str_len);

/* Implemented in gdbusconnection.c */
GDBusConnection *_g_bus_get_singleton_if_exists (GBusType bus_type);
void             _g_bus_forget_singleton        (GBusType bus_type);

G_END_DECLS

#endif /* __G_DBUS_PRIVATE_H__ */