+2007-06-18 Havoc Pennington <hp@redhat.com>
+
+ * dbus/dbus-watch.c (dbus_watch_get_socket)
+ (dbus_watch_get_unix_fd): new API to match DBusConnection
+ (dbus_watch_get_fd): deprecate this
+
+ Throughout: just s/dbus_watch_get_fd/dbus_watch_get_socket/g for
+ now since all the transports use sockets anyway
+
2007-06-16 Ralf Habacker <ralf.habacker@freenet.de>
* dbus/dbus-macros.h, dbus/dbus-message.c,
* dbus_watch_get_enabled() every time anyway.
*
* The DBusWatch can be queried for the file descriptor to watch using
- * dbus_watch_get_fd(), and for the events to watch for using
- * dbus_watch_get_flags(). The flags returned by
- * dbus_watch_get_flags() will only contain DBUS_WATCH_READABLE and
- * DBUS_WATCH_WRITABLE, never DBUS_WATCH_HANGUP or DBUS_WATCH_ERROR;
- * all watches implicitly include a watch for hangups, errors, and
- * other exceptional conditions.
+ * dbus_watch_get_unix_fd() or dbus_watch_get_socket(), and for the
+ * events to watch for using dbus_watch_get_flags(). The flags
+ * returned by dbus_watch_get_flags() will only contain
+ * DBUS_WATCH_READABLE and DBUS_WATCH_WRITABLE, never
+ * DBUS_WATCH_HANGUP or DBUS_WATCH_ERROR; all watches implicitly
+ * include a watch for hangups, errors, and other exceptional
+ * conditions.
*
* Once a file descriptor becomes readable or writable, or an exception
* occurs, dbus_watch_handle() should be called to
* example. DO NOT read or write to the file descriptor, or try to
* select() on it; use DBusWatch for main loop integration. Not all
* connections will have a file descriptor. So for adding descriptors
- * to the main loop, use dbus_watch_get_fd() and so forth.
+ * to the main loop, use dbus_watch_get_unix_fd() and so forth.
*
* If the connection is socket-based, you can also use
* dbus_connection_get_socket(), which will work on Windows too.
* of the connection, if any. DO NOT read or write to the file descriptor, or try to
* select() on it; use DBusWatch for main loop integration. Not all
* connections will have a socket. So for adding descriptors
- * to the main loop, use dbus_watch_get_fd() and so forth.
+ * to the main loop, use dbus_watch_get_socket() and so forth.
*
* If the connection is not socket-based, this function will return FALSE,
* even if the connection does have a file descriptor of some kind.
* @{
*/
-int dbus_watch_get_fd (DBusWatch *watch);
+#ifndef DBUS_DISABLE_DEPRECATED
+DBUS_DEPRECATED int dbus_watch_get_fd (DBusWatch *watch);
+#endif
+
+int dbus_watch_get_unix_fd (DBusWatch *watch);
+int dbus_watch_get_socket (DBusWatch *watch);
unsigned int dbus_watch_get_flags (DBusWatch *watch);
void* dbus_watch_get_data (DBusWatch *watch);
void dbus_watch_set_data (DBusWatch *watch,
#if MAINLOOP_SPEW
_dbus_verbose (" skipping watch on fd %d as it was out of memory last time\n",
- dbus_watch_get_fd (wcb->watch));
+ dbus_watch_get_socket (wcb->watch));
#endif
}
else if (dbus_watch_get_enabled (wcb->watch))
flags = dbus_watch_get_flags (wcb->watch);
- fds[n_fds].fd = dbus_watch_get_fd (wcb->watch);
+ fds[n_fds].fd = dbus_watch_get_socket (wcb->watch);
fds[n_fds].revents = 0;
fds[n_fds].events = 0;
if (flags & DBUS_WATCH_READABLE)
{
#if MAINLOOP_SPEW
_dbus_verbose (" skipping disabled watch on fd %d %s\n",
- dbus_watch_get_fd (wcb->watch),
+ dbus_watch_get_socket (wcb->watch),
watch_flags_to_string (dbus_watch_get_flags (wcb->watch)));
#endif
}
int client_fd;
int listen_fd;
- listen_fd = dbus_watch_get_fd (watch);
+ listen_fd = dbus_watch_get_socket (watch);
client_fd = _dbus_accept (listen_fd);
if (condition & DBUS_WATCH_HANGUP)
revents |= _DBUS_POLLHUP;
- fd = dbus_watch_get_fd (watch);
+ fd = dbus_watch_get_socket (watch);
if (fd == sitter->error_pipe_from_child)
handle_error_pipe (sitter, revents);
flags);
else
_dbus_verbose ("asked to handle watch %p on fd %d that we don't recognize\n",
- watch, dbus_watch_get_fd (watch));
+ watch, dbus_watch_get_socket (watch));
}
#endif /* DBUS_ENABLE_VERBOSE_MODE */
if (transport->disconnected)
return TRUE;
- if (dbus_watch_get_fd (watch) < 0)
+ if (dbus_watch_get_socket (watch) < 0)
{
_dbus_warn_check_failed ("Tried to handle an invalidated watch; this watch should have been removed\n");
return TRUE;
_dbus_verbose ("Adding a %s watch on fd %d using newly-set add watch function\n",
watch_type,
- dbus_watch_get_fd (link->data));
+ dbus_watch_get_socket (link->data));
}
#endif /* DBUS_ENABLE_VERBOSE_MODE */
link2);
_dbus_verbose ("Removing watch on fd %d using newly-set remove function because initial add failed\n",
- dbus_watch_get_fd (link2->data));
+ dbus_watch_get_socket (link2->data));
(* remove_function) (link2->data, data);
if (watch_list->add_watch_function != NULL)
{
_dbus_verbose ("Adding watch on fd %d\n",
- dbus_watch_get_fd (watch));
+ dbus_watch_get_socket (watch));
if (!(* watch_list->add_watch_function) (watch,
watch_list->watch_data))
if (watch_list->remove_watch_function != NULL)
{
_dbus_verbose ("Removing watch on fd %d\n",
- dbus_watch_get_fd (watch));
+ dbus_watch_get_socket (watch));
(* watch_list->remove_watch_function) (watch,
watch_list->watch_data);
if (watch_list->watch_toggled_function != NULL)
{
_dbus_verbose ("Toggling watch %p on fd %d to %d\n",
- watch, dbus_watch_get_fd (watch), watch->enabled);
+ watch, dbus_watch_get_socket (watch), watch->enabled);
(* watch_list->watch_toggled_function) (watch,
watch_list->watch_data);
*/
/**
- * Gets the file descriptor that should be watched.
- *
- * On Windows, this will be a socket. On UNIX right now it will be a
- * socket but in principle it could be something else.
+ * Deprecated former name of dbus_watch_get_unix_fd().
*
* @param watch the DBusWatch object.
* @returns the file descriptor to watch.
int
dbus_watch_get_fd (DBusWatch *watch)
{
+ return dbus_watch_get_unix_fd (watch);
+}
+
+/**
+ * Returns a UNIX file descriptor to be watched,
+ * which may be a pipe, socket, or other type of
+ * descriptor. On UNIX this is preferred to
+ * dbus_watch_get_socket() since it works with
+ * more kinds of #DBusWatch.
+ *
+ * Always returns -1 on Windows. On Windows you use
+ * dbus_watch_get_socket() to get a Winsock socket to watch.
+ *
+ * @param watch the DBusWatch object.
+ * @returns the file descriptor to watch.
+ */
+int
+dbus_watch_get_unix_fd (DBusWatch *watch)
+{
+ /* FIXME remove #ifdef and do this on a lower level
+ * (watch should have set_socket and set_unix_fd and track
+ * which it has, and the transport should provide the
+ * appropriate watch type)
+ */
+#ifdef DBUS_UNIX
+ return watch->fd;
+#else
+ return -1;
+#endif
+}
+
+/**
+ * Returns a socket to be watched, on UNIX this will return -1 if our
+ * transport is not socket-based so dbus_watch_get_unix_fd() is
+ * preferred.
+ *
+ * On Windows, dbus_watch_get_unix_fd() returns -1 but this function
+ * returns a Winsock socket (assuming the transport is socket-based,
+ * as it always is for now).
+ *
+ * @param watch the DBusWatch object.
+ * @returns the socket to watch.
+ */
+int
+dbus_watch_get_socket (DBusWatch *watch)
+{
return watch->fd;
}
DBusFreeFunction free_data_function)
{
_dbus_verbose ("Setting watch fd %d data to data = %p function = %p from data = %p function = %p\n",
- dbus_watch_get_fd (watch),
+ dbus_watch_get_socket (watch),
data, free_data_function, watch->data, watch->free_data_function);
if (watch->free_data_function != NULL)