Files
@ 2c338a2447e6
Branch filter:
Location: libtransport.git/include/transport/Transport.h
2c338a2447e6
4.9 KiB
text/plain
Preparation for 2.0.3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 | /**
* libtransport -- C++ library for easy XMPP Transports development
*
* Copyright (C) 2011, Jan Kaluza <hanzz.k@gmail.com>
*
* 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 02111-1301 USA
*/
#pragma once
#include <vector>
#include <boost/bind.hpp>
#include "Swiften/Network/BoostTimerFactory.h"
#include "Swiften/Network/BoostIOServiceThread.h"
#include "Swiften/Network/NetworkFactories.h"
#include "Swiften/Elements/DiscoInfo.h"
#include "Swiften/Elements/Presence.h"
#include "Swiften/Elements/IQ.h"
namespace Transport {
class StorageBackend;
class Factory;
class UserRegistry;
class Frontend;
class PresenceOracle;
class Factory;
class Config;
class UserManager;
class Component {
public:
/// Creates new Component instance.
/// \param loop Main event loop.
/// \param config Cofiguration; this class uses following Config values:
/// - service.jid
/// - service.password
/// - service.server
/// - service.port
/// - service.server_mode
/// \param factories Swift::NetworkFactories.
/// \param factory Transport Abstract factory used to create basic transport structures.
/// \param userRegistery UserRegistry class instance. It's needed only when running transport in server-mode.
Component(Frontend *frontend, Swift::EventLoop *loop, Swift::NetworkFactories *factories, Config *config, Factory *factory, Transport::UserRegistry *userRegistry = NULL);
/// Component destructor.
~Component();
/// Returns Swift::StanzaChannel associated with this Transport::Component.
/// Returns True if the component is in server mode.
/// \return True if the component is in server mode.
bool inServerMode();
/// Starts the Component.
/// In server-mode, it starts listening on particular port for new client connections.
/// In gateway-mode, it connects the XMPP server.
void start();
/// Stops the component.
void stop();
/// Returns Jabber ID of this transport.
/// \return Jabber ID of this transport
Swift::JID &getJID() { return m_jid; }
/// Returns Swift::NetworkFactories which can be used to create new connections.
/// \return Swift::NetworkFactories which can be used to create new connections.
Swift::NetworkFactories *getNetworkFactories() { return m_factories; }
/// Returns Transport Factory used to create basic Transport components.
/// \return Transport Factory used to create basic Transport components.
Factory *getFactory() { return m_factory; }
/// This signal is emitted when server disconnects the transport because of some error.
/// \param error disconnection error
boost::signal<void (const std::string &error)> onConnectionError;
/// This signal is emitted when transport successfully connects the server.
boost::signal<void ()> onConnected;
/// This signal is emitted when XML stanza is sent to server.
Config *getConfig() { return m_config; }
/// It's emitted only for presences addressed to transport itself
/// (for example to="j2j.domain.tld") and for presences comming to
/// MUC (for example to="#chat%irc.freenode.org@irc.domain.tld")
/// \param presence Presence.
boost::signal<void (Swift::Presence::ref presence)> onUserPresenceReceived;
boost::signal<void (boost::shared_ptr<Swift::IQ>)> onRawIQReceived;
void handlePresence(Swift::Presence::ref presence);
void handleConnected();
void handleConnectionError(const std::string &error);
void handleDataRead(const std::string &data);
void handleDataWritten(const std::string &data);
Frontend *getFrontend() {
return m_frontend;
}
PresenceOracle *getPresenceOracle();
private:
void handleDiscoInfoResponse(boost::shared_ptr<Swift::DiscoInfo> info, Swift::ErrorPayload::ref error, const Swift::JID& jid);
void handleCapsChanged(const Swift::JID& jid);
void handleBackendConfigChanged();
Swift::NetworkFactories *m_factories;
Swift::Timer::ref m_reconnectTimer;
PresenceOracle *m_presenceOracle;
Transport::UserRegistry *m_userRegistry;
StorageBackend *m_storageBackend;
int m_reconnectCount;
Config* m_config;
Swift::JID m_jid;
Factory *m_factory;
Swift::EventLoop *m_loop;
Frontend *m_frontend;
friend class User;
friend class UserRegistration;
friend class NetworkPluginServer;
};
}
|