/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2012 Collabora Ltd. * @copyright Copyright (C) 2012 Nokia Corporation * @license LGPL 2.1 * * 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include "TelepathyQt/base-connection-internal.h" #include "TelepathyQt/_gen/base-connection.moc.hpp" #include "TelepathyQt/_gen/base-connection-internal.moc.hpp" #include "TelepathyQt/debug-internal.h" #include #include #include #include #include namespace Tp { struct TP_QT_NO_EXPORT BaseConnection::Private { Private(BaseConnection *parent, const QDBusConnection &dbusConnection, const QString &cmName, const QString &protocolName, const QVariantMap ¶meters) : parent(parent), cmName(cmName), protocolName(protocolName), parameters(parameters), adaptee(new BaseConnection::Adaptee(dbusConnection, parent)) { } BaseConnection *parent; QString cmName; QString protocolName; QVariantMap parameters; BaseConnection::Adaptee *adaptee; }; BaseConnection::Adaptee::Adaptee(const QDBusConnection &dbusConnection, BaseConnection *connection) : QObject(connection), mConnection(connection) { mAdaptor = new Service::ConnectionAdaptor(dbusConnection, this, connection->dbusObject()); } BaseConnection::Adaptee::~Adaptee() { } /** * \class BaseConnection * \ingroup serviceconn * \headerfile TelepathyQt/base-connection.h * * \brief Base class for Connection implementations. */ /** * Construct a BaseConnection. * * \param dbusConnection The D-Bus connection that will be used by this object. * \param cmName The name of the connection manager associated with this connection. * \param protocolName The name of the protocol associated with this connection. * \param parameters The parameters of this connection. */ BaseConnection::BaseConnection(const QDBusConnection &dbusConnection, const QString &cmName, const QString &protocolName, const QVariantMap ¶meters) : DBusService(dbusConnection), mPriv(new Private(this, dbusConnection, cmName, protocolName, parameters)) { } /** * Class destructor. */ BaseConnection::~BaseConnection() { delete mPriv; } /** * Return the name of the connection manager associated with this connection. * * \return The name of the connection manager associated with this connection. */ QString BaseConnection::cmName() const { return mPriv->cmName; } /** * Return the name of the protocol associated with this connection. * * \return The name of the protocol associated with this connection. */ QString BaseConnection::protocolName() const { return mPriv->protocolName; } /** * Return the parameters of this connection. * * \return The parameters of this connection. */ QVariantMap BaseConnection::parameters() const { return mPriv->parameters; } /** * Return the immutable properties of this connection object. * * Immutable properties cannot change after the object has been registered * on the bus with registerObject(). * * \return The immutable properties of this connection object. */ QVariantMap BaseConnection::immutableProperties() const { // FIXME return QVariantMap(); } /** * Return a unique name for this connection. * * \return A unique name for this connection. */ QString BaseConnection::uniqueName() const { return QString(QLatin1String("_%1")).arg((quintptr) this, 0, 16); } /** * Register this connection object on the bus. * * If \a error is passed, any D-Bus error that may occur will * be stored there. * * \param error A pointer to an empty DBusError where any * possible D-Bus error will be stored. * \return \c true on success and \c false if there was an error * or this connection object is already registered. * \sa isRegistered() */ bool BaseConnection::registerObject(DBusError *error) { if (isRegistered()) { return true; } if (checkValidProtocolName(mPriv->protocolName)) { if (error) { error->set(TP_QT_ERROR_INVALID_ARGUMENT, mPriv->protocolName + QLatin1String("is not a valid protocol name")); } debug() << "Unable to register connection - invalid protocol name"; return false; } QString escapedProtocolName = mPriv->protocolName; escapedProtocolName.replace(QLatin1Char('-'), QLatin1Char('_')); QString name = uniqueName(); QString busName = QString(QLatin1String("%1.%2.%3.%4")) .arg(TP_QT_CONNECTION_BUS_NAME_BASE, mPriv->cmName, escapedProtocolName, name); QString objectPath = QString(QLatin1String("%1/%2/%3/%4")) .arg(TP_QT_CONNECTION_OBJECT_PATH_BASE, mPriv->cmName, escapedProtocolName, name); DBusError _error; bool ret = registerObject(busName, objectPath, &_error); if (!ret && error) { error->set(_error.name(), _error.message()); } return ret; } /** * Reimplemented from DBusService. */ bool BaseConnection::registerObject(const QString &busName, const QString &objectPath, DBusError *error) { return DBusService::registerObject(busName, objectPath, error); } /** * \fn void BaseConnection::disconnected() * * Emitted when this connection has been disconnected. */ }