/* * 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 #include #include #include #include #include #include #include #include #include namespace Swift { class SWIFTEN_API SOCKS5BytestreamRegistry { public: SOCKS5BytestreamRegistry(); boost::shared_ptr getReadBytestream(const std::string& destination) const; void addReadBytestream(const std::string& destination, boost::shared_ptr byteStream); void removeReadBytestream(const std::string& destination); boost::shared_ptr getWriteBytestream(const std::string& destination) const; void addWriteBytestream(const std::string& destination, boost::shared_ptr byteStream); void removeWriteBytestream(const std::string& destination); /** * Generate a new session ID to use for new S5B streams. */ std::string generateSessionID(); /** * Start an actual transfer. */ SOCKS5BytestreamServerSession* getConnectedSession(const std::string& destination); public: static std::string getHostname(const std::string& sessionID, const JID& requester, const JID& target); private: friend class SOCKS5BytestreamServerSession; typedef std::map > ReadBytestreamMap; ReadBytestreamMap readBytestreams; typedef std::map > WriteBytestreamMap; WriteBytestreamMap writeBytestreams; std::map serverSessions; IDGenerator idGenerator; }; }