summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'Swiften/FileTransfer/SOCKS5BytestreamProxyFinder.h')
-rw-r--r--Swiften/FileTransfer/SOCKS5BytestreamProxyFinder.h60
1 files changed, 37 insertions, 23 deletions
diff --git a/Swiften/FileTransfer/SOCKS5BytestreamProxyFinder.h b/Swiften/FileTransfer/SOCKS5BytestreamProxyFinder.h
index 8265157..893f475 100644
--- a/Swiften/FileTransfer/SOCKS5BytestreamProxyFinder.h
+++ b/Swiften/FileTransfer/SOCKS5BytestreamProxyFinder.h
@@ -4,12 +4,19 @@
* 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 <boost/shared_ptr.hpp>
+#include <memory>
+#include <Swiften/Base/API.h>
#include <Swiften/Disco/DiscoServiceWalker.h>
-#include <Swiften/Network/HostAddressPort.h>
#include <Swiften/Elements/S5BProxyRequest.h>
namespace Swift {
@@ -17,26 +24,33 @@ namespace Swift {
class JID;
class IQRouter;
-class SOCKS5BytestreamProxyFinder {
- public:
- SOCKS5BytestreamProxyFinder(const JID& service, IQRouter *iqRouter);
- ~SOCKS5BytestreamProxyFinder();
-
- void start();
- void stop();
-
- boost::signal<void(boost::shared_ptr<S5BProxyRequest>)> onProxyFound;
-
- private:
- void sendBytestreamQuery(const JID&);
-
- void handleServiceFound(const JID&, boost::shared_ptr<DiscoInfo>);
- void handleProxyResponse(boost::shared_ptr<S5BProxyRequest>, ErrorPayload::ref);
- private:
- JID service;
- IQRouter* iqRouter;
- boost::shared_ptr<DiscoServiceWalker> serviceWalker;
- std::vector<boost::shared_ptr<GenericRequest<S5BProxyRequest> > > requests;
- };
+/*
+ * 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<void(std::vector<std::shared_ptr<S5BProxyRequest> >)> onProxiesFound;
+
+ private:
+ void sendBytestreamQuery(const JID&);
+
+ void handleServiceFound(const JID&, std::shared_ptr<DiscoInfo>);
+ void handleProxyResponse(std::shared_ptr<GenericRequest<S5BProxyRequest> > requester, std::shared_ptr<S5BProxyRequest>, ErrorPayload::ref);
+ void handleWalkEnded();
+
+ private:
+ JID service;
+ IQRouter* iqRouter;
+ std::shared_ptr<DiscoServiceWalker> serviceWalker;
+ std::vector<S5BProxyRequest::ref> proxyHosts;
+ std::set<std::shared_ptr<GenericRequest<S5BProxyRequest> > > pendingRequests;
+};
}