/* * Copyright (c) 2010 Remko Tronçon * Licensed under the GNU General Public License v3. * See Documentation/Licenses/GPLv3.txt for more information. */ #pragma once #include #include #include #include #include "Swiften/Network/BoostIOServiceThread.h" #include "Swiften/Network/ConnectionServer.h" #include "Swiften/Server/UserRegistry.h" #include "Swiften/Server/ServerSession.h" #include "Swiften/Base/IDGenerator.h" #include "Swiften/Server/ServerFromClientSession.h" #include "Swiften/JID/JID.h" #include "Swiften/Base/ByteArray.h" #include "Swiften/Entity/Entity.h" #include "Swiften/Parser/PayloadParsers/FullPayloadParserFactoryCollection.h" #include "Swiften/Serializer/PayloadSerializers/FullPayloadSerializerCollection.h" #include "Swiften/SwiftenCompat.h" #include #include namespace Swift { class ConnectionServer; class SessionTracer; class EventLoop; class NetworkFactories; class StanzaChannel; class IQRouter; class TLSServerContextFactory; class Server : public Entity { public: Server(EventLoop* eventLoop, NetworkFactories* networkFactories, UserRegistry *userRegistry, const JID& jid, const std::string &address, int port); ~Server(); void start(); void stop(); int getPort() const { return port_; } StanzaChannel* getStanzaChannel() const { return stanzaChannel_; } IQRouter* getIQRouter() const { return iqRouter_; } SWIFTEN_SHRPTR_NAMESPACE::shared_ptr getConnectionServer() const { return serverFromClientConnectionServer; } boost::signal onDataRead; boost::signal onDataWritten; void addTLSEncryption(TLSServerContextFactory* tlsContextFactory, CertificateWithKey::ref cert); private: void handleNewClientConnection(SWIFTEN_SHRPTR_NAMESPACE::shared_ptr c); void handleSessionStarted(SWIFTEN_SHRPTR_NAMESPACE::shared_ptr); void handleSessionFinished(SWIFTEN_SHRPTR_NAMESPACE::shared_ptr); void handleElementReceived(SWIFTEN_SHRPTR_NAMESPACE::shared_ptr element, SWIFTEN_SHRPTR_NAMESPACE::shared_ptr session); void handleDataRead(const SafeByteArray&); void handleDataWritten(const SafeByteArray&); private: IDGenerator idGenerator; UserRegistry *userRegistry_; int port_; EventLoop* eventLoop; NetworkFactories* networkFactories_; bool stopping; SWIFTEN_SHRPTR_NAMESPACE::shared_ptr serverFromClientConnectionServer; std::vector serverFromClientConnectionServerSignalConnections; std::list > serverFromClientSessions; JID selfJID; StanzaChannel *stanzaChannel_; IQRouter *iqRouter_; TLSServerContextFactory *tlsFactory; CertificateWithKey::ref cert; PlatformXMLParserFactory *parserFactory_; std::string address_; }; }