/* * Copyright (c) 2011 Tobias Markmann * Licensed under the simplified BSD license. * See Documentation/Licenses/BSD-simplified.txt for more information. */ /* * Copyright (c) 2013-2017 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ #pragma once #include #include #include #include #include #include #include #include #include namespace Swift { class ConnectionFactory; class TimerFactory; class RemoteJingleTransportCandidateSelector { public: RemoteJingleTransportCandidateSelector(ConnectionFactory*, TimerFactory*, const FileTransferOptions&); virtual ~RemoteJingleTransportCandidateSelector(); virtual void addCandidates(const std::vector&); virtual void setSOCKS5DstAddr(const std::string&); virtual void startSelectingCandidate(); virtual void stopSelectingCandidate(); boost::signals2::signal&, std::shared_ptr)> onCandidateSelectFinished; private: void tryNextCandidate(); void handleSessionReady(bool error); private: ConnectionFactory* connectionFactory; TimerFactory* timerFactory; std::priority_queue< JingleS5BTransportPayload::Candidate, std::vector, JingleS5BTransportPayload::CompareCandidate> candidates; std::shared_ptr s5bSession; boost::signals2::connection sessionReadyConnection; JingleS5BTransportPayload::Candidate lastCandidate; std::string socks5DstAddr; FileTransferOptions options; }; }