-/* -*- mode: C; c-file-style: "gnu" -*- */
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/* dbus-transport-protected.h Used by subclasses of DBusTransport object (internal to D-Bus implementation)
*
* Copyright (C) 2002, 2004 Red Hat Inc.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
*/
#ifndef DBUS_TRANSPORT_PROTECTED_H
/**< Outstanding messages counter changed */
dbus_bool_t (* get_socket_fd) (DBusTransport *transport,
- int *fd_p);
+ DBusSocket *fd_p);
/**< Get socket file descriptor */
};
+typedef dbus_bool_t (*DBusTransportGetUnixUserFunction) (DBusTransport *transport,
+ unsigned long *uid);
+typedef dbus_bool_t (*DBusTransportGetUnixPIDFunction) (DBusTransport *transport,
+ unsigned long *uid);
+typedef DBusMessage * (*DBusTransportSendSyncCallFunction) (DBusTransport *transport,
+ DBusMessage *message);
+typedef dbus_bool_t (*DBusTransportAssureProtocolFunction) (DBusMessage **message);
/**
* Object representing a transport such as a socket.
* A transport can shuttle messages from point A to point B,
DBusCredentials *credentials; /**< Credentials of other end read from the socket */
long max_live_messages_size; /**< Max total size of received messages. */
+ long max_live_messages_unix_fds; /**< Max total unix fds of received messages. */
- DBusCounter *live_messages_size; /**< Counter for size of all live messages. */
-
+ DBusCounter *live_messages; /**< Counter for size/unix fds of all live messages. */
char *address; /**< Address of the server we are connecting to (#NULL for the server side of a transport) */
void *unix_user_data; /**< Data for unix_user_function */
DBusFreeFunction free_unix_user_data; /**< Function to free unix_user_data */
+
+ DBusAllowWindowsUserFunction windows_user_function; /**< Function for checking whether a user is authorized. */
+ void *windows_user_data; /**< Data for windows_user_function */
+
+ DBusFreeFunction free_windows_user_data; /**< Function to free windows_user_data */
+
+ DBusTransportGetUnixUserFunction get_unix_user_function; /**< Function for getting Unix user ID */
+ DBusTransportGetUnixPIDFunction get_unix_process_id_function; /**< Function for getting Unix process ID */
+ DBusTransportAssureProtocolFunction assure_protocol_function; /**< Function for converting messages, if needed */
+ DBusTransportSendSyncCallFunction send_sync_call_function; /**< Function for sending synchronous calls */
+ int protocol; /**< type of protocol for this transport */
unsigned int disconnected : 1; /**< #TRUE if we are disconnected. */
- unsigned int authenticated : 1; /**< Cache of auth state; use _dbus_transport_get_is_authenticated() to query value */
+ unsigned int authenticated : 1; /**< Cache of auth state; use _dbus_transport_peek_is_authenticated() to query value */
unsigned int send_credentials_pending : 1; /**< #TRUE if we need to send credentials */
unsigned int receive_credentials_pending : 1; /**< #TRUE if we need to receive credentials */
unsigned int is_server : 1; /**< #TRUE if on the server side */
unsigned int unused_bytes_recovered : 1; /**< #TRUE if we've recovered unused bytes from auth */
+ unsigned int allow_anonymous : 1; /**< #TRUE if an anonymous client can connect */
+ unsigned int overflowed : 1; /**< #TRUE if last write didn't write all the data */
};
dbus_bool_t _dbus_transport_init_base (DBusTransport *transport,
const DBusTransportVTable *vtable,
const DBusString *server_guid,
const DBusString *address);
+dbus_bool_t _dbus_transport_init_base_authenticated (DBusTransport *transport,
+ const DBusTransportVTable *vtable,
+ const DBusString *server_guid,
+ const DBusString *address);
void _dbus_transport_finalize_base (DBusTransport *transport);
+void _dbus_transport_set_get_unix_user_function (DBusTransport *transport,
+ DBusTransportGetUnixUserFunction function);
+void _dbus_transport_set_get_unix_process_id_function (DBusTransport *transport,
+ DBusTransportGetUnixPIDFunction function);
+void _dbus_transport_set_send_sync_call_function (DBusTransport *transport,
+ DBusTransportSendSyncCallFunction function);
+void _dbus_transport_set_assure_protocol_function (DBusTransport *transport,
+ DBusTransportAssureProtocolFunction function,
+ int protocol);
+int _dbus_transport_get_protocol (DBusTransport *transport);
typedef enum
{
DBusTransport **transport_p,
DBusError *error);
+#define DBUS_TRANSPORT_CAN_SEND_UNIX_FD(x) \
+ _dbus_auth_get_unix_fd_negotiated((x)->auth)
+
DBUS_END_DECLS
#endif /* DBUS_TRANSPORT_PROTECTED_H */