/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @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 */ #ifndef _TelepathyQt_outgoing_stream_tube_channel_internal_h_HEADER_GUARD_ #define _TelepathyQt_outgoing_stream_tube_channel_internal_h_HEADER_GUARD_ #include #include namespace Tp { class PendingVoid; class TP_QT_NO_EXPORT PendingOpenTube : public PendingOperation { Q_OBJECT Q_DISABLE_COPY(PendingOpenTube) public: PendingOpenTube(PendingVoid *offerOperation, const QVariantMap ¶meters, const OutgoingStreamTubeChannelPtr &object); ~PendingOpenTube() override; private Q_SLOTS: void onTubeStateChanged(Tp::TubeChannelState state); void onOfferFinished(Tp::PendingOperation *operation); private: struct Private; friend struct Private; Private *mPriv; }; class TP_QT_NO_EXPORT QueuedContactFactory : public QObject { Q_OBJECT Q_DISABLE_COPY(QueuedContactFactory) public: QueuedContactFactory(ContactManagerPtr contactManager, QObject* parent = nullptr); ~QueuedContactFactory() override; QUuid appendNewRequest(const UIntList &handles); Q_SIGNALS: void contactsRetrieved(QUuid uuid, QList contacts); void queueCompleted(); private Q_SLOTS: void onPendingContactsFinished(Tp::PendingOperation *operation); void processNextRequest(); private: struct Entry { QUuid uuid; UIntList handles; }; bool m_isProcessing; ContactManagerPtr m_manager; QQueue m_queue; }; struct TP_QT_NO_EXPORT PendingOpenTube::Private { Private(const QVariantMap ¶meters, PendingOpenTube *parent); // Public object PendingOpenTube *parent; OutgoingStreamTubeChannelPtr tube; QVariantMap parameters; }; struct TP_QT_NO_EXPORT OutgoingStreamTubeChannel::Private { Private(OutgoingStreamTubeChannel *parent); OutgoingStreamTubeChannel *parent; QHash contactsForConnections; QHash, uint> connectionsForSourceAddresses; QHash connectionsForCredentials; QHash > pendingNewConnections; struct ClosedConnection { uint id; QString error, message; ClosedConnection() : id(~0U) {} ClosedConnection(uint id, const QString &error, const QString &message) : id(id), error(error), message(message) {} }; QHash pendingClosedConnections; QueuedContactFactory *queuedContactFactory; }; } #endif