diff options
author | Michele Calgaro <michele.calgaro@yahoo.it> | 2019-04-27 00:21:43 +0900 |
---|---|---|
committer | Michele Calgaro <michele.calgaro@yahoo.it> | 2019-04-27 00:21:43 +0900 |
commit | f9c9e15267bd0319a8190ba146d7be95c37dac2e (patch) | |
tree | 1180022eddef0ffc8f44b030e721b6efef4f8b2a /tqdbusconnection.h | |
parent | 7d3c2ed4e8cdf9292059a4fc8f3678ca9d1d7c5c (diff) | |
download | dbus-1-tqt-f9c9e15267bd0319a8190ba146d7be95c37dac2e.tar.gz dbus-1-tqt-f9c9e15267bd0319a8190ba146d7be95c37dac2e.zip |
Moved source files to "src" folder.
Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it>
Diffstat (limited to 'tqdbusconnection.h')
-rw-r--r-- | tqdbusconnection.h | 663 |
1 files changed, 0 insertions, 663 deletions
diff --git a/tqdbusconnection.h b/tqdbusconnection.h deleted file mode 100644 index 9fde84b..0000000 --- a/tqdbusconnection.h +++ /dev/null @@ -1,663 +0,0 @@ -/* qdbusconnection.h TQT_DBusConnection object - * - * Copyright (C) 2005 Harald Fernengel <harry@kdevelop.org> - * Copyright (C) 2005-2007 Kevin Krammer <kevin.krammer@gmx.at> - * - * Licensed under the Academic Free License version 2.1 - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program 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 General Public License for more details. - * - * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, - * USA. - * - */ - -#ifndef TQDBUSCONNECTION_H -#define TQDBUSCONNECTION_H - -/** - * @mainpage TQt3 Bindings for D-Bus - * - * D-Bus is an IPC (inter process communication) technology designed to allow - * applications to interoperate without requiring tight coupling. - * - * For more information about D-Bus itself see its website: - * http://www.freedesktop.org/wiki/Software_2fdbus - * - * The TQt3 D-Bus bindings described here are a TQt3 style API around the base - * implementation to enable TQt3 developers to use D-Bus in their applications - * without requiring them to know about the details of the C based D-Bus API. - * - * The two main use cases are: - * - using the API to access service implemented in other applications. - * See section @ref dbusclient for an introduction on this - * - * - using the API to provide access to services implemented in your application - * See section @ref dbusservice for an introduction on this - * - * Of course an application can do both at the same time. - */ - -/** - * @page dbusconventions Naming and syntax conventions in D-Bus - * - * @section dbusconventions-servicename Service names - * - * The service name is D-Bus application identifier, i.e. either - * the unique name handed out to the peer application by the bus on connect - * (see TQT_DBusConnection::uniqueName()) or, more likely, a well known name the - * peer application has requested, see TQT_DBusConnection::requestName() - * - * Such well known names have the form of word separated by dots, like - * Internet domain names but in reverse order. - * - * For example the name for the bus itself (the D-Bus daemon) would be - * @code - * "org.freedesktop.DBus" - * @endcode - * - * @section dbusconventions-objectpath Object paths - * - * The object path is like an address within the peer host application. - * The path format looks like a Unix file path, i.e. words separated by - * slash @c '/' characters. - * - * For example the path for the bus itself (the D-Bus daemon's main object) - * would be - * @code - * "/org/freedesktop/DBus" - * @endcode - * - * @section dbusconventions-interfacename Interface names - * - * The interface name specifies which group of methods and signals - * implemented by the peer service object is used in proxy operations. - * - * Interface names have the form of word separated by dots, like Internet - * domain names but in reverse order or like a fully qualified Java class name. - * - * For example the interface for the bus itself (the D-Bus daemon's main - * interface) would be - * @code - * "org.freedesktop.DBus" - * @endcode - * - * @section dbusconventions-errorname Error names - * - * A D-Bus error name is a sequence of words separated by dots, similar - * to D-Bus service names or interface names, or like a fully qualified - * Java class name. - * - * For example if a D-Bus service does not handle a method invocation sent - * to it because it doesn't know about the method it will return a D-Bus - * error named - * @code - * "org.freedesktop.DBus.Error.UnknownMethod" - * @endcode - * TQT_DBusError can create some of the more common errors based on a type value - * and decode their names into the type respectively. See TQT_DBusError#ErrorType - * - * @section dbusconventions-membername Method and signal names - * - * There is no mandatory convention for member names, neither for methods nor - * for signals. - * - * However, using the standard interfaces of D-Bus as a hint, it is recommended - * to use "camel case" names starting with an uppercase letter, for example - * @code - * "GetConnectionUnixUser" - * @endcode - */ - -#include "tqdbusmacros.h" -#include <tqstring.h> - -class TQT_DBusConnectionPrivate; -class TQT_DBusError; -class TQT_DBusMessage; -class TQT_DBusObjectBase; -class TQObject; - -/** - * @brief Provides access to a specific D-Bus bus - * - * In order to access a D-Bus message bus an application has to connect to it. - * This is very similar to connecting to an FTP server using TQFtp, where any - * number of commands can be sent in sequence over the same connection. - * - * Additionally to the asynchronous command execution provided by TQFtp a - * TQT_DBusConnection can also execute synchronous (blocking) calls so the - * code around those calls stays closer to in-process method incovations. - * - * However it is recommended to only perform blocking calls on D-Bus service - * methods that are likely to be processed fast. - * - * TQT_DBusConnection implements a shared resource, i.e. if you create a - * connection with a specific name in one part of your code and then - * create one with the same name somewhere else, the second creation will - * actually return the same shared connection object the first caller created. - * - * The application can be connected to more than one message bus simultaniously - * using one or more connections per bus, however the most common case is to - * have one connection per bus. - * - * The two main bus types are: - * - System bus: a bus connecting applications on one system across user - * or session boundaries, for example allowing to communicate - * with system services like printer spoolers, etc - * - * - Session bus: a bus connecting applications within one user session, for - * example started at login or by a session manager. Use cases - * or this kind of bus would be accessing user specific - * resources like addressbooks, retrieving user settings or - * controlling session services (e.g. disabling screensaver - * in a video player application during playback) - * - * While TQT_DBusConnection provides the basic API to access D-Bus services - * it is more convenient to use TQT_DBusProxy on top of the connection. - * - * See sections @ref dbusclient and @ref dbusservice for examples - */ -class TQDBUS_EXPORT TQT_DBusConnection -{ -public: - /** - * DBus bus types - */ - enum BusType - { - /** - * The session bus is a user and user session specific message - * channel. It will usually be started by a login script or a - * session manager. - */ - SessionBus, - - /** - * The system bus is a message channel bridging user level and - * system level process boundaries, e.g. it can allow a user process - * with normal user access restrictions to perform a limited subset - * of operations on a process running with elevated rights. - * - * @warning if an applications exposed services on the system bus, i.e. - * registers objects using registerObject(), it should be - * carefully examined on potential security issues - */ - SystemBus, - - // TODO find out about ActivationBus purpose - ActivationBus - }; - - /** - * @brief Creates an empty/disconnected connection handle - * - * This is mainly used for initializing variables of this type, i.e. like - * the default TQString constructor. - * - * A variable set to such an empty connection can be assigned a working - * connection at any time. - */ - TQT_DBusConnection(); - - /** - * @brief Creates a connection handle to a named connection - * - * This will result in an disconnected connection handle if no - * connection with that name has been created by addConnection before. - * - * Therefore it is recommended to use addConnection() instead to get a - * connection handle. - * - * @param name identifier of the shared connection object - */ - TQT_DBusConnection(const TQString &name); - - /** - * @brief Creates a shallow copy of the given connection - * - * Allows to pass connection handles around by value, similar to TQString - * thus avoiding problems like dangling pointers in application code - * - * @param other the connection to copy from - */ - TQT_DBusConnection(const TQT_DBusConnection &other); - - /** - * @brief Destroys the connection handle - * - * If this handle is the last one referencing the shared connection object - * it will delete it, disconnecting it from any objects it was - * collaborating with - */ - ~TQT_DBusConnection(); - - /** - * @brief Creates a shallow copy of the given connection - * - * Allows to pass connection handles around by value, similar to TQString - * thus avoiding problems like dangling pointers in application code - * - * @param other the connection to copy from - * - * @return a reference to this instance as required by assigment operator - * semantics - */ - TQT_DBusConnection &operator=(const TQT_DBusConnection &other); - - /** - * @brief Returns whether the connection is connected to a bus - * - * @return @c true if the connection can be used, @c false if the handle - * does not have access to a shared connection object or if the - * connection to the bus could not be established or broke - */ - bool isConnected() const; - - /** - * @brief Returns the last error seen by the connection - * - * This can be a connection error, e.g. attempt to connect failed, or a - * transmission error or an error reported by a method call - * - * @return the last error seen by the connection - */ - TQT_DBusError lastError() const; - - /** - * @brief Flags for controlling the behavior name collision handling - * - * @see requestName() - */ - enum NameRequestMode - { - /** - * Do not allow others to take over a name requested by this - * application - */ - NoReplace = 0, - - /** - * Allow other applications that request the same name to get it, - * i.e. allow the bus to transfer the name from this application - * to the one requesting it - */ - AllowReplace = 1, - - /** - * Try to get the name transferred from the current owner to this - * application. This will only work if the other application as - * requested the name using the AllowReplace flag - */ - ReplaceExisting = 2 - }; - - /** - * @brief Requests to be addressable on the bus by a given name - * - * Each connection to a bus gets a unique name once the connection is - * established. This is similar to getting an IP address when connecting - * to the Internet. - * - * If an application's purpose is to provide services to other applications - * the other applications require to know how to address the service - * provider. Similar to a domain name on the Internet D-Bus allows to - * register names on the bus and be addressed through those names instead - * of the connection identifier. - * - * @note this is not required if the application only needs to acccess - * services or only implements generic service APIs - * - * If more than one application request the same name, D-Bus will try - * to resolve this conflict as good as possible. - * The #NameRequestMode flags allow to control how an application prefers - * to be treated in such a conflict. - * - * @param name the name the connection should be addressable with. See - * section @ref dbusconventions-servicename - * @param modeFlags an OR'ed combination of #NameRequestMode flags - * - * @return @c true if the name request was successfull, @c false if - * the connection is not connected to a bus or the name is already - * taken and cannot be tranferred - * - * @see uniqueName() - */ - bool requestName(const TQString &name, int modeFlags = NoReplace); - - /** - * @brief Returns the connection identifier assigned at connect - * - * The unique name is the connection address or identifier the bus assigned - * to this connection when it got established. - * - * @return the connection's unique bus identifier - * - * @see requestName() - */ - TQString uniqueName() const; - - /** - * @brief Sends a message over the bus - * - * Sends a message composed through the TQT_DBusMessage API to the bus. - * This is the main method for service objects (see TQT_DBusObjectBase) to - * send replies and errors for method calls they accepted or for sending - * D-Bus signals. - * - * @note for doing method calls it is more convenient to use TQT_DBusProxy, - * see TQT_DBusProxy::send() - * - * @param message the message to send - * - * @return @c true if sending succeeded, @c false if the connection is not - * connected, if the message lacks information about the recepient - * or if sending fails a at a lower level in the communication - * stack - * - * @see lastError() - */ - bool send(const TQT_DBusMessage &message) const; - - /** - * @brief Sends a message over the bus and waits for the reply - * - * Sends a message composed through the TQT_DBusMessage API to the bus. - * It then blocks and waits until the associated reply is received. - * Any message received in between is stored and can be processed - * by calling dispatch() or scheduleDispatch() - * - * @note for doing method calls it is more convenient to use TQT_DBusProxy, - * see TQT_DBusProxy::sendWithReply() - * - * @param message the message to send - * @param error an optional parameter to directly get any error that might - * occur during processing of the call - * - * @return a message containing either the call's reply or an invalid - * message in case the call failed - * - * @see lastError() - */ - TQT_DBusMessage sendWithReply(const TQT_DBusMessage &message, TQT_DBusError *error = 0) const; - - /** - * @brief Sends a message over the bus, specifying a receiver object for - * replies - * - * Sends a message composed through the TQT_DBusMessage API to the bus and - * returns an identifier number to associate with the reply once it is - * received by the given receiver. - * See TQT_DBusMessage::replySerialNumber() - * - * The required slot signature is - * @code - * void slotname(const TQT_DBusMessage&); - * @endcode - * - * @note for doing method calls it is more convenient to use TQT_DBusProxy, - * see TQT_DBusProxy::sendWithAsyncReply() - * - * @param message the message to send - * @param receiver the TQObject to relay the reply to - * @param slot the slot to invoke for the reply - * - * @return a numeric identifier for association with the reply or @c 0 if - * sending failed - * - * @see lastError() - */ - int sendWithAsyncReply(const TQT_DBusMessage &message, TQObject *receiver, - const char *slot) const; - - /** - * @brief Flushes buffered outgoing message - * - * Attempts to send all enqueued outgoing messages before returning. - */ - void flush() const; - - /** - * @brief Processes buffered inbound messages - * - * Attempts to process all enqueued inbound messages, e.g. replies to - * method calls or received signals. - * - * @warning dispatching message can result in TQt signals being emitted - * before this method returns. In case you just want to make sure - * no inbound message is forgotten, call scheduleDispatch() which - * will execute the dispatch delayed through the event loop. - */ - void dispatch() const; - - /** - * @brief Request a delayed check for inbound buffer processing - * - * Similar to dispatch() but delayed by a single shot timer to ensure - * the method has returned before the processing is started. - * - * If a asynchronous method call is followed by a synchronous call without - * returning to the event loop in between, a call to scheduleDispatch() - * ensures that a pending reply to the asynchronous call is processed - * as soon as possible - */ - void scheduleDispatch() const; - - /** - * @brief Connects an object to receive D-Bus signals - * - * This provides a basic access to all D-Bus signals received on this - * connection. - * For every D-Bus signal processed by the connection object a TQt signal - * is emitted and thus delivered to all receiver objects connected - * through this method. - * - * The required slot signature is - * @code - * void slotname(const TQT_DBusMessage&); - * @endcode - * - * so a suitable receiver could look like this - * @code - * class DBusSignalReceiver : public TQObject - * { - * Q_OBJECT - * - * public slots: - * void dbusSignal(const TQT_DBusMessage&); - * }; - * @endcode - * - * and would be connected like this - * @code - * // assuming the following variables - * TQT_DBusConnection connection; - * DBusSignalReceiver* receiver; - * - * connection.connect(receiver, TQT_SLOT(dbusSignal(const TQT_DBusMessage&))); - * @endcode - * - * See TQT_DBusProxy::dbusSignal() for a more obvious way of connecting slots. - * - * @param object the receiver object - * @param slot the receiver slot (or signal for signal->signal connections) - * - * @return @c true if the connection was successfull, otherwise @c false - * - * @see disconnect() - */ - bool connect(TQObject* object, const char* slot); - - /** - * @brief Disconnects a given receiver from the D-Bus signal handling - * - * @param object the receiver object to disconnect from - * @param slot the receiver slot (or signal for signal->signal connections) - * - * @return @c true if the disconnect was successfull, otherwise @c false - * - * @see connect() - */ - bool disconnect(TQObject* object, const char* slot); - - /** - * @brief Registers a service object for a given path - * - * In order to receive method calls over the D-Bus connection the service - * objects path within its host application has to be registered with the - * connection. See section @ref dbusconventions-objectpath for details. - * - * Only one objects can be registered for a single object path, i.e. - * the path -> object mapping is unambiguous, similar to mapping of - * filesystem paths to files. - * - * If a service object offers more than one interface it is up to the - * service implementation if all are implemented in the object path to this - * method or if the passed object is just another demultiplexer which - * relays the message to the interface implementor. - * - * @param path the object path to register the object for - * @param object the service implementation object for that path - * - * @return @c true if the given object is now registered for the given path - * or @c false if path is empty, object is null or another object - * is already registered for this path - * - * @see unregisterObject() - */ - bool registerObject(const TQString& path, TQT_DBusObjectBase* object); - - /** - * @brief Unregister a service object on a given path - * - * Removes any mapping of object path to service object previously - * registered by registerObject(). - * See section @ref dbusconventions-objectpath for details. - * - * @warning always(!) unregister a service object before deleting it - * - * @param path the object path of the object to unregister - * - * @see registerObject() - */ - void unregisterObject(const TQString &path); - - /** - * @brief Gets a connection to the session bus - * - * Convenience overload for creating the default shared connection to the - * D-Bus session bus. - * - * Equivalent to calling addConnection(SessionBus); - * - * @return a connection handle. Check isConnected() to find out if the - * connection attempt has been successfull - * - * @see addConnection(BusType,const TQString&); - */ - static TQT_DBusConnection sessionBus(); - - /** - * @brief Gets a connection to the system bus - * - * Convenience overload for creating the default shared connection to the - * D-Bus system bus. - * - * Equivalent to calling addConnection(SystemBus); - * - * @return a connection handle. Check isConnected() to find out if the - * connection attempt has been successfull - * - * @see addConnection(BusType,const TQString&); - */ - static TQT_DBusConnection systemBus(); - - /** - * @brief Add a connection to a bus with a specific bus type - * - * This is a factory method as it will create a connection for the given - * name if its not available yet, but return a previously created - * connection for that name if available. - * - * Depending on the #BusType the D-Bus library will connect to the address - * configured for that type, so this is the recommended way to create - * connection to D-Bus. - * - * @code - * // Associate the default connection name with a connection to the user's - * // session bus - * TQT_DBusConnection con = TQT_DBusConnection::addConnection(TQT_DBusConnection::SessionBus); - * - * // check if we are connected and which uniqueName we got - * if (con.isConnected()) - * { - * tqDebug("Connected to session bus. We got uniqueName %s", - * con.uniqueName().local8Bit().data()); - * } - * @endcode - * For the common use cases see also sessionBus() and systemBus() - * - * @param type the #BusType of the bus to connect to - * @param name the name to use for TQT_DBusConnection's connection sharing - * - * @return a connection handle. Check isConnected() to find out if the - * connection attempt has been successfull - * - * @see closeConnection() - */ - static TQT_DBusConnection addConnection(BusType type, - const TQString &name = default_connection_name); - - /** - * @brief Add a connection to a bus at a specific address - * - * This is a factory method as it will create a connection for the given - * name if its not available yet, but return a previously created - * connection for that name if available. - * - * @note this requires to know the address of a D-Bus daemon to connect to - * - * @param address the address of the D-Bus daemon. Usually a Unix domain - * socket address - * @param name the name to use for TQT_DBusConnection's connection sharing - * - * @return a connection handle. Check isConnected() to find out if the - * connection attempt has been successfull - * - * @see closeConnection() - */ - static TQT_DBusConnection addConnection(const TQString &address, - const TQString &name = default_connection_name); - - // TODO check why this doesn't close the D-Bus connection - /** - * @brief Closes a connection with a given name - * - * Removes the name from the pool of shared connections, i.e. a call to - * addConnection() with the same name afterwards will create a new - * connection. - * - * @param name the connection name as used in addConnection() - */ - static void closeConnection(const TQString &name = default_connection_name); - - /** - * String used as the default parameter for connection names - */ - QT_STATIC_CONST char *default_connection_name; - -private: - TQT_DBusConnectionPrivate *d; -}; - -#endif |