diff options
-rw-r--r-- | ChangeLog | 22 | ||||
-rw-r--r-- | gio/src/filelist.am | 1 | ||||
-rw-r--r-- | gio/src/gio_vfuncs.defs | 36 | ||||
-rw-r--r-- | gio/src/socketcontrolmessage.ccg | 25 | ||||
-rw-r--r-- | gio/src/socketcontrolmessage.hg | 74 | ||||
-rw-r--r-- | gio/src/unixcredentialsmessage.ccg | 26 | ||||
-rw-r--r-- | gio/src/unixcredentialsmessage.hg | 64 | ||||
-rw-r--r-- | gio/src/unixfdmessage.ccg | 34 | ||||
-rw-r--r-- | gio/src/unixfdmessage.hg | 81 | ||||
-rw-r--r-- | tools/extra_defs_gen/generate_defs_gio.cc | 2 | ||||
-rw-r--r-- | tools/m4/convert_gio.m4 | 4 |
11 files changed, 369 insertions, 0 deletions
@@ -1,3 +1,25 @@ +2010-08-05 José Alburquerque <jaalburqu@svn.gnome.org> + + giomm: Add SocketControlMessage, Unix[Credentials|FD]Message classes. + + * gio/src/socketcontrolmessage.{ccg,hg}: + * gio/src/filelist.am: Add SocketControlMessage sources and mention + the .hg file so the sources are built. + * gio/src/gio_vfuncs.defs: Add virtual functions for + GSocketControlMessage. + + * gio/src/unixcredentialsmessage.{ccg,hg}: + * gio/src/unixfdmessage.{ccg,hg}: Add UnixCredentialsMessage and + UnixFDmessage sources but don't mention them because the gio include + paradignm seems to be causing the C functions not to be declared upon + compilation. + * tools/extra_defs_gen/generate_defs_gio.cc: Add the + GUnixCredentialsMessage and the GUnixFDMessage types but commented out + because the types also appear not to be defined because of the gio + include paradigm. + + * tools/m4/convert_gio.m4: Add necessary conversions. + 2.25.3: 2010-07-30 Murray Cumming <murrayc@murrayc.com> diff --git a/gio/src/filelist.am b/gio/src/filelist.am index d3b3e6aa..bc4a57d6 100644 --- a/gio/src/filelist.am +++ b/gio/src/filelist.am @@ -69,6 +69,7 @@ giomm_files_any_hg = \ socketclient.hg \ socketconnectable.hg \ socketconnection.hg \ + socketcontrolmessage.hg \ socketlistener.hg \ socketservice.hg \ srvtarget.hg \ diff --git a/gio/src/gio_vfuncs.defs b/gio/src/gio_vfuncs.defs index d295c10b..a29e2b6c 100644 --- a/gio/src/gio_vfuncs.defs +++ b/gio/src/gio_vfuncs.defs @@ -321,6 +321,42 @@ ) ) +; GSocketControlMessage + +(define-vfunc deserialize + (of-object "GSocketControlMessage") + (return-type "GSocketControlMessage*") + (parameters + '("int" "level") + '("int" "type") + '("gsize" "size") + '("gpointer" "data") + ) +) + +(define-vfunc get_size + (of-object "GSocketControlMessage") + (return-type "gsize") +) + +(define-vfunc get_level + (of-object "GSocketControlMessage") + (return-type "int") +) + +(define-vfunc get_type + (of-object "GSocketControlMessage") + (return-type "int") +) + +(define-vfunc serialize + (of-object "GSocketControlMessage") + (return-type "void") + (parameters + '("gpointer" "data") + ) +) + ; GVolume (define-vfunc get_name diff --git a/gio/src/socketcontrolmessage.ccg b/gio/src/socketcontrolmessage.ccg new file mode 100644 index 00000000..555a34bc --- /dev/null +++ b/gio/src/socketcontrolmessage.ccg @@ -0,0 +1,25 @@ +// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*- + +/* Copyright (C) 2010 The giomm Development Team + * + * 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, write to the Free + * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include <gio/gio.h> + +namespace Gio +{ + +} // namespace Gio diff --git a/gio/src/socketcontrolmessage.hg b/gio/src/socketcontrolmessage.hg new file mode 100644 index 00000000..cc8c0da6 --- /dev/null +++ b/gio/src/socketcontrolmessage.hg @@ -0,0 +1,74 @@ +// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*- + +/* Copyright (C) 2010 The giomm Development Team + * + * 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, write to the Free + * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include <glibmm/object.h> + +_DEFS(giomm,gio) +_PINCLUDE(glibmm/private/object_p.h) + +namespace Gio +{ + +/** SocketControlMessage - A Socket control message. + * A SocketControlMessage is a special-purpose utility message that can be + * sent to or received from a Socket. These types of messages are often + * called "ancillary data". + * + * The message can represent some sort of special instruction to or + * information from the socket or can represent a special kind of transfer to + * the peer (for example, sending a file description over a UNIX socket). + * + * These messages are sent with Gio::Socket::send() and received with + * Gio::Socket::receive(). + * + * To extend the set of control message that can be sent, subclass this class + * and override the get_size, get_level, get_type and serialize methods. + * + * To extend the set of control messages that can be received, subclass this + * class and implement the deserialize method. Also, make sure your class is + * registered with the GType typesystem before calling + * Gio::Socket::receive() to read such a message. + * + * @newin{2,22} + */ +class SocketControlMessage : public Glib::Object +{ + _CLASS_GOBJECT(SocketControlMessage, GSocketControlMessage, G_SOCKET_CONTROL_MESSAGE, Glib::Object, GObject) + +protected: + _CTOR_DEFAULT + +public: + //TODO?: _WRAP_METHOD(static Glib::RefPtr<SocketControlMessage> deserialize(int level, int type, gsize size, gpointer data), g_socket_control_message_deserialize) + _WRAP_METHOD(int get_level() const, g_socket_control_message_get_level) + _WRAP_METHOD(int get_msg_type() const, g_socket_control_message_get_msg_type) + _WRAP_METHOD(gsize get_size() const, g_socket_control_message_get_size) + _WRAP_METHOD(void serialize(gpointer data), g_socket_control_message_serialize) + + // The deserialize vfunc does not have a GSocketControlMessage for its first + // parameter so it is difficult to wrap. + //_WRAP_VFUNC(Glib::RefPtr<SocketControlMessage> deserialize(int level, int type, gsize size, gpointer data), "deserialize") + + _WRAP_VFUNC(gsize get_size() const, "get_size") + _WRAP_VFUNC(int get_level() const, "get_level") + _WRAP_VFUNC(int get_type() const, "get_type") + _WRAP_VFUNC(void serialize(gpointer data), "serialize") +}; + +} // namespace Gio diff --git a/gio/src/unixcredentialsmessage.ccg b/gio/src/unixcredentialsmessage.ccg new file mode 100644 index 00000000..372e8a13 --- /dev/null +++ b/gio/src/unixcredentialsmessage.ccg @@ -0,0 +1,26 @@ +// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*- + +/* Copyright (C) 2010 The giomm Development Team + * + * 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, write to the Free + * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include <gio/gio.h> +#include <giomm/credentials.h> + +namespace Gio +{ + +} // namespace Gio diff --git a/gio/src/unixcredentialsmessage.hg b/gio/src/unixcredentialsmessage.hg new file mode 100644 index 00000000..aee94333 --- /dev/null +++ b/gio/src/unixcredentialsmessage.hg @@ -0,0 +1,64 @@ +// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*- + +/* Copyright (C) 2010 The giomm Development Team + * + * 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, write to the Free + * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include <giomm/socketcontrolmessage.h> + +_DEFS(giomm,gio) +_PINCLUDE(giomm/private/socketcontrolmessage_p.h) + +namespace Gio +{ + +class Credentials; + +/** UnixCredentialsMessage - A SocketControlMessage containing credentials. + * This SocketControlMessage contains a Credentials instance. It may be sent + * using Gio::Socket::send() and received using Gio::Socket::receive() + * over UNIX sockets (ie: sockets in the Gio::SOCKET_FAMILY_UNIX family). + * + * For an easier way to send and receive credentials over stream-oriented UNIX + * sockets, see Gio::UnixConnection::send_credentials() and + * Gio::UnixConnection::receive_credentials(). To receive credentials of a + * foreign process connected to a socket, use Gio::Socket::get_credentials(). + * + * @newin{2,26} + */ +class UnixCredentialsMessage : public SocketControlMessage +{ + _CLASS_GOBJECT(UnixCredentialsMessage, GUnixCredentialsMessage, G_UNIX_CREDENTIALS_MESSAGE, Gio::SocketControlMessage, GSocketControlMessage) + +protected: + _CTOR_DEFAULT + _WRAP_CTOR(UnixCredentialsMessage(const Glib::RefPtr<Credentials>& credentials), g_unix_credentials_message_new_with_credentials) + +public: + _WRAP_METHOD_DOCS_ONLY(g_unix_credentials_message_new) + _WRAP_CREATE() + + _WRAP_METHOD_DOCS_ONLY(g_unix_credentials_message_new_with_credentials) + _WRAP_CREATE(const Glib::RefPtr<Credentials>& credentials) + + _WRAP_METHOD(Glib::RefPtr<Credentials> get_credentials(), g_unix_credentials_message_get_credentials) + _WRAP_METHOD(Glib::RefPtr<const Credentials> get_credentials() const, g_unix_credentials_message_get_credentials, constversion) + _WRAP_METHOD(static bool is_supported(), g_unix_credentials_message_is_supported) + + _WRAP_PROPERTY(Glib::RefPtr<Credentials>, "credentials") +}; + +} // namespace Gio diff --git a/gio/src/unixfdmessage.ccg b/gio/src/unixfdmessage.ccg new file mode 100644 index 00000000..b6a823b7 --- /dev/null +++ b/gio/src/unixfdmessage.ccg @@ -0,0 +1,34 @@ +// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*- + +/* Copyright (C) 2010 The giomm Development Team + * + * 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, write to the Free + * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include <gio/gio.h> +#include <giomm/unixfdlist.h> + +namespace Gio +{ + +Glib::ArrayHandle<int> UnixFDMessage::steal_fds() +{ + int length = 0; + const int* fds = g_unix_fd_message_steal_fds(gobj(), &length); + // (length - 1) is used because the array is terminated with a -1. + return Glib::ArrayHandle<int>(fds, length - 1, Glib::OWNERSHIP_DEEP); +} + +} // namespace Gio diff --git a/gio/src/unixfdmessage.hg b/gio/src/unixfdmessage.hg new file mode 100644 index 00000000..57947fd4 --- /dev/null +++ b/gio/src/unixfdmessage.hg @@ -0,0 +1,81 @@ +// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*- + +/* Copyright (C) 2010 The giomm Development Team + * + * 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, write to the Free + * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include <giomm/socketcontrolmessage.h> + +_DEFS(giomm,gio) +_PINCLUDE(giomm/private/socketcontrolmessage_p.h) + +namespace Gio +{ + +class UnixFDList; + +/** UnixFDMessage — A GSocketControlMessage containing a GUnixFDList. + * This SocketControlMessage contains a UnixFDList. It may be sent using + * Gio::Socket::send() and received using Gio::Socket::receive() over + * UNIX sockets (ie: sockets in the Gio::SOCKET_ADDRESS_UNIX family). The file + * descriptors are copied between processes by the kernel. + * + * For an easier way to send and receive file descriptors over stream-oriented + * UNIX sockets, see Gio::UnixConnection::send_fd() and + * Gio::UnixConnection::receive_fd(). + * + * @newin{2,26} + */ +class UnixFDMessage : public SocketControlMessage +{ + _CLASS_GOBJECT(UnixFDMessage, GUnixFDMessage, G_UNIX_FD_MESSAGE, Gio::SocketControlMessage, GSocketControlMessage) + +protected: + _CTOR_DEFAULT + _WRAP_CTOR(UnixFDMessage(const Glib::RefPtr<UnixFDList>& fd_list), g_unix_fd_message_new_with_fd_list) + +public: + _WRAP_METHOD_DOCS_ONLY(g_unix_fd_message_new) + _WRAP_CREATE() + + _WRAP_METHOD_DOCS_ONLY(g_unix_fd_message_new_with_fd_list) + _WRAP_CREATE(const Glib::RefPtr<UnixFDList>& fd_list) + + _WRAP_METHOD(Glib::RefPtr<UnixFDList> get_fd_list(), g_unix_fd_message_get_fd_list) + _WRAP_METHOD(Glib::RefPtr<const UnixFDList> get_fd_list() const, g_unix_fd_message_get_fd_list, constversion) + + _WRAP_METHOD(bool append_fd(int fd), g_unix_fd_message_append_fd, errthrow) + + + /** Returns the array of file descriptors that is contained in this object. + * + * After this call, the descriptors are no longer contained in message. + * Further calls will return an empty list (unless more descriptors have + * been added). + * + * The caller is responsible for closing all of the file descriptors. + * + * @return An array of file descriptors. + * + * @newin{2,22} + */ + Glib::ArrayHandle<int> steal_fds(); + _IGNORE(g_unix_fd_message_steal_fds) + + _WRAP_PROPERTY(Glib::RefPtr<UnixFDList>, "fd-list") +}; + +} // namespace Gio diff --git a/tools/extra_defs_gen/generate_defs_gio.cc b/tools/extra_defs_gen/generate_defs_gio.cc index 4678f4bd..a468d564 100644 --- a/tools/extra_defs_gen/generate_defs_gio.cc +++ b/tools/extra_defs_gen/generate_defs_gio.cc @@ -56,6 +56,8 @@ int main(int, char**) << get_defs(G_TYPE_FILTER_OUTPUT_STREAM) #ifndef G_OS_WIN32 + // << get_defs(G_TYPE_UNIX_CREDENTIALS_MESSAGE) + // << get_defs(G_TYPE_UNIX_FD_MESSAGE) << get_defs(G_TYPE_UNIX_INPUT_STREAM) << get_defs(G_TYPE_UNIX_OUTPUT_STREAM) #endif diff --git a/tools/m4/convert_gio.m4 b/tools/m4/convert_gio.m4 index 2b8d0bb2..e1197ce1 100644 --- a/tools/m4/convert_gio.m4 +++ b/tools/m4/convert_gio.m4 @@ -56,6 +56,7 @@ _CONVERSION(`GCancellable*', `Glib::RefPtr<Cancellable>', `Glib::wrap($3)') _CONVERSION(`GCancellable*', `const Glib::RefPtr<Cancellable>&', `Glib::wrap($3)') # Credentials +_CONVERSION(`const Glib::RefPtr<Credentials>&',`GCredentials*',__CONVERT_CONST_REFPTR_TO_P_SUN(Gio::Credentials)) _CONVERSION(`const Glib::RefPtr<const Credentials>&',`GCredentials*',__CONVERT_CONST_REFPTR_TO_P_SUN(Gio::Credentials)) _CONVERSION(`GCredentials*',`Glib::RefPtr<Credentials>',`Glib::wrap($3)') _CONVERSION(`GCredentials*',`Glib::RefPtr<const Credentials>',`Glib::wrap($3)') @@ -182,6 +183,9 @@ _CONVERSION(`GSocketConnection*',`Glib::RefPtr<SocketConnection>',`Glib::wrap($3 _CONVERSION(`GSocketConnection*',`const Glib::RefPtr<SocketConnection>&',`Glib::wrap($3)') _CONVERSION(`const Glib::RefPtr<SocketConnection>&',`GSocketConnection*',__CONVERT_CONST_REFPTR_TO_P) +#SocketControlMessage +_CONVERSION(`GSocketControlMessage*',`Glib::RefPtr<SocketControlMessage>',`Glib::wrap($3)') + #UnixFDList _CONVERSION(`GUnixFDList*',`Glib::RefPtr<UnixFDList>',`Glib::wrap($3)') _CONVERSION(`const Glib::RefPtr<UnixFDList>&',`GUnixFDList*',`Glib::unwrap($3)') |