#pragma once #include #include #include #include "Swiften/Network/BoostIOServiceThread.h" #include "Swiften/Network/BoostConnectionServer.h" #include "Swiften/Server/UserRegistry.h" #include "Swiften/Base/IDGenerator.h" #include "Swiften/Server/ServerFromClientSession.h" #include "Swiften/JID/JID.h" #include "Swiften/Parser/PayloadParsers/FullPayloadParserFactoryCollection.h" #include "Swiften/Serializer/PayloadSerializers/FullPayloadSerializerCollection.h" #include "Swiften/LinkLocal/LinkLocalServiceInfo.h" #include "Slimber/ServerError.h" namespace Swift { class DNSSDServiceID; class String; class VCardCollection; class LinkLocalConnector; class LinkLocalServiceBrowser; class LinkLocalPresenceManager; class BoostConnectionServer; class SessionTracer; class RosterPayload; class Presence; class Server { public: Server( int clientConnectionPort, int linkLocalConnectionPort, LinkLocalServiceBrowser* browser, VCardCollection* vCardCollection); ~Server(); void start(); void stop(); int getLinkLocalPort() const { return linkLocalConnectionPort; } int getClientToServerPort() const { return clientConnectionPort; } boost::signal onSelfConnected; boost::signal)> onStopped; private: void stop(boost::optional); void handleNewClientConnection(boost::shared_ptr c); void handleSessionStarted(); void handleSessionFinished(boost::shared_ptr); void handleElementReceived(boost::shared_ptr element, boost::shared_ptr session); void handleRosterChanged(boost::shared_ptr roster); void handlePresenceChanged(boost::shared_ptr presence); void handleServiceRegistered(const DNSSDServiceID& service); void handleNewLinkLocalConnection(boost::shared_ptr connection); void handleLinkLocalSessionFinished(boost::shared_ptr session); void handleLinkLocalElementReceived(boost::shared_ptr element, boost::shared_ptr session); void handleConnectFinished(boost::shared_ptr connector, bool error); void handleClientConnectionServerStopped( boost::optional); void handleLinkLocalConnectionServerStopped( boost::optional); boost::shared_ptr getLinkLocalSessionForJID(const JID& jid); boost::shared_ptr getLinkLocalConnectorForJID(const JID& jid); void registerLinkLocalSession(boost::shared_ptr session); void unregisterService(); LinkLocalServiceInfo getLinkLocalServiceInfo(boost::shared_ptr presence); private: class DummyUserRegistry : public UserRegistry { public: DummyUserRegistry() {} virtual bool isValidUserPassword(const JID&, const String&) const { return true; } }; private: IDGenerator idGenerator; FullPayloadParserFactoryCollection payloadParserFactories; FullPayloadSerializerCollection payloadSerializers; BoostIOServiceThread boostIOServiceThread; DummyUserRegistry userRegistry; bool linkLocalServiceRegistered; bool rosterRequested; int clientConnectionPort; int linkLocalConnectionPort; LinkLocalServiceBrowser* linkLocalServiceBrowser; VCardCollection* vCardCollection; LinkLocalPresenceManager* presenceManager; bool stopping; boost::shared_ptr serverFromClientConnectionServer; std::vector serverFromClientConnectionServerSignalConnections; boost::shared_ptr serverFromClientSession; boost::shared_ptr lastPresence; JID selfJID; boost::shared_ptr serverFromNetworkConnectionServer; std::vector serverFromNetworkConnectionServerSignalConnections; std::vector< boost::shared_ptr > linkLocalSessions; std::vector< boost::shared_ptr > connectors; std::vector< boost::shared_ptr > tracers; }; }