/* * Copyright (c) 2011 Tobias Markmann * Licensed under the simplified BSD license. * See Documentation/Licenses/BSD-simplified.txt for more information. */ /* * Copyright (c) 2015-2016 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ #pragma once #include #include #include #include namespace Swift { class JID; class IQRouter; /* * This class is designed to find possible SOCKS5 bytestream proxies which are used for peer-to-peer data transfers in * restrictive environments. */ class SWIFTEN_API SOCKS5BytestreamProxyFinder { public: SOCKS5BytestreamProxyFinder(const JID& service, IQRouter *iqRouter); ~SOCKS5BytestreamProxyFinder(); void start(); void stop(); boost::signals2::signal >)> onProxiesFound; private: void sendBytestreamQuery(const JID&); void handleServiceFound(const JID&, std::shared_ptr); void handleProxyResponse(std::shared_ptr > requester, std::shared_ptr, ErrorPayload::ref); void handleWalkEnded(); private: JID service; IQRouter* iqRouter; std::shared_ptr serviceWalker; std::vector proxyHosts; std::set > > pendingRequests; }; }